lightProjectionUV
lightProjectionUV
为给定光源计算投影UV坐标(vec3:xy 为采样UV,z 为深度),默认使用 positionWorld。常用于带贴图的聚光灯投射。
核心优势
无需自建投影矩阵即可把表面点映射到聚光灯投影视域,便于实现 GOBO/Light Cookie 等投影贴图。
常见用途
聚光灯投影贴图(GOBO/Light Cookie)
基于光的贴花/图案投射
投影视域或阴影可视化调试
仅在灯光锥内的局部纹理上色
如何调整
light:传入目标聚光灯实例;建议开启 castShadow 以获取有效投影矩阵。 position:可替换为自定义位置节点,对投影进行偏移/缩放/旋转(先变换再传入)。 采样:使用 .xy 作为纹理 UV;使用 .z 作为可见性/衰减遮罩。 区域限制:结合 step/clamp 仅在 uv∈[0,1] 且 z∈[0,1] 时生效,避免灯外渲染。 多灯:对多个 light 分别调用后按需要混合。
代码示例
1<meshStandardNodeMaterial
2 // 使用聚光灯的投影UV采样投影纹理
3 colorNode={ texture( projectorMap, lightProjectionUV( projLight ).xy ) }
4 // 可选:仅在有效投影视域内显现(uv 与 z 都需在 [0,1])
5 opacityNode={ step(0.0, lightProjectionUV( projLight ).x) * step(lightProjectionUV( projLight ).x, 1.0) * step(0.0, lightProjectionUV( projLight ).y) * step(lightProjectionUV( projLight ).y, 1.0) * step(0.0, lightProjectionUV( projLight ).z) * step(lightProjectionUV( projLight ).z, 1.0) }
6 transparent
7/>