element
element
一个函数节点,用于从一个数组型节点(如 `nodeArray` 或 `bufferAttribute`)中,根据一个动态的整数索引来访问(读取)特定的元素。
核心优势
核心优势在于它是在着色器中实现动态数据访问的关键。它允许索引本身是一个可计算的节点,使得着色器可以根据运行时条件(如顶点ID、噪点值、实例ID)来决定读取哪一份数据,这是实现程序化效果和数据驱动算法的基础。
常见用途
从颜色调色板(nodeArray)中根据计算出的索引选取颜色
在多光源着色器中,用循环变量作为索引遍历光源数据数组
在 GPU 粒子系统中,使用 `instanceID` 作为索引从 `bufferAttribute` 中读取每个粒子的状态
在顶点蒙皮中,使用 `skinIndex` 属性作为索引查找骨骼矩阵
如何调整
调整 `element` 效果的主要方式是改变其 `index` 输入节点。例如,在一个颜色调色板应用中,若索引来自 `positionWorld.y` 会产生垂直色带;若将索引逻辑改为基于 `uv().x`,`element` 就会根据水平纹理坐标去拾取颜色,从而将视觉效果变为水平色带。这展示了通过控制索引可以完全重映射数据在模型表面的分布。
代码示例
1// 根据世界 Y 坐标计算一个动态索引
2const index = floor( positionWorld.y.mul( 4 ) );
3
4// 使用动态索引从 colorPalette (一个 nodeArray) 中访问一个元素
5const finalColor = element( colorPalette, index );