instancedArray
instancedArray
一个用于创建与实例绑定的、可在 GPU 上读写的数据数组的节点,是实现 GPU 驱动的动态系统(如粒子模拟、群体行为)的关键。
核心优势
核心优势在于实现了 GPU 端的状态持久化和可写能力,将顶点着色器转变为一个小型计算内核,从而在 GPU 上直接进行物理模拟等复杂计算,避免了昂贵的 CPU-GPU 数据传输瓶颈。
常见用途
高性能 GPU 粒子系统(在 GPU 端更新粒子状态)
群体行为模拟(如鸟群、鱼群)
GPU 驱动的细胞自动机(如生命游戏)
可交互的植被(如草地被角色压倒后恢复)
如何调整
调整方式是改变着色器中对该数组的“写入逻辑”。例如,在粒子系统中,将写入的重力向量从垂直向下改为指向一个固定点,可以将粒子喷泉效果变为一个被引力拉回中心的脉冲爆炸效果,从而将静态渲染器变为动态模拟器。
代码示例
1
2// 读取当前粒子的状态
3const current = particleData.element( instanceIndex );
4
5// 计算新位置和速度
6const newPos = current.position.add( current.velocity );
7const newVel = current.velocity.add( gravity ); // gravity 是一个 vec3
8
9// 将新状态写回数组,供下一帧使用
10current.assign( { position: newPos, velocity: newVel } );
11