varyingProperty
varyingProperty
varyingProperty 提供了一种“先声明,后赋值”的机制,用于在顶点和片元着色器之间传递数据。它允许你先定义一个带类型和名称的“数据插槽”,后续再为其赋值,是构建模块化和可扩展材质系统的关键。
核心优势
核心优势在于解耦与模块化。它允许着色器的不同逻辑部分通过一个命名的“数据契约”来通信而无需直接耦合,从而能够轻松创建可重用、可插拔的着色器特效。
常见用途
为可插拔的材质特效(如积雪、描边)定义数据接口,以便于在不同材质上复用。
为分层材质定义混合蒙版通道,将蒙版计算与混合逻辑解耦。
作为可视化调试的“探针”,将顶点着色器中的计算结果(如速度、张力)传递到片元着色器中显示为颜色。
如何调整
该节点本身是一个空容器,其效果完全由后续通过 `.assign()` 方法赋给它的节点决定。要调整视觉效果,必须改变被赋值的节点。例如,将赋值从 `uv()` 改为 `uv().rotate(timer)`,就会使纹理从静止变为旋转。
代码示例
1// 1. 声明一个名为 'v_worldPos' 的数据插槽
2const v_worldPos = varyingProperty('vec3', 'v_worldPos');
3
4// 2. 在顶点逻辑中,为其赋值
5v_worldPos.assign(positionWorld);
6
7// 3. 在片元逻辑中,读取并使用该值
8const height = v_worldPos.y;