HPP_Art_2.7 Metallic与Speculer流程

a). PBR模型

基于物理的渲染模型,是当前主流游戏引擎使用的真实感3D渲染模型。

PBR_model

a.1). 两种工作流

游戏资源中常见的贴图类型

PBR Guide

PBR流程中,常用的有两种工作流程:

  • 金属/粗糙度工作流(Metal/Roughness)
    • 符合直觉,容易调参
    • 更不容易打破能量守恒
  • 高光(镜面反射)/光泽度(Specular/Glossiness)工作流
    • 可自由调节$F_0$(零度菲涅尔反射)值
    • 容易打破能量守恒

a.2). F0反射率值

F0

大多数常用的电介质的F0范围从0.02-0.05(线性值)。对于导体,F0值 范围为0.5-1.0。因此表面的反射率由折射率决定,正如下面的方程式所示(Lagarde 2011)。

F0a

F0_eg

图1. 金属和非金属的$F_0$​值

F0_D_M

图2. 电介质$F_0$值和金属反射率值
  • 通用贴图:法线贴图、AO贴图、高度贴图等

b). Metal/Roughness工作流

b.1). Base color(RGB-sRGB)

储存数据:

  • 非导体漫反射颜色/反照率颜色(Diffuse Reflected Color/Albedo)
  • 金属导体 的镜面反射$F_0$值
    • 非导体使用4%(0.04) 的$F_0$反射值(在一些软件中可以自定义)
    • 混合材质(即非导体和金属导体混合材质,如锈蚀)则可以认为同时储存了两种数据

注意事项:

  1. 非导体(即电介质,非金属): 暗色值,尽量不要低于30-50sRGB,严格控制下应不低于50sRGB。对于亮色值,贴图中不应高于240sRGB;

  2. 导体(金属): 金属一般会有70-100%的镜面反射,映射到sRGB大概为180-255;

  3. 在SP中,可通过滤镜中的PBR检查;SD可通过PBR BaseColor/Metallic Validate节点验证是否在合适范围内;

  4. BaseColor中除了微观遮蔽信息(Micro-occlusion)以外,不应包含任何光照信息;

Micro-occlusion

b.2). Metallic(Grey-Linear)

储存数据:

  • 对应区域的金属度0.0纯黑代表非金属,1.0纯白代表纯金属

注意事项:

  1. 纯金属灰度范围在235-255 sRGB,其对应的反射率范围为70%-100%(180-255sRGB)

Metallic_RawMetal

  1. 在Metallic贴图中,纯黑(0.0)代表了非金属,纯白(1.0)代表了金属,我们可以用过渡的灰阶来表示不同程度氧化和污垢;

  2. 对于金属如Metallic低于235 sRGB,在BaseColor中反射率值应降低。(如一个地方锈蚀特别严重,Metallic低于235sRGB,那么需要降低BaseColor);

b.3). Roughness(Grey-Linear)

Metallic_roughness

Roughness中,纯黑(0.0)代表平滑表面,纯白(1.0)代表粗糙平面

这改变了光的方向,但是光强度保持恒定不变。表面越粗糙,高光越散越暗。表面越光滑,高光反射集中,尽管反射的光的总量是一点的,表面也会更亮,光会更强。

c). Specular/Glossiness工作流

c.1). Diffuse(RGB-sRGB)

储存数据:

  • 漫反射颜色(Albedo)

注意事项:

  1. Diffuse贴图表示的是漫反射颜色,Raw Metal没有漫反射,因此为纯黑(0.0)。如果发生氧化现象,金属区域就会有颜色;

Specular_Diffuse01a

  1. Diffuse中除了微观遮蔽信息(Micro-occlusion)以外,不应包含任何光照信息;
  2. 除了表示金属的纯黑(0.0)外,暗色值不应低于30sRGB,严格上说,不应该低于50sRGB;
  3. 亮色值不应该高于240sRGB;

c.2). Specular(RGB-sRGB)

储存数据:

  • $F_0$(0度菲涅尔反射值)

注意事项:

电介质F0

  1. 镜面反射贴图包含$F_0$值;
  2. 普遍非导体的反射值为2-5%(线性),对应40-75 sRGB
  3. 普通宝石的反射值范围在0.05-0.17(线性)
  4. 普通液体的反射值范围在0.02-0.04(线性)
  5. 原始金属(Raw Metal)的反射值则可以高达70-100%的镜面反射,sRGB约为180-255
  6. 如果你无法找到某个材质的折射率(IOR),可以先假设F0为4%,也就是塑料的F0。

c.3). Glossiness(Grey-Linear)

储存数据:

  • 对应区域的光泽度0.0纯黑代表粗糙,1.0纯白代表光滑。和金属工作流的Roughness为反相的关系;

d). Metallic vs. Specular

  • 边缘效应:

    • 金属工作流导致金属和非金属的边缘出现白色边界

      M_R_edge

    • 高光工作流导致金属和非金属边缘出现黑色伪影

      S_G_edge

    • 原因: 纹理插值(放大),贴图分辨率和Texel密度直接影响边界伪影的可见度

    • 解决方法: 尽可能使纹理的UV利用率高;

      M_R_Solve

Metallic/Roughness流程 Specular/Glossiness流程
优势 1. 在M/R工作流中,由于非导体(电介质)的FO都是规定好的所以设计师在对非导体FO赋值时不易出错。
2. 纹理的缓存压力更小,因为金属贴图和粗糙度贴图都是灰度贴图。
3. 目前来说是兼容性最广的工作流。
1. 边缘效应不会那么明显。

2. 可以在镜面反射贴图中对非导体(电介质)材质的F0值自由调整。
劣势 1. 非导体(电介质)F0的值固定为4%,无法调整。然而,在大多是实现流程中都有控制器可以直接复写这个值,所以也不能算硬伤。

2.白色边缘问题较明显,尤其在低分辨率的情况下问题突出。
1. 由于在S/G工作流的镜面反射贴图中,非导体(电介质)材质的℉0值是可以自由调整的,所以也会导致设计师容易输入错误的值。而这些错误的值被着色器误读后可能会打破能量守恒定律,从而造成不正确的渲染效果。

2.由于新增了一张RGB通道的镜面反射贴图,所以对性能消耗会更大。

3. S/G工作流有些名词和传统的工作流太相似,但是实质所对应的数据可能是不样的,因此会导致设计师容易误解或误操作。这种情况下就要求设计师有更好的PBR理论知识,例如了解非导体(电介质)的正确FO值,金属在漫反射色下表现为纯黑,以及在着色器没有自动校正情况下,能量守恒相关的基础知识。

e). Metallic和Specular流程的贴图转换(PS演示)

金属工作流各贴图含义:

贴图 含义
Base color 漫反射颜色+镜面反射$F_0$
Metallic 材质区分,辅助解读Base color
Roughness 表面状态参数

高光工作流各贴图含义:

贴图 含义
Diffuse 漫反射颜色
Specular 镜面反射$F_0$
Glossiness 表面状态参数(Roughness反相)

SD_node

e.1). Metallic流程 → Specular流程

BaseColor + Metallic → Diffuse

  • 方法: 去掉Base Color中金属和混合材质的$F_0$数据
  • 实操:
    1. 打开BaseColor和Metallic,RGB模式
    2. 新建Diffuse图层,纯黑填充;
    3. 选择Metallic任一通道,得到带灰度的区域$a$;
    4. Diffuse图层新建区域 $a$ 的蒙版,底层为BaseColor;

BaseColor + Metallic → Specular

  • 方法: 去掉BaseColor中的漫反射数据,并加上非导体和混合材质的$F_0$ (默认0.04,56 sRGB,#383838)
  • 实操:
    1. 打开BaseColor和Metallic,RGB模式
    2. 新建Specular图层,填充#383838(0.04对于22-Linear,对应56 sRGB,即#383838);
    3. 反相Metallic,选择Metallic任一通道,得到带灰度的区域$b$;
    4. Specular图层新建区域 $b$的蒙版,底层为BaseColor;

Roughness → Glossiness

  • 方法: 反相

e.2). Specular流程 → Metallic流程

Diffuse + Specular → BaseColor + Metallic

  • 方法: 找出金属区域对应的数据,金属的特性是$F_0$在0.7-1.0之间,而非金属一般不超过0.04(宝石最高0.17),差异明显。
  • 实操:
    1. Specular,菜单选择,色彩范围,选择阴影,灰度预览,调整参数。(也可以使用Diffuse图层)(效果不好的话可以将阴影换为取样颜色,选择纯黑,调整容差)shift+ctrl+i反选,创建蒙版。
    2. alt+左键拖动蒙版到Diffuse图层,选择蒙版,ctrl+i反相。Base color完成
    3. 新建Metallicl图层,填充黑色,ctrl+左键点击Specular蒙版进行选区,填充白色。Metallic完成

Glossiness → Roughness

  • 方法: 反相

Homework

高光工作流转金属工作流 对比:

M_vs_S

金属工作流转高光工作流 对比:

S_vs_M


乍一看,经过两次转换(原资源为高光工作流,经过PS转为金属工作流后又转到高光工作流),表面上看起来区别不大,但其实已经有所变化,因此,需要在PS中多次尝试;

Sci-Fi Structure 24_4K_Specular
Specular_Convert
图3. 左侧为原Specular贴图,右侧为转换两次后的Specular贴图,可以看到已经丢失了许多细节;