userData
userData
一个节点,用于将每个 3D 对象自身的自定义数据(`Object3D.userData`)传递给其材质,从而在不创建新材质的情况下实现逐对象的视觉定制。
核心优势
它允许大量使用相同材质的物体表现出各自独特的视觉效果,极大地提高了材质复用性和渲染效率,是实现程序化多样性和数据可视化的关键。
常见用途
为大量实例(如草地、森林)添加随机变化,避免视觉重复。
根据每个物体的数据(如地图上的人口)来驱动其视觉属性(如颜色、高度)。
实时反映游戏对象的状态(如生命值、中毒效果)到其外观上。
如何调整
通过在 JavaScript 中实时修改特定对象的 `userData` 属性值来调整。例如,响应鼠标悬停事件来改变一个 `outlineColor`,或根据物体与摄像机的距离来更新一个 `detailLevel` 值以实现动态LOD效果。
代码示例
1// 在 JS 中为特定对象设置数据
2mesh.userData.highlightColor = new THREE.Color(0x00ffff);
3mesh.userData.fresnelPower = 2.5;
4
5// 在 TSL 材质中按名称和类型引用这些数据
6const customColorNode = TSL.userData('highlightColor', 'color');
7const fresnelPowerNode = TSL.userData('fresnelPower', 'float');