gpu-curtains
Version:
gpu-curtains is a 3D WebGPU rendering engine. It can be used as a standalone 3D engine, but also includes extra classes focused on mapping 3d objects to DOM elements; It allows users to synchronize values such as position, sizing, or scale between them.
37 lines (31 loc) • 1.21 kB
JavaScript
const getPCFDirectionalShadows = (renderer) => {
const directionalLights = renderer.shadowCastingLights.filter(
(light) => light.type === "directionalLights"
);
const minDirectionalLights = Math.max(renderer.lightsBindingParams.directionalLights.max, 1);
return (
/* wgsl */
`
fn getPCFDirectionalShadows(worldPosition: vec3f) -> array<f32, ${minDirectionalLights}> {
var directionalShadowContribution: array<f32, ${minDirectionalLights}>;
var lightDirection: vec3f;
${directionalLights.map((light, index) => {
return `lightDirection = worldPosition - directionalLights.elements[${index}].direction;
${light.shadow.isActive ? `
if(directionalShadows.directionalShadowsElements[${index}].isActive > 0) {
directionalShadowContribution[${index}] = getPCFDirectionalShadowContribution(
${index},
worldPosition,
directionalShadowDepthTexture${index}
);
} else {
directionalShadowContribution[${index}] = 1.0;
}
` : `directionalShadowContribution[${index}] = 1.0;`}`;
}).join("\n")}
return directionalShadowContribution;
}
`
);
};
export { getPCFDirectionalShadows };