@animech-public/playcanvas
Version:
PlayCanvas WebGL game engine
47 lines (45 loc) • 1.67 kB
JavaScript
var shadowSampleCoordPS = `
vec3 getShadowSampleCoord$LIGHT(mat4 shadowTransform, vec4 shadowParams, vec3 worldPosition, vec3 lightPos, inout vec3 lightDir, vec3 lightDirNorm, vec3 normal) {
vec3 surfacePosition = worldPosition;
float distScale = length(lightDir);
surfacePosition = worldPosition + normal * shadowParams.y * clamp(1.0 - dot(normal, -lightDirNorm), 0.0, 1.0) * distScale;
lightDir = surfacePosition - lightPos;
return lightDir;
surfacePosition = worldPosition + normal * shadowParams.y;
float distScale = 1.0;
float distScale = abs(dot(vPositionW - lightPos, lightDirNorm));
surfacePosition = worldPosition + normal * shadowParams.y * clamp(1.0 - dot(normal, -lightDirNorm), 0.0, 1.0) * distScale;
vec4 positionInShadowSpace = shadowTransform * vec4(surfacePosition, 1.0);
positionInShadowSpace.z = saturate(positionInShadowSpace.z) - 0.0001;
positionInShadowSpace.xyz /= positionInShadowSpace.w;
positionInShadowSpace.xy /= positionInShadowSpace.w;
positionInShadowSpace.z = length(lightDir) * shadowParams.w;
positionInShadowSpace.z += getShadowBias(shadowParams.x, shadowParams.z);
surfacePosition = positionInShadowSpace.xyz;
return surfacePosition;
}
`;
export { shadowSampleCoordPS as default };