Unity URP的ShaderGraph中,MetalReflectance节点提供基于物理测量的金属反射率数据,包含10种常见金属的反射特性。该节点输出三维向量值,对应RGB通道的反射率系数,确保PBR渲染的物理准确性。使用时需根据工作流程(Specular或Metallic)连接不同输入端口,并可与金属度贴图结合创建混合材质。节点封装了从铁到铂金等金属的科学测量数据,简化了真实金属材质的创建过程,但需注意其提供的是理想条件下的反射率值,实际应用中可能需要结合粗糙度、环境光照等因素进行调整。
在基于物理的渲染(PBR)工作流程中,准确模拟金属材质的光学特性是创建逼真视觉效果的关键。Unity URP的Shader Graph提供了Metal Reflectance节点,这是一个专门用于获取真实世界金属反射率值的工具节点。该节点封装了多种常见金属在可见光谱范围内的反射率数据,使着色器艺术家能够快速应用基于物理测量的准确金属属性,而无需手动查找或输入这些数值。
Metal Reflectance节点的核心价值在于其科学准确性。它提供的反射率值来源于对真实金属材料的光学测量,这些数据经过标准化处理,符合PBR渲染的理论基础。通过使用这些经过验证的物理数据,开发者可以确保他们的金属材质在不同光照条件下都能表现出正确的视觉特性,包括颜色、亮度和菲涅尔效应。
该节点特别适合需要快速原型制作和保持视觉一致性的项目。无论是创建武器系统、车辆、建筑结构还是科幻环境,只要涉及金属材质的表现,Metal Reflectance节点都能提供可靠的基础数值。节点支持从铁到铂金等多种常见金属,覆盖了从工业到珠宝等各种应用场景的需求。
描述
Metal Reflectance节点的主要功能是返回基于物理测量的金属反射率值。反射率是描述表面对光线反射能力的物理量,在PBR渲染中,它直接影响材质的视觉表现,特别是金属材质的高光颜色和强度。该节点输出的Vector 3值分别对应红色、绿色和蓝色通道的反射率系数,这些系数在0到1的范围内,表示该金属对不同波长光线的反射能力。
在Shader Graph中,Metal Reflectance节点通过Material下拉选单参数提供对多种预设金属材质的选择。每个选项对应一种特定金属的反射率特性,这些特性基于真实世界的物理测量数据。例如,黄金选项提供的反射率值体现了黄金特有的暖黄色调,而银则提供了冷色调的高反射率值。
该节点在PBR工作流程中的使用方式取决于所选的工作流程类型。当使用Specular Workflow时,应将Metal Reflectance节点的输出连接到PBR主节点的Specular输入端口。这种工作流程分离了镜面反射颜色和漫反射颜色,适合需要精确控制材质高光颜色的情况。相反,当使用Metallic Workflow时,节点的输出应连接到Albedo端口,因为在这种工作流程中,金属材质的反射颜色直接由反照率控制,而金属度贴图则用于区分金属和非金属区域。
理解这两种工作流程的区别对于正确使用Metal Reflectance节点至关重要。在Specular Workflow中,非金属材质也可以有彩色的高光,而金属材质的高光颜色则由其反射率决定。在Metallic Workflow中,非金属材质的反照率定义其漫反射颜色,而金属材质的反照率则定义其反射颜色。Metal Reflectance节点提供的值专门用于定义金属部分的反射特性,确保物理准确性。
物理基础
Metal Reflectance节点提供的值基于真实金属的光学特性。金属的反射率与其电子结构密切相关,不同金属由于电子能带结构的差异,对不同波长光线的吸收和反射特性也不同,这就导致了金属特有的颜色特征。例如,金对蓝色光谱的吸收较强,对红色和黄色光谱的反射较强,因此呈现金黄色。
这些物理测量通常是在标准照明条件下(如D65光源,代表日光),以接近垂直的入射角进行的。在实际渲染中,金属的反射率会随着观察角度的变化而变化,遵循菲涅尔方程。在掠射角(接近90度)时,几乎所有材质的反射率都会接近100%,而在垂直角度时,反射率则取决于材质本身的特性。Metal Reflectance节点提供的是在接近垂直角度下的反射率值,这是PBR材质的基础参数。
能量守恒
PBR渲染遵循能量守恒原则,即表面反射的光线能量不能超过接收到的光线能量。Metal Reflectance节点提供的值已经考虑了这一点,确保在物理合理的范围内。对于金属材质,反射率通常较高,但不会超过100%。同时,金属材质几乎不表现出次表面散射,因此其漫反射分量通常非常暗或接近黑色。
端口

Metal Reflectance节点的端口配置相对简单,仅包含一个输出端口,这反映了节点的专用性——它主要用于提供数据而非处理数据。
| 名称 | 方向 | 类型 | 绑定 | 描述 |
|---|---|---|---|---|
| Out | 输出 | Vector 3 | 无 | 输出值 |
Out端口是Metal Reflectance节点的唯一输出,它提供一个三维向量,包含所选金属的反射率值。这个向量的三个分量分别对应红色、绿色和蓝色通道,取值范围在0到1之间。这些值表示在可见光谱范围内,该金属对相应颜色通道光线的反射能力。
输出值的精确度对于PBR渲染至关重要。即使是微小的差异也可能导致视觉上的明显变化,特别是在高动态范围(HDR)渲染和基于图像照明(IBL)的环境中。Metal Reflectance节点提供的值具有足够的精度,能够满足大多数实时渲染应用的需求。
在实际使用中,这个输出可以直接连接到PBR主节点的相应输入,也可以与其他节点组合使用,以创建更复杂的材质效果。例如,可以将Metal Reflectance节点的输出与纹理采样节点结合,通过在金属度贴图定义的金属区域使用物理准确的反射率值,而在非金属区域使用其他值,从而创建混合材质。
控件
Metal Reflectance节点提供了一个主要控件——Material下拉选单,用于选择所需的金属类型。这个控件决定了节点输出的反射率值,是节点功能的核心。
| 名称 | 类型 | 选项 | 描述 |
|---|---|---|---|
| Material | 下拉选单 | Iron、Silver、Aluminium、Gold、Copper、Chromium、Nickel、Titanium、Cobalt、Platinum | 选择要输出的材质值。 |
Material下拉选单包含了十种常见金属的选项,每种选项对应特定的反射率特性:
- Iron(铁):铁是一种常见的工业金属,具有中等反射率和轻微的蓝色色调。其反射率值约为(0.560, 0.570, 0.580),表面对各颜色通道的反射较为均衡,但蓝色通道略高,赋予其微冷的视觉特性。铁材质适合用于机械零件、工具和结构元件。
- Silver(银):银是具有最高反射率的金属之一,反射率值约为(0.972, 0.960, 0.915)。它对所有颜色通道都有很高的反射率,尤其是红色和绿色通道,这使其呈现出明亮的银白色。银材质常用于珠宝、镜面和装饰元素。
- Aluminium(铝):铝是一种轻质金属,具有高反射率,值约为(0.913, 0.921, 0.925)。与银类似,它对各颜色通道的反射较为均衡,但整体反射率略低。铝材质广泛用于航空航天、汽车和包装行业。
- Gold(金):金以其独特的暖黄色而闻名,反射率值约为(1.000, 0.766, 0.336)。它对红色通道的反射率极高,对绿色通道中等,对蓝色通道较低,这种不平衡的反射导致了其典型的金黄色。金材质常用于珠宝、装饰和高价值物品。
- Copper(铜):铜具有明显的橙红色调,反射率值约为(0.955, 0.637, 0.538)。与金类似,它对红色通道的反射率远高于蓝色通道,但整体色调更偏橙红。铜材质适合用于电线、管道和装饰元素。
- Chromium(铬):铬是一种高反射率金属,具有中性色调,反射率值约为(0.550, 0.556, 0.554)。它对各颜色通道的反射非常均衡,呈现出明亮的银灰色。铬常用于电镀、汽车零件和家电产品。
- Nickel(镍):镍具有中等反射率和轻微的暖色调,反射率值约为(0.660, 0.609, 0.526)。它对红色通道的反射率高于蓝色通道,赋予其微暖的外观。镍材质常用于电镀和合金。
- Titanium(钛):钛是一种强度高、重量轻的金属,反射率值约为(0.542, 0.497, 0.449)。它具有中等反射率和轻微的暖灰色调。钛材质常用于航空航天、医疗植入物和体育器材。
- Cobalt(钴):钴具有中等反射率和中性色调,反射率值约为(0.662, 0.655, 0.634)。它对各颜色通道的反射较为均衡,呈现出中性的灰色。钴常用于合金和电池制造。
- Platinum(铂):铂是一种贵金属,具有中等反射率和温暖的灰色调,反射率值约为(0.672, 0.637, 0.585)。它对红色通道的反射率略高于蓝色通道,赋予其微暖的外观。铂材质常用于珠宝和工业催化剂。
选择合适的金属类型对于创建视觉上准确的材质至关重要。每种金属都有其独特的光学特性,这些特性直接影响其在渲染中的表现。通过简单地从下拉选单中选择,开发者可以快速应用这些经过物理验证的值,而无需手动输入或查找参考资料。
生成的代码示例
当在Shader Graph中使用Metal Reflectance节点时,Unity会生成相应的HLSL代码,将这些反射率值嵌入到最终的着色器中。以下示例展示了选择不同金属材质时,节点可能生成的代码片段。
这些代码示例显示了Metal Reflectance节点如何将金属反射率值定义为三维向量。在实际的着色器编译过程中,这些值会被直接嵌入到生成的代码中,作为常量或内联值使用。
Iron
float3 _MetalReflectance_Out = float3(0.560, 0.570, 0.580);
铁生成的代码创建了一个三维向量,其分量值分别为0.560(红)、0.570(绿)和0.580(蓝)。这些值表明铁对蓝色光谱的反射略高于红色和绿色,赋予其轻微的冷色调。在实际渲染中,这种细微的差异在复杂照明环境下会变得更加明显。
Silver
float3 _MetalReflectance_Out = float3(0.972, 0.960, 0.915);
银的反射率值非常高,尤其是在红色和绿色通道,这表明银对暖色调光线的反射能力极强。这些高反射率值使银在渲染中呈现出明亮、闪耀的外观,特别是在高光区域。
Aluminium
float3 _MetalReflectance_Out = float3(0.913, 0.921, 0.925);
铝的反射率值在各颜色通道之间非常均衡,略偏向蓝色通道。这种均衡的反射特性使铝呈现出中性的银白色,与银相似但略微不那么明亮。
Gold
float3 _MetalReflectance_Out = float3(1.000, 0.766, 0.336);
金的代码显示了其典型的不平衡反射特性:红色通道反射率高达1.0,绿色通道为0.766,而蓝色通道仅为0.336。这种强烈的色彩偏差导致了金特有的暖黄色调,在渲染中非常醒目。
Copper
float3 _MetalReflectance_Out = float3(0.955, 0.637, 0.538);
铜的反射率模式与金类似,但对绿色和蓝色通道的反射率相对较高,这使它的色调比金更偏橙红。这种色彩特性使铜在渲染中呈现出温暖的橙红色外观。
Chromium
float3 _MetalReflectance_Out = float3(0.550, 0.556, 0.554);
铬的反射率值在各颜色通道之间几乎完全均衡,差异极小。这种高度均衡的反射使铬呈现出中性的银灰色,没有明显的色彩偏向。
Nickel
float3 _MetalReflectance_Out = float3(0.660, 0.609, 0.526);
镍的反射率显示出轻微的不平衡,红色通道最高,蓝色通道最低。这种差异赋予了镍微暖的视觉特性,在特定照明条件下尤为明显。
Titanium
float3 _MetalReflectance_Out = float3(0.542, 0.497, 0.449);
钛的反射率值相对较低,且显示出从红色到蓝色通道逐渐递减的趋势。这种特性使钛呈现出温暖的灰色外观,与其他更明亮的金属形成对比。
Cobalt
float3 _MetalReflectance_Out = float3(0.662, 0.655, 0.634);
钴的反射率值在各颜色通道之间较为均衡,略偏向红色通道。这种均衡性使钴呈现出中性的灰色,没有强烈的色彩特征。
Platinum
float3 _MetalReflectance_Out = float3(0.672, 0.637, 0.585);
铂的反射率值显示出从红色到蓝色通道递减的趋势,但不如钛明显。这种特性赋予铂微暖的灰色外观,在贵金属中独具特色。
理解这些生成的代码有助于开发者更深入地掌握Metal Reflectance节点的工作原理,并在需要时手动调整或扩展这些值。虽然节点提供了方便的预设,但在某些特殊情况下,直接使用这些数值进行自定义计算可能更为合适。
实际应用示例
Metal Reflectance节点在游戏开发和实时渲染中有广泛的应用。以下是一些典型的使用场景和示例,展示了如何充分利用这个节点的功能。
创建真实的金属材质
最基本的应用是创建各种金属表面。通过简单选择不同的金属类型,可以快速获得物理准确的反射率值:
- 选择Iron创建机械零件和工具
- 选择Gold和Silver制作珠宝和装饰品
- 选择Aluminium和Titanium用于航空航天部件
- 选择Copper和Brass用于管道和装饰元素
在这些应用中,Metal Reflectance节点确保了材质的基础反射特性符合物理规律,为后续的纹理细节和表面处理提供了准确的基础。
混合材质创作
在实际项目中,表面通常不是由单一材质组成的。Metal Reflectance节点可以与金属度贴图结合使用,创建包含金属和非金属区域的复杂表面:
- 使用Sample Texture 2D节点采样金属度贴图
- 将Metal Reflectance节点连接到PBR主节点的Albedo输入
- 使用金属度贴图控制哪些区域使用金属反射率,哪些区域使用其他反照率值
这种方法特别适合创建磨损表面,其中磨损区域露出底层金属,而非磨损区域则可能是油漆或其它非金属涂层。
动态材质变化
通过脚本控制Material参数,可以实现材质的动态变化效果:
- 武器升级时从铁变为金
- 腐蚀效果使金属表面从银变为氧化状态
- 温度变化导致的金属颜色变化(需配合自定义函数)
虽然Metal Reflectance节点本身不提供动态变化的功能,但通过暴露Material参数给脚本,可以实现运行时材质特性的改变。
自定义金属合金
通过混合不同金属的反射率值,可以模拟合金材料:
- 使用多个Metal Reflectance节点,选择不同的金属类型
- 使用Lerp节点混合这些值
- 使用滑块控制混合比例
这种方法可以创建在预设选项中不存在的金属类型,扩展了节点的使用范围。
最佳实践和注意事项
为了充分利用Metal Reflectance节点,遵循一些最佳实践和注意事项是很重要的:
工作流程选择
- 在Specular Workflow中,将节点输出连接到Specular输入
- 在Metallic Workflow中,将节点输出连接到Albedo输入
- 确保金属区域的漫反射颜色设置为黑色或接近黑色(在Metallic Workflow中)
性能考虑
- Metal Reflectance节点本身性能开销极低,因为它只返回常量值
- 在移动平台上,考虑使用更简单的金属反射率近似值以减少计算量
- 避免每帧动态改变Metal Reflectance节点的材质类型,除非必要
物理准确性
- 理解不同金属的反射率特性有助于创建更可信的材质
- 注意环境光照对金属外观的影响——金属高度依赖环境反射
- 考虑使用反射探头和基于图像的照明(IBL)来增强金属材质的真实感
局限性
- Metal Reflectance节点提供的是理想条件下的反射率值,实际金属表面可能因氧化、污染或加工处理而有所不同
- 节点不提供金属的粗糙度或表面纹理信息,这些需要通过其他节点添加
- 对于非常特殊的金属或合金,可能需要手动输入反射率值
【Unity Shader Graph 使用与特效实现】专栏-直达
(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)
2万+

被折叠的 条评论
为什么被折叠?



