最后更新时间:2022-12-30,由管理员负责审核发布,若失效,请留言反馈!
自打 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 官方在《了解金属性》这篇文章中,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 的 CGGarage 播客节目中,就曾邀请过 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
最最后,本文一切探讨,都建立在线性工作流的基础上。这是所有事情的前提。
编后记:课程播出后,有两位网友跟我提出了这样困惑,我不是游戏制作者,不需要省通道,是不是这个更新对我没意义啊?
V-Ray 支持金属度参数,其核心意义在于能够对接 PBR 材质体系,也就意味着您现在可以使用 PBR 体系制作材质,并且可以尽情利用市面上非常流行的各种 PBR 材质资源,这相当于多了一条很宽的道路,用户是否选择走这条路,是用户自身的选择,觉得影响不太大也实属正常。但是作为渲染软件,有没有为用户提供这条路,就是质的区别了。而且这也是 V-Ray 第一次能够不用绝缘体模型来作假金属,改为用更科学准确的金属材质模型来模拟金属了。所以,从如上角度来说,是这次改进的意义所在,个人认为意义挺大的。
本期案例包链接:https://pan.baidu.com/s/1Sdu9aJigKwl-kcCrPFL96g 提取码:jjqn
最后将PBR材质贴图说明给大家贴出来,中文版的同学们可以对照着来做
diffuse/albrdo/basecolor 漫反射
reflecfion/specular/ 反射
metaliness /金属度
glossiness /光泽度
roughness/ 粗糙度
normal /法线
displacement/height 置换
bump 凹凸
ambient occlusion /AO环境光遮蔽