UNPKG

@animech-public/playcanvas

Version:
25 lines (23 loc) 1.11 kB
var shadowVSM8PS = ` float calculateVSM8(vec3 moments, float Z, float vsmBias) { float VSMBias = vsmBias; float depthScale = VSMBias * Z; float minVariance1 = depthScale * depthScale; return chebyshevUpperBound(moments.xy, Z, minVariance1, 0.1); } float decodeFloatRG(vec2 rg) { return rg.y*(1.0/255.0) + rg.x; } float VSM8(TEXTURE_ACCEPT(tex), vec2 texCoords, float resolution, float Z, float vsmBias, float exponent) { vec4 c = texture2D(tex, texCoords); vec3 moments = vec3(decodeFloatRG(c.xy), decodeFloatRG(c.zw), 0.0); return calculateVSM8(moments, Z, vsmBias); } float getShadowVSM8(TEXTURE_ACCEPT(shadowMap), vec3 shadowCoord, vec4 shadowParams, float exponent, vec3 lightDir) { return VSM8(TEXTURE_PASS(shadowMap), shadowCoord.xy, shadowParams.x, shadowCoord.z, shadowParams.y, 0.0); } float getShadowSpotVSM8(TEXTURE_ACCEPT(shadowMap), vec3 shadowCoord, vec4 shadowParams, float exponent, vec3 lightDir) { return VSM8(TEXTURE_PASS(shadowMap), shadowCoord.xy, shadowParams.x, length(lightDir) * shadowParams.w + shadowParams.z, shadowParams.y, 0.0); } `; export { shadowVSM8PS as default };