nodeArray
nodeArray
提供一种在 TSL 中定义和使用数组的机制,它会被编译成 GLSL 中的 uniform 数组,从而允许以结构化、可扩展的方式处理数据集合,如多光源或颜色调色板。
核心优势
核心优势是支持动态索引访问,允许使用另一个节点(如顶点ID或噪点函数结果)计算出的整数作为索引,从数组中动态地取出元素,这是实现复杂算法和高级视觉效果的基础。
常见用途
多光源渲染(存储光源位置和颜色)
颜色调色板着色(作为颜色查找表)
GPU 实例化与粒子系统(传递每个实例的自定义数据)
如何调整
调整用于生成索引的节点逻辑可以完全改变数据的映射方式。例如,将索引从基于世界Y坐标 `floor(positionWorld.y * 4)` 改为基于纹理U坐标 `floor(uv().x * 4)`,会将物体上垂直的彩色条纹变为水平的彩色条纹,而调色板本身的数据并未改变。
代码示例
1// 创建一个颜色调色板数组
2const colorPalette = nodeArray([
3 color(0xff0000), // 红色
4 color(0x00ff00), // 绿色
5 color(0x0000ff) // 蓝色
6]);
7
8// 根据世界 Y 坐标计算一个动态索引
9const index = floor(positionWorld.y.mul(3));
10
11// 使用动态索引从数组中访问一个元素
12const finalColor = element(colorPalette, index);