Files
Fishing2/Packages/com.jbooth.microsplat.wind/Scripts/Editor/microsplat_func_glitter.txt
2025-06-04 09:09:39 +08:00

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