instanceIndex
instanceIndex
在 TSL 中提供一个只读的、从 0 开始的整数,代表当前正在渲染的几何体实例的唯一 ID。
核心优势
它完美抽象了底层的内建变量(如 GLSL 的 gl_InstanceID),提供了统一、可移植且语义清晰的接口。作为所有逐实例变化效果的起点,它是一个安全、基础的构建块。
常见用途
程序化布局(如创建网格)
算法化视觉变化(如生成随机种子或图案)
动画相位偏移(如鱼群、人群)
调试与可视化(将索引转为颜色)
如何调整
instanceIndex 本身不可调整,但通过对其进行不同的数学运算可以创造千变万化的效果。例如,直接使用它可创建线性排列,用 sin() 函数处理它可创建波浪,用 cos() 和 sin() 结合则可创建圆形排列。
代码示例
1// 定义网格宽度
2const gridWidth = float( 20.0 );
3
4// 通过索引计算二维网格坐标
5const gridX = instanceIndex.mod( gridWidth );
6const gridY = instanceIndex.div( gridWidth ).floor();
7
8// 将计算出的网格坐标应用为位置偏移
9const gridPosition = vec3( gridX, gridY, 0 );