nodeImmutable
nodeImmutable
一个性能优化节点,用于声明一个永不改变的编译时常量。它将一个值直接“烘焙”到最终的着色器代码中,从而消除不必要的 uniform 变量开销。
核心优势
极致的性能优化。它将一个运行时变量(uniform)转变为着色器代码中的一个字面量(如 `3.14`),完全消除了 GPU 在运行时查找和读取 uniform 的开销,使相关计算达到最快速度。
常见用途
定义数学或物理常量,如圆周率 PI 或固定的折射率 (IOR)。
为风格化着色器(如卡通着色)设置固定的参数,例如颜色阶梯的数量。
硬编码一个固定不变的颜色或方向向量,以避免为其创建 uniform。
如何调整
该节点的值在材质编译后是不可调节的。任何调整都必须在 JavaScript 代码中、在编译前完成,这会触发着色器的重新编译。在运行时尝试修改其值不会产生任何效果,这与可在每一帧更新的 uniform 节点形成鲜明对比。
代码示例
1// 1. 定义一个永不改变的颜色阶数
2const celBands = nodeImmutable(float(3.0));
3
4// 2. 使用该不可变阶数来量化光照强度
5const celShading = lightIntensity.mul(celBands).ceil().div(celBands);