UNPKG

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.

40 lines (36 loc) 1.6 kB
const getTransmissionThickness = ({ transmissionTexture = null, thicknessTexture = null } = {}) => { let transmissionThickness = ""; if (transmissionTexture) { transmissionThickness += /* wgsl */ ` var transmissionUV: vec2f = ${transmissionTexture.texCoordAttributeName ?? "uv"};`; if ("useTransform" in transmissionTexture.texture.options && transmissionTexture.texture.options.useTransform) { transmissionThickness += /* wgsl */ ` transmissionUV = (${transmissionTexture.texture.options.name}Matrix * vec3(transmissionUV, 1.0)).xy;`; } transmissionThickness += /* wgsl */ ` let transmissionSample: vec4f = textureSample(${transmissionTexture.texture.options.name}, ${transmissionTexture.sampler?.name ?? "defaultSampler"}, transmissionUV); transmission = clamp(transmission * transmissionSample.r, 0.0, 1.0);`; } if (thicknessTexture) { transmissionThickness += /* wgsl */ ` var thicknessUV: vec2f = ${thicknessTexture.texCoordAttributeName ?? "uv"};`; if ("useTransform" in thicknessTexture.texture.options && thicknessTexture.texture.options.useTransform) { transmissionThickness += /* wgsl */ ` thicknessUV = (${thicknessTexture.texture.options.name}Matrix * vec3(thicknessUV, 1.0)).xy;`; } transmissionThickness += /* wgsl */ ` let thicknessSample: vec4f = textureSample(${thicknessTexture.texture.options.name}, ${thicknessTexture.sampler?.name ?? "defaultSampler"}, thicknessUV); thickness *= thicknessSample.g;`; } return transmissionThickness; }; export { getTransmissionThickness };