OnMaterialUpdate
OnMaterialUpdate
在共享该材质的对象中,**每帧仅当第一个对象开始渲染时**触发一次 JavaScript 回调。该事件必须在 TSL 的 `Fn()` 函数体内声明。
核心优势
提供材质级的每帧一次的更新时机,可在多对象共享材质的场景里避免重复工作;适合刷新一次性的帧级资源或推送全局 uniform。
常见用途
每帧刷新材质级缓存或共享纹理(如屏幕纹理、噪声缓冲)
推送与相机、时间、输入等相关的全局 uniform
在多对象共享同一材质时避免对每个对象重复执行昂贵计算
如何调整
调整方式与 `OnObjectUpdate` 类似,但该事件每帧仅触发一次(在该材质首个对象被绘制时)。将需要一次性执行的逻辑放入回调,避免在回调内做与对象无关的重复计算。
代码示例
1const updateShared = Fn(() => {
2 OnMaterialUpdate( (frame) => {
3 const { material, renderer, camera } = frame;
4 // 示例:每帧一次的材质级更新
5 material.userData.frame = (frame.frameId ?? 0);
6 } );
7 return 0;
8} ).once();