54 lines
2.1 KiB
Plaintext
54 lines
2.1 KiB
Plaintext
|
|
#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
|
|
|
|
|
|
|