#if _GLITTER void DoGlitter(Input i, inout RawSamples s, Config c, float camDist, float3 worldVertexNormal, float3 worldPos) { float2 uv = c.uv; #if _WORLDUV uv = i.worldPos.xz; #endif float str = _GlitterStrength * lerp(_GlitterDistFade.z, _GlitterDistFade.w, saturate((camDist - _GlitterDistFade.x) / max(_GlitterDistFade.y, 0.01))); float3 lightDir = GetGlobalLightDir(i); half3 viewDir = normalize(_WorldSpaceCameraPos - i.worldPos); half specular = saturate(dot(worldVertexNormal, normalize(viewDir + lightDir))); specular = pow(specular, abs(_GlitterShininess)); float boost = pow(specular, abs(_GlitterShininess)) * _GlitterThreshold; float2 uvo = sin(uv * _GlitterUVScale.xy * 0.237); half2 n = SAMPLE_TEXTURE2D(_GlitterWind, sampler_Diffuse, uv * _GlitterUVScale + i.viewDir.z * _GlitterViewDep).xy; half n2 = SAMPLE_TEXTURE2D(_GlitterWind, sampler_Diffuse, uvo + uv * _GlitterUVScale * 0.17921 + 0.5).b; n.xy = n.xy * 2 - 1; n.xy *= n2; n.xy *= _GlitterGraininess * boost; boost *= str; SAMPLE_PER_TEX(pt, 8.5, c, half4(1,0,1,1)); s.normSAO0.xy = lerp(s.normSAO0.xy, BlendNormal2(s.normSAO0.xy, n), boost * pt0.g); s.normSAO0.z = min(1, s.normSAO0.z + boost * pt0.g); s.normSAO1.xy = lerp(s.normSAO1.xy, BlendNormal2(s.normSAO1.xy, n), boost * pt1.g); s.normSAO1.z = min(1, s.normSAO1.z + boost * pt1.g); #if !_MAX2LAYER s.normSAO2.xy = lerp(s.normSAO2.xy, BlendNormal2(s.normSAO2.xy, n), boost * pt2.g); s.normSAO2.z = min(1, s.normSAO2.z + boost * pt2.g); #endif #if !_MAX3LAYER || !_MAX2LAYER s.normSAO3.xy = lerp(s.normSAO3.xy, BlendNormal2(s.normSAO3.xy, n), boost * pt3.g); s.normSAO3.z = min(1, s.normSAO3.z + boost * pt3.g); #endif } #endif