namespace
namespace
为一个节点创建独立的编译上下文,以确保在不同着色器阶段(如顶点和片元)复用它时,能获取正确的数据流。
核心优势
通过精确控制编译上下文,它能确保修改后的顶点数据(如位移后的世界坐标)被正确传递到片元着色器,从而避免渲染错误并解锁高级特效。
常见用途
在顶点位移后,于片元着色器中获取正确的、位移后的顶点位置
为 `.once()` 优化创建独立的作用域,使其能在每个着色器阶段各执行一次
如何调整
在进行顶点位移的材质中,如果不使用 `namespace` 来包装片元着色器中的 `positionWorld`,会导致颜色图案基于物体位移前的原始位置计算,从而与最终扭曲的几何形状不匹配,产生视觉错位。
代码示例
1// 在片元着色器中,使用 namespace 获取顶点着色器位移后的新位置
2const finalPosition = namespace( positionWorld, 'fragment' );
3
4// 基于新位置计算颜色
5material.colorNode = finalPosition.normalize();