playcanvas
Version:
PlayCanvas WebGL game engine
4 lines (2 loc) • 1.18 kB
JavaScript
var shadowCascadesPS = "\nint getShadowCascadeIndex(vec4 shadowCascadeDistances, int shadowCascadeCount) {\n float depth = 1.0 / gl_FragCoord.w;\n vec4 comparisons = step(shadowCascadeDistances, vec4(depth));\n int cascadeIndex = int(dot(comparisons, vec4(1.0)));\n return min(cascadeIndex, shadowCascadeCount - 1);\n}\nint ditherShadowCascadeIndex(int cascadeIndex, vec4 shadowCascadeDistances, int shadowCascadeCount, float blendFactor) {\n \n if (cascadeIndex < shadowCascadeCount - 1) {\n float currentRangeEnd = shadowCascadeDistances[cascadeIndex];\n float transitionStart = blendFactor * currentRangeEnd;\n float depth = 1.0 / gl_FragCoord.w;\n if (depth > transitionStart) {\n float transitionFactor = smoothstep(transitionStart, currentRangeEnd, depth);\n float dither = fract(sin(dot(gl_FragCoord.xy, vec2(12.9898, 78.233))) * 43758.5453);\n if (dither < transitionFactor) {\n cascadeIndex += 1;\n }\n }\n }\n return cascadeIndex;\n}\nvoid fadeShadow(vec4 shadowCascadeDistances) { \n float depth = 1.0 / gl_FragCoord.w;\n if (depth > shadowCascadeDistances.w) {\n dShadowCoord.z = -9999999.0;\n }\n}\n";
export { shadowCascadesPS as default };