← BACK TO ARCHIVE
rendering pipeline lookdev shading lighting

为什么同一套 PBR 贴图不能通吃所有渲染器:金属度与高光两大贴图工作流详解

05.27.2019 • ADUCG RESEARCH

各渲染器与贴图工作流的对应关系

上面这张图是我整理的「贴图工作流 → 渲染引擎 → 宿主软件」对应关系。它回答的是一个几乎每个 CG 从业者都踩过的坑:为什么同一套从 Substance、Quixel 或网上下载的 PBR 贴图,在 Blender 里效果很好,拖进 V-Ray 就面目全非?

答案很简单:虽然大家都叫「PBR」,但各渲染器的光照模型并不相同,它们期望的贴图内容也不相同。这篇文章把这件事彻底讲清楚。

一、PBR 并不只有一个标准

物理渲染(Physically Based Rendering)只是一个原则——能量守恒、菲涅尔反射、微表面理论——而不是一份统一的贴图规格。在 2019 年这个时间点,业界实际存在两大主流贴图工作流,外加若干厂商自定义方案:

1. 金属度/粗糙度工作流(Metal-Rough)

核心贴图组合:

  • Base Color:对非金属是漫反射颜色,对金属是菲涅尔 F0 反射颜色
  • Metallic:0 或 1(或中间过渡值)标记表面是否为金属
  • Roughness:微表面粗糙度
  • 辅助:Normal、Height、AO 等

它的设计哲学是:用一个 Metallic 开关,让着色器在「绝缘体」和「导体」两种物理模型之间切换。绝缘体的 F0 很低(约 4% 反射率,即 0.04),金属的 F0 直接取 Base Color。贴图里不存高光强度——高光由物理模型推导。

2. 高光/光泽度工作流(Spec-Gloss)

核心贴图组合:

  • Diffuse:漫反射颜色(金属的 Diffuse 通常为黑)
  • Specular:F0 反射颜色/强度(金属的彩色反射直接存在这里)
  • Glossiness:光泽度——注意,它是 Roughness 的倒数关系
  • 辅助:Normal、Height、AO 等

它更「自由」:Specular 通道可以为任意值,艺术家可以直接画出镜面反射的颜色和强度。但自由的代价是容易做出违反能量守恒的材质(比如漫反射和高光能量之和超过入射光)。

3. 两者的本质区别在哪

关键在 F0(正入射反射率)的存储位置:

Metal-RoughSpec-Gloss
绝缘体 F0固定 0.04(由模型内置)存在 Specular 贴图里(通常 0.02–0.05 灰度)
金属 F0存在 Base Color 里存在 Specular 贴图里(彩色)
漫反射颜色Base Color(金属部分被忽略)Diffuse(金属部分为黑)
粗糙度参数Roughness(越白越糙)Glossiness(越白越滑)

所以一张 Spec-Gloss 的 Diffuse 贴图直接当 Base Color 用,金属区域就会发黑;一张 Metal-Rough 的 Base Color 直接当 Diffuse 用,金属会带着彩色漫反射——两者直接互换都会出错。

二、各渲染器站在哪一边

回到开头的图,逐一说明 2019 年各家的贴图约定:

Principled BSDF / Pxr 系

RenderMan(PxrDisney/PxrSurface)、Blender Cycles/EEVEE(Principled BSDF)、Houdini Mantra(Principled Shader)、Clarisse IFX 都属于这一系——它们的着色器都源自迪士尼 2012 年提出的 Principled BRDF 模型(即「迪士尼原则」)。这套模型以 Metal-Rough 风格为主:Base Color + Metallic + Roughness,外加 Specular、Clearcoat、Subsurface 等艺术化参数。这一系之间的贴图基本可以无缝通用,也是和 Substance Painter 默认输出兼容性最好的一类。

PBR Metal-Rough 系

Arnold 5 的 Standard Surface 是这一代的标准化代表(Arnold 5 于 2017 年发布,用 Standard Surface 取代了旧材质体系,参数与 Metal-Rough 工作流一一对应)。Octane、Redshift、iClone 等 GPU/实时渲染器也提供或默认采用 Metal-Rough 模式。这一系同样可以直接吃 Substance 的 Metal-Rough 预设输出。

PBR Spec-Gloss 系

V-Ray 的 VRayMtl 长期以 Reflection(高光强度)+ Reflection Glossiness(光泽度)为核心参数,是典型的 Spec-Gloss 风格。直到 V-Ray Next(2018)才在 VRayMtl 里加入 Metalness 参数以兼容 Metal-Rough 贴图——但注意它的 Roughness 参数和 Glossiness 仍然是倒数关系,导入贴图时要留意通道语义。Mental Ray 也属于这一流派(虽然它已经基本退出历史舞台)。

引擎特例

  • Unity:Standard Shader 同时提供两种 setup——Metallic 模式和 Specular 模式,对应两大流派,导入贴图前先确认材质用的是哪种。
  • Unreal:材质系统默认 Base Color + Metallic + Roughness + Specular 四参数,其中 Specular 对非金属默认 0.5(对应 4% F0),一般不需要贴图。
  • Corona、MODO:各有自己的材质模型(Corona 偏向简化的 PBR 参数集,MODO 有自家着色器体系),与其他渲染器没有直接的贴图对应关系,需要按文档单独处理。

三、跨渲染器迁移的换算要点

如果必须在两个流派之间搬运材质,记住这几条:

  1. Glossiness = 1 - Roughness(反向通道,别直接复制)。
  2. Metal → Spec 转换:Diffuse = BaseColor × (1 - Metallic);Specular = lerp(0.04, BaseColor, Metallic)。Substance Painter 和 Substance Designer 都内置了这个转换,导出时选对应预设即可。
  3. Spec → Metal 转换是有损的:Spec-Gloss 允许非物理的 Specular 值(比如把绝缘体高光画成红色),这些无法映射回 Metal-Rough 模型。
  4. 色彩空间:Base Color / Diffuse / Specular 是 sRGB;Metallic / Roughness / Glossiness / Normal / Height 必须是 Linear。项目里最常见的 bug 之一就是 Roughness 被错误地做了 gamma 校正,导致高光质感整体偏移。
  5. IOR 与 Specular 强度的关系:部分渲染器(如 Blender 的 Principled BSDF 新版、Unreal)用 Specular 0–1 映射 F0 0–8%,而 V-Ray 等用 IOR 控制反射强度,二者之间的换算是 F0=((n1−n2)/(n1+n2))2F_0 = ((n_1 - n_2)/(n_1 + n_2))^2。

四、实践建议

  • 以 Metal-Rough 为中间格式:它是 2019 年兼容性最好的工作流,Substance/Quixel 默认输出、大部分新渲染器都原生支持;要进 Spec-Gloss 渲染器时再转换。
  • 导出时选对预设:Substance Painter 的导出预设列表里明确区分了 Arnold、V-Ray、Unreal、Unity 等目标,别用错。
  • 搞清楚目标渲染器的参数语义再贴图:同名参数在不同渲染器里可能语义相反(Roughness vs Glossiness)或范围不同。
  • 用已知材质的测试球验证:迁移管线时,先渲一个金属球+粗糙塑料球的标准测试场景,和参考图对比,比逐参数检查快得多。

随着各渲染器陆续统一到标准化的 PBR 材质模型,这类「贴图不通用」的问题会逐渐成为历史——但在可预见的几年里,理解两大工作流的差异仍然是 CG 管线里的基本功。

End of Article