哈喽,各位观众朋友们好鸭~欢迎来到讲道理画图的地方,我是黄玮宁。
在上周日也就是6月31号,我作为嘉宾参与了老韩(@韩世麟)在 Bilibili 的直播,探讨了 V-Ray Next 版本中 Metalness 金属性参数的原理和实际应用。
在老韩完成直播录像的剪辑后,我梳理了一遍视频中的知识点,并以图文的形式推送出来,便于大家记笔记。没看过视频的朋友建议先看视频~
视频版(B站空间:韩世麟 UID:25481171 同步收录)
https://www.bilibili.com/video/av57445023
文/黄玮宁
自打 V-Ray 更新到 Next 版本以后,相信许多朋友都或多或少看见 Metalness 金属度这个参数。
在 3ds Max 里是这样的一个参数:
在 SketchUp 里是这样的一个节点:
这个金属度是什么意思?该怎么用?今天咱就来详细地介绍介绍。
原理讲解
文中使用到的软件版本:
V-Ray 4.00.02 for SketchUp 2018
V-Ray Next, update1.1 (4.10.02.00001) for 3ds Max 2018
图片来源:“Real-Time Rendering, 3rd Edition”, A KPeters 2008
在往期的 V-Ray for Rhino 材质基础课中,我们知道了非金属物体的漫反射原理是入射光线(黄大箭头)射到物体表面后,有一部分光线穿入物体内部,经过多次散射再穿出物体表面,朝四面八方扩散(蓝小箭头),所以我们可以从四面八方看到物体的颜色。(见上图)
图片来源:“Real-Time Rendering, 3rd Edition”, A KPeters 2008
但是对于金属物体来说,入射光线穿入物体内部后会被完全吸收,没有了内部的散射,也没有了散射后的穿出,也就意味着没有了漫反射现象。(见上图)
这也就是为什么以前我们使用 VRayBRDF 节点制作金属材质的时候,会将 Diffuse 漫反射拉成黑色:
不仅如此,为了有金属般的强烈反射,我们还会将材质的 IOR 折射率设置为一个很高的数值,例如 25:
可是当我们查阅相关科学文献的时候,却发现各金属的 IOR 都是一个非常小的数值,例如 0.453、1.219 等。
此种不一致性,何解?
其实是这么回事:在 Next 版本以前,我们常用的 VRayBRDF 节点压根就不是用来调金属的,它是一个非金属材质模型,也就是只能用来制作绝缘体(Dielectric)。所以如果想用它来做金属材质,就只能非常艺术化地将 IOR 拉高,做一个看起来像金属的材质。
补充一句:这个时候要是再把菲涅尔 Fresnel 计算关闭,那就更是错上加错了。
倘若真的希望结合物理数据来制作一个金属材质呢?V-Ray for SketchUp 用户是没辙了,V-Ray for 3ds Max 用户倒是可以使用 ComplexFresnel 插件,通过输入红绿蓝三个波段下的 n 值和 k 值(在 RefractiveIndex.info 这个网站查询)来制作物理正确的金属材质:
不过在 Next 版本更新以后,有了新增的 Metalness 参数,上述这种方法就被淘汰了。
Metalness 参数(Metallic节点)的使用方法很简单。V-Ray 官方在《了解金属性》
http://vraymasters.cn/magazine/understanding-metalness/
这篇文章中,V-Ray 作者 Vlado 根据科学数值,结合 V-Ray 自身的情况,给 V-Ray 用户整理出了一个表格:
表格中详细说明了如何在 V-Ray 中使用 Metalness 参数制作各类金属单质。在 V-Ray Next for 3ds Max 中,以 Copper 铜单质为例:Diffuse 输入(238,158, 137),Reflection Color 输入(255,255, 255),IOR 输入1.21901(四舍五入1.22),Metalness 输入 1。得到的结果就是一个不含任何杂质的纯铜材质:
对于 SketchUp 用户来说,要麻烦一些,我们在输入 Color 这一项色值的时候,需要将拾色器的 Color Space 色彩空间和 Range 范围分别设置成 Rendering(RGB)渲染空间和 0-255:
这是因为表中的数据都是 Linear 线性数值,而 V-Ray for SketchUp 中的拾色器默认是 sRGB 色彩空间的,所以需要进行切换。
看到这里,操作层面的事情,相信大家是明白了。但是回顾文章开篇的内容:“在金属材质中,部分入射光线穿入物体内部后会被完全吸收,所以金属的漫反射为纯黑色”,那为什么这里还要给 Diffuse 漫反射颜色输入一个色值呢?
是这样的:还记得在 VRayBRDF 节点中非金属和金属的做法吗?非金属材质,例如塑料,漫反射给一个颜色,反射拉起来,IOR 给一个常见的 1.6:
金属材质,例如金子,漫反射纯黑,反射颜色给一个金黄色,IOR 给个35:
大家有没有发现,对于非金属材质来说,反射属性没有颜色倾向,只需要一个灰度;而对于金属材质来说,漫反射属性是没用的,是一个废条件。
所以在 Metallic 节点中,Color 这一参数就将材质的漫反射和反射颜色两个属性结合起来了,同时,使用 Metalness 金属度参数来控制两者的切换。即:当 Metalness=1 时,这是一个金属材质,Color=Reflection 反射颜色;当 Metalness=0 时,这是一个非金属材质,Color=Diffuse。
这么做可以将原来的 RGB(Diffuse)+RGB(Specular)=6 个通道缩减成 RGB(Color)+V(Metalness)明度=4 个通道。对效果图用户来说,感觉似乎影响不大,但对于游戏行业的 CG 工作者来说可就节省了大量的资源。
所以,真相大白:这里和之前所铺垫的理论并不矛盾,不是金属有了漫反射,而是在制作金属的时候,借用 Diffuse 漫反射这一彩色通道当做 Reflection 反射颜色来用了。相信这也解答了许多 3ds Max 用户的困惑。
照这么说来,既然 Metalness=0 时,这是个非金属;Metalness=1 时,这是个金属,那么 Metalness 应该更像一个开关,而不是滑竿呀,中间的小数部分是干嘛用的?有没有既是金属又是非金属的东西呢?哦!半导体?
这么猜测也许有道理,也许半导体材料还真就得这么调,但是转念一想,我们在实战中做渲染的时候,有多少机会去制作一个真正意义上的半导体材料呢?其实是机会很少的。
再换句话说,有的朋友想要降低金属的反射率,下意识地去压低金属度参数,殊不知这个时候其实完全就是另外一种物质了,反正绝对不是你想要的“低反射金属”了。
我更倾向于相信如下的解释:
在 Chris Nichols 的 CG Garage 播客节目中,就曾邀请过 Zap Andersson
(Autodesk 公司的着色器专家)作为嘉宾,两人详细讨论了金属性的实际应用。
左侧为 Chris Nichols,右侧为 Zap Andersson
这可就全明白了,我们制作材质的时候,Metalness 就使用 0 和 1 这两个数就行。制作非金属时,Metalness=0;制作金属时,Metalness=1,中间的灰度是用来给 Metalness 贴图抗锯齿用的。
不过话说回来,我们很难在现实生活中看到纯纯的金属单质,所以不要让表格限制了我们的艺术创作。如果金属的颜色太鲜艳了,那就降低反射颜色的饱和度;如果反射太强了,那就降低反射颜色的明度,但是千万别通过把 Metalness 改成 0.8 来降低反射强度,这就是大错特错了。
案例演示
接下来让我们通过一个小案例,了解如何正确地使用 Metallic 节点来对接 PBR 贴图。
这里我用到的是一套来自 Poliigon 的材质贴图,是一个铝制卷帘门的材质:
在这个案例中,大家不仅仅能学会如何使用 PBR 贴图,还能学会如何给材质增加细节。
1# 材质基础
首先新建一个 Metallic 节点,赋予给模型:
这时候默认是一个带有反射属性的灰色塑料材质:
接着将材质转换为金属,即 Metalness=1,同时 Color=1,使用一个类似不锈钢的效果作为材质基底:
2# 高度信息
然后为材质增加大体的高度信息,也就是使用 Displacement 置换贴图(使用线性加载),把卷帘门的高度起伏做出来。这里我使用 Binding 将置换贴图显示在模型中:
并将贴图大小改为 4000mm*4000mm,同时把置换强度设置为 10。结果如下:
大体的高度信息有了,接下来再增加一些微小的凹凸效果,这里就需要用到 Normal 法线贴图(使用线性加载)了。结果如下:
3# 颜色信息
说实话,现实生活中的金属反射可没有 100% 这么强,完全镜面反射那是理想的镜子(当然镜子的本质还是金属反射,只是很平整光滑,反射度很高,生活中的金属一般没有这么干净平整)。所以我们再使用 Color 颜色贴图(使用 sRGB 加载)来丰富一下材质的颜色信息,让材质暗下来,更契合生活中金属的样子:
这么看着还是太纯净了,我决定为其添加磨损的效果,在边角处增加一些铁锈。这里我使用 Mix(Map)混合节点,就地取材,使用 Metalness 金属度贴图作为 Mix Map 混合贴图。(见下图)
金属作为 Color Top,铁锈作为 Color Bottom,将两者混合。这个混合节点的原理是:在混合贴图中白色的地方显示 Color Top 也就是金属,在图中黑色的地方显示 Color Bottom 也就是铁锈。
同时增加铁锈贴图的 UV 重复值,缩小贴图,然后使用 ColorCorrection 颜色校正节点降低铁锈的饱和度,并用 BezierCurve 贝兹曲线节点将铁锈的颜色压暗:
在颜色属性里将两种材质混合后,自然也就需要在 Metalness 金属度参数中将两者区分,所以要在 Metalness 金属度参数中加载 Metalness 贴图(使用线性加载)。结果如下:
4# 反射信息
接下来就要丰富一下反射细节了,这里先介绍一下 Roughness 粗糙度参数:
Roughness 与我们熟悉的 Glossiness 光泽度参数互为反义词,在贴图上表现为互为反相,在数学色值运算中就是:
Roughness=1-Glossiness
Roughness 贴图中白色代表十分粗糙,即反射效果非常模糊,几乎没有;黑色代表十分光滑,即反射效果非常清晰。那么我们首先就要处理铁锈部分的粗糙度信息,正好在 Metalness 贴图中,白色代表金属,黑色代表铁锈,所以在 Roughness 贴图中就应该反过来,黑色代表光滑的金属,白色代表粗糙的铁锈。
然后我们来为材质增加刮痕效果。使用 Mix(Operator)混合节点,将刮痕贴图与原有的粗糙度贴图进行叠加,使用 Add 加法模式(在Photoshop 中被翻译为“线性减淡(添加)”),叠加两者的白色信息。
此外我还用相同的方法叠加了一张指纹贴图,并用贝兹曲线节点去除掉指纹贴图中的灰色部分,只保留了指纹的细节。
经过这样一系列操作,这个金属材质的细节就丰富多了:
5# 后期处理
成图中高光部分反射到的窗口过曝得太厉害了,所以最后我们来给它做一下简单的后期。
首先使用 Highlight Burn 高光混合滑竿(见上图)将高光压下来,此时画面整体也会变暗,所以再稍微提高 Exposure 曝光度,最后增加一点对比度,就可以出图啦:
就这么简单,一个满满细节的铝制卷帘门材质就做好了。
最后,我补充说明一下在 V-Ray for 3ds Max 中的注意事项:
与 V-Ray for SketchUp 不同,3ds Max 的材质编辑器中没有 Metallic 材质节点,使用的是统一的 VRayMtl 标准材质节点。在这个节点中,Metallic-Roughness 体系与 Specular-Glossiness 体系的参数全部整合在同一个面板中,需要谨慎区分。
其中最具误导性的就是 Diffuse 漫反射下方的这个 Roughness 粗糙度参数了(画个重点):
它和 Metallic 体系中的 Roughness 粗糙度单词完全一样,但代表的意义却截然不同。这个参数影响的是材质的漫反射属性,随着数值的增大会让材质表面变“平”,是一个实际应用中极少使用到的一个参数。
所以在使用 PBR 贴图中的 Roughness 贴图时,千万别往这个假的“(漫反射)粗糙度”上连线,应该在 VRayMtl 参数中的 BRDF 面板中选择“Use roughness 使用粗糙度”这个选项,另外此处的 BRDF 类型,一定选 GGX,不要选别的:
并将 Roughness 贴图连到 Reflect 反射贴图下方的真正的 Roughness(反射粗糙度)节点中:
同时,3ds Max 中的 Composite 复合节点更适合用于多贴图的叠加,就不需要像 SketchUp 中那样多个 Mix 混合节点嵌套了。下面是场景案例中铝制卷帘门材质的 Slate 材质编辑器节点图:
最后补充个传送门,是 Substance 对接 V-Ray for 3ds Max 的官方文档:
https://docs.substance3d.com/integrations/vray-for-3ds-max-157352261.html
最最后,本文一切探讨,都建立在线性工作流的基础上。这是所有事情的前提。
最最最后,附上文中案例场景的模型和贴图文件
链接:
https://pan.baidu.com/s/1Sdu9aJigKwl-kcCrPFL96g
提取码:jjqn
编后记:课程播出后,有两位网友跟我提出了这样困惑:我不是游戏制作者,不需要省通道,是不是这个更新对我没意义啊?
V-Ray 支持金属度参数,其核心意义在于能够对接 PBR 材质体系,也就意味着您现在可以使用 PBR 体系制作材质,并且可以尽情利用市面上非常流行的各种 PBR 材质资源,这相当于多了一条很宽的道路,用户是否选择走这条路,是用户自身的选择,觉得影响不太大也实属正常。但是作为渲染软件,有没有为用户提供这条路,就是质的区别了。而且这也是 V-Ray 第一次能够不用绝缘体模型来作假金属,改为用更科学准确的金属材质模型来模拟金属了。所以,从如上角度来说,是这次改进的意义所在,个人认为意义挺大的。
另外,老韩哥在这一整周的筹备工作中为我提供了大量的技术支持和资料参考,不仅仅对于这次在直播分享,更是对我日后的 V-Ray 学习给予了非常大的帮助。
所以非常感谢老韩,也感谢每一位视频的观众,文章的读者,谢谢大家!
觉得厉害,但看不懂系列。