HPP_Art_2.7 Metallic与Speculer流程
a). PBR模型
基于物理的渲染模型,是当前主流游戏引擎使用的真实感3D渲染模型。
a.1). 两种工作流
PBR流程中,常用的有两种工作流程:
- 金属/粗糙度工作流(Metal/Roughness)
- 符合直觉,容易调参
- 更不容易打破能量守恒
- 高光(镜面反射)/光泽度(Specular/Glossiness)工作流
- 可自由调节$F_0$(零度菲涅尔反射)值
- 容易打破能量守恒
a.2). F0反射率值
大多数常用的电介质的F0范围从0.02-0.05(线性值)。对于导体,F0值 范围为0.5-1.0。因此表面的反射率由折射率决定,正如下面的方程式所示(Lagarde 2011)。
图1. 金属和非金属的$F_0$值 ↩
图2. 电介质$F_0$值和金属反射率值 ↩
- 通用贴图:法线贴图、AO贴图、高度贴图等
b). Metal/Roughness工作流
b.1). Base color(RGB-sRGB)
储存数据:
- 非导体 的漫反射颜色/反照率颜色(Diffuse Reflected Color/Albedo)
- 金属导体 的镜面反射$F_0$值
- 非导体使用4%(0.04) 的$F_0$反射值(在一些软件中可以自定义)
- 混合材质(即非导体和金属导体混合材质,如锈蚀)则可以认为同时储存了两种数据
注意事项:
非导体(即电介质,非金属): 暗色值,尽量不要低于30-50sRGB,严格控制下应不低于50sRGB。对于亮色值,贴图中不应高于240sRGB;
导体(金属): 金属一般会有70-100%的镜面反射,映射到sRGB大概为180-255;
在SP中,可通过滤镜中的PBR检查;SD可通过PBR BaseColor/Metallic Validate节点验证是否在合适范围内;
BaseColor中除了微观遮蔽信息(Micro-occlusion)以外,不应包含任何光照信息;
b.2). Metallic(Grey-Linear)
储存数据:
- 对应区域的金属度。0.0纯黑代表非金属,1.0纯白代表纯金属。
注意事项:
- 纯金属灰度范围在235-255 sRGB,其对应的反射率范围为70%-100%(180-255sRGB)
在Metallic贴图中,纯黑(0.0)代表了非金属,纯白(1.0)代表了金属,我们可以用过渡的灰阶来表示不同程度氧化和污垢;
对于金属,如Metallic低于235 sRGB,在BaseColor中反射率值应降低。(如一个地方锈蚀特别严重,Metallic低于235sRGB,那么需要降低BaseColor);
b.3). Roughness(Grey-Linear)
Roughness中,纯黑(0.0)代表平滑表面,纯白(1.0)代表粗糙平面。
这改变了光的方向,但是光强度保持恒定不变。表面越粗糙,高光越散越暗。表面越光滑,高光反射集中,尽管反射的光的总量是一点的,表面也会更亮,光会更强。
c). Specular/Glossiness工作流
c.1). Diffuse(RGB-sRGB)
储存数据:
- 漫反射颜色(Albedo)
注意事项:
- Diffuse贴图表示的是漫反射颜色,Raw Metal没有漫反射,因此为纯黑(0.0)。如果发生氧化现象,金属区域就会有颜色;
- Diffuse中除了微观遮蔽信息(Micro-occlusion)以外,不应包含任何光照信息;
- 除了表示金属的纯黑(0.0)外,暗色值不应低于30sRGB,严格上说,不应该低于50sRGB;
- 亮色值不应该高于240sRGB;
c.2). Specular(RGB-sRGB)
储存数据:
- $F_0$(0度菲涅尔反射值)
注意事项:
- 镜面反射贴图包含$F_0$值;
- 普遍非导体的反射值为2-5%(线性),对应40-75 sRGB;
- 普通宝石的反射值范围在0.05-0.17(线性);
- 普通液体的反射值范围在0.02-0.04(线性);
- 而原始金属(Raw Metal)的反射值则可以高达70-100%的镜面反射,sRGB约为180-255;
- 如果你无法找到某个材质的折射率(IOR),可以先假设F0为4%,也就是塑料的F0。
c.3). Glossiness(Grey-Linear)
储存数据:
- 对应区域的光泽度。0.0纯黑代表粗糙,1.0纯白代表光滑。和金属工作流的Roughness为反相的关系;
d). Metallic vs. Specular
边缘效应:
金属工作流导致金属和非金属的边缘出现白色边界
高光工作流导致金属和非金属边缘出现黑色伪影
原因: 纹理插值(放大),贴图分辨率和Texel密度直接影响边界伪影的可见度
解决方法: 尽可能使纹理的UV利用率高;
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反相) |
e.1). Metallic流程 → Specular流程
BaseColor + Metallic → Diffuse
- 方法: 去掉Base Color中金属和混合材质的$F_0$数据
- 实操:
- 打开BaseColor和Metallic,RGB模式
- 新建Diffuse图层,纯黑填充;
- 选择Metallic任一通道,得到带灰度的区域$a$;
- Diffuse图层新建区域 $a$ 的蒙版,底层为BaseColor;
BaseColor + Metallic → Specular
- 方法: 去掉BaseColor中的漫反射数据,并加上非导体和混合材质的$F_0$ (默认0.04,56 sRGB,#383838)
- 实操:
- 打开BaseColor和Metallic,RGB模式
- 新建Specular图层,填充#383838(0.04对于22-Linear,对应56 sRGB,即#383838);
- 反相Metallic,选择Metallic任一通道,得到带灰度的区域$b$;
- Specular图层新建区域 $b$的蒙版,底层为BaseColor;
Roughness → Glossiness
- 方法: 反相
e.2). Specular流程 → Metallic流程
Diffuse + Specular → BaseColor + Metallic
- 方法: 找出金属区域对应的数据,金属的特性是$F_0$在0.7-1.0之间,而非金属一般不超过0.04(宝石最高0.17),差异明显。
- 实操:
- Specular,菜单选择,色彩范围,选择阴影,灰度预览,调整参数。(也可以使用Diffuse图层)(效果不好的话可以将阴影换为取样颜色,选择纯黑,调整容差)shift+ctrl+i反选,创建蒙版。
- alt+左键拖动蒙版到Diffuse图层,选择蒙版,ctrl+i反相。Base color完成
- 新建Metallicl图层,填充黑色,ctrl+左键点击Specular蒙版进行选区,填充白色。Metallic完成
Glossiness → Roughness
- 方法: 反相
Homework
高光工作流转金属工作流 对比:
金属工作流转高光工作流 对比:
乍一看,经过两次转换(原资源为高光工作流,经过PS转为金属工作流后又转到高光工作流),表面上看起来区别不大,但其实已经有所变化,因此,需要在PS中多次尝试;
图3. 左侧为原Specular贴图,右侧为转换两次后的Specular贴图,可以看到已经丢失了许多细节; ↩