OnObjectUpdate
OnObjectUpdate
在每次对象(Mesh 或 Sprite)被渲染时触发一次 JavaScript 回调。该事件必须在 TSL 的 `Fn()` 函数体内声明,事件与该 `Fn()` 的执行上下文绑定。
核心优势
提供逐对象的渲染阶段钩子,无需手动接入 three.js 的底层回调即可在每帧每对象执行自定义逻辑;适合在渲染路径上同步 per-object 状态或做可视化统计。
常见用途
基于当前对象或相机状态,更新与对象相关的 uniform 或 `userData` 值
收集渲染统计数据(可见性、绘制顺序、批次数)
在共享材质下,针对不同对象执行差异化的轻量逻辑
如何调整
效果完全由回调函数决定。将 `OnObjectUpdate` 放在不同的 `Fn()` 中可改变其绑定关系;在回调中读取 `frame`(如 `object`、`camera`)以驱动逻辑。注意:该回调会对每个可见对象在每帧调用,避免在其中分配大量临时对象或创建新节点,以减少 GC 和抖动。
代码示例
1// 在 Fn 中声明事件,使其与着色器函数绑定
2const myFn = Fn(() => {
3 OnObjectUpdate( (frame) => {
4 // frame 通常提供 object / material / camera / renderer 等上下文
5 const { object } = frame;
6 // 示例:将对象的自定义数据同步到 JS 侧或驱动外部状态
7 object.userData.lastDraw = (frame.frameId ?? 0);
8 } );
9 // ... 返回需要的节点值
10 return 0;
11} ).once();