objectGroup
objectGroup
一个用于管理和优化逐对象(per-object)更新的 Uniform 数据的逻辑分组,对应 WebGPU 中的 Uniform Buffer Object (UBO)。
核心优势
核心优势在于性能优化:它将所有逐对象更新的 Uniforms 打包成一个数据块,显著减少了 API 调用开销。同时,它清晰地划分了数据作用域,并由渲染器自动管理,简化了开发。
常见用途
为共享材质的多个对象设置不同的属性(如独特的颜色、磨损度)。
在对象ID拾取中,传递每个对象唯一的ID颜色。
提供基础变换矩阵(如 `modelMatrix`),是所有依赖对象位置、旋转和缩放计算的基础。
如何调整
通过在特定对象的 `onBeforeRender` 回调中修改添加到该组的 Uniform 值。例如,将一个 `dissolveFactor` uniform 的值从 0 逐渐变为 1,可以使该特定对象产生溶解消失的动画,而其他共享同一材质的对象不受影响。
代码示例
1// 1. 声明一个逐对象更新的 uniform
2const intensity = uniform( 1.0 );
3objectGroup.add( intensity );
4
5// 2. 在材质中使用它
6material.colorNode = color( 0xff0000 ).mul( intensity );
7
8// 3. 在渲染单个对象前,为其设置特定的值
9meshA.onBeforeRender = () => {
10 intensity.value = 0.2; // 使该对象变暗
11};