materialReference
materialReference
创建一个引用材质属性的节点。按给定类型将该属性作为 uniform 暴露给 TSL;未传入材质时默认引用当前被渲染对象的材质。
核心优势
无需新增 uniform 即可将现有材质属性纳入节点图;还可用一个“控制材质”的属性跨对象驱动多个材质,实现参数复用与同步。
常见用途
用材质的 roughness 值去调制 metalness、emissive 强度等其他输入
以某个“控制材质”的参数同步多材质外观
将标准材质属性(如 color、opacity、envMapIntensity)暴露为可组合的节点输入
在调试中可视化某个材质参数的实时数值
如何调整
name:目标材质属性名,例如 'roughness'、'metalness'、'opacity'、'envMapIntensity' 等;type:用于表示该属性的 uniform 类型,常见有 'float'、'color'、'vec2'、'vec3'、'vec4'。应与属性实际类型匹配;material:可选,传入一个具体的 Material 实例可将引用锁定到该材质;省略则引用当前对象的材质。运行期通过更新被引用材质的 JS 属性即可驱动效果。若切换会影响宏定义/管线的属性(如启用/禁用贴图),可能需要对目标材质设置 needsUpdate = true。
代码示例
1// React (R3F):从本材质读取 roughness,去驱动 metalness
2<mesh>
3 <sphereGeometry args={[0.4, 128, 128]} />
4 <meshStandardNodeMaterial
5 roughness={0.6}
6 metalnessNode={ materialReference('roughness', 'float') }
7 />
8</mesh>
9
10// JS:让另一个材质的 roughness 驱动当前材质(假设 controllerMat 已存在)
11material.roughnessNode = materialReference('roughness', 'float', controllerMat);