bufferAttribute
bufferAttribute
将 JavaScript 中的大型数据数组(TypedArray)作为只读存储注入到着色器中,并允许通过整数索引进行高效的随机访问,极大地简化了 GPGPU(通用 GPU 计算)任务。
核心优势
核心优势在于其极高的易用性,它将创建数据纹理、处理索引计算等复杂工作完全自动化,让开发者能以直观的 `element(index)` 方式访问整个数据集,实现了数据与几何体的解耦,并具备出色的性能。
常见用途
GPU 粒子系统(存储粒子状态)
骨骼动画(作为骨骼矩阵的查找表)
顶点动画纹理(存储逐帧顶点数据)
大规模地形或水面置换(提供高度场数据)
如何调整
调整 `offset` 参数可以从交错数据中读取不同部分。例如,在一个包含 [位置, 速度, ...] 的数组中,将速度的 `offset` 错误地设置为 1 而不是 2,会导致着色器读取到被污染的数据(如位置的 y 分量和速度的 x 分量),使粒子沿错误的路径移动,直观地展示了精确内存布局的重要性。
代码示例
1// 从交错数据源中,根据步幅和偏移量分别读取位置和速度
2const dataNode = bufferAttribute( interleavedData, 'vec2', 4 );
3
4// 位置数据从偏移量 0 开始
5dataNode.offset = 0;
6const position = dataNode.element( particleIndex );
7
8// 速度数据从偏移量 2 开始
9dataNode.offset = 2;
10const velocity = dataNode.element( particleIndex );