前段时间研究车漆,话说电影《老炮》里被划伤的恩佐补漆要了六爷10万,观众的第一反应都是我去这么贵,富二代你敲诈吧!但是贵吗?想想真不贵,估计还不止!亲身经历补漆的时候,听四爱思店小哥吐槽调漆喷漆有多麻烦,色差稍有不对就是一扇门白一扇门灰,好车做漆那都是全车一起做。更何况炭纤维车身的恩佐,重新走一次喷烤磨收才收10万,良心富二代啊!
真实车漆
按照传统 Diffuse+Spec 的 Shading 着色模式,稍微加点 Mix 属性,你用任何3D 软件,都大概能得出这么个效果:
眨眼一看真不错,要是在学校这个当作业肯定拿高分了。不过如果把这个效果贴到论坛,你会发现大部分的反馈无外乎是『啧啧效果不错,可就是反光太强,过爆了』『 真棒!但和真实的车漆效果总有点哪里不一样呢?』。不错,这是一个很棒的3D 效果,但现在大众对 CG 效果的审美已不再是简单的渲染效果,而是被主流电影和特效带入到了一个非照片真实感不赞的阶段。你能做出这个效果,基本上可以说对材质的理解很到位了,可怎么在这个基础上做点提高呢?我们再看个别人做的车:
仔细对比下是不是可以发现以下几个区别:
- 别人的车在边缘处有光线的环境光细节,例如车顶和地盘区域。
- 别人的车在高光位置存在两种边缘效果,远景面光源处是柔光渐变,近景反射处是硬线条的高光感。
- 别人的车在材质通透感上更富有层次,红色和淡淡的橙色在不同区域的渐变效果不一样。
好吧,原来别人的车是有这么多细节的!看来我们有必要研究下真实世界的车漆是如何构成的。
真实世界车漆
下面这张图是一个工艺范例:
在车身钢板之上,有电泳层、中涂层、色漆层和清漆层四个漆层组成,这四个漆层共同构成了我们目视所得的车漆层,如果你车要是被刮花了得补,修补的车漆仅相当于部分中涂层+色漆层+清漆层。每一个漆层的作用大致如下:
- 电泳层:直接附着在白车身上,对车身有防腐保护,并为中涂层提供良好的附着环境。
- 中涂层:附着在电泳层上,防紫外线,保护电泳层,并加强车身的防腐保护,为色漆层提供良好的附着环境,部分厂商的中涂层也能对色漆的色相起一定的衬托作用。
- 色漆层:附着在中涂层,进一步加强车身的防腐保护,并展示色相,我们看到的各种颜色就是色漆层展示出来的。
- 清漆层:附着在色漆层,更一步加强车身的防腐保护,并保护色漆层不受微小的刮擦,使颜色更透亮,减缓褪色现象。
所以在车漆制作过程中,喷完漆都要用烤的,让车漆快速烘干的同时,还能增加下一层漆的附着力。如果采用的是油性漆或水性漆,烘焙工艺和顺序也会不一样。那么,如果你的车要是被刮到了这个份上:
划痕深到了底漆,补漆的时候就一定会出现色差或者厚度不均的情况,甚至颗粒度都有不匀产生橘皮效果的。这事你还真不能怪修车师傅打磨不用心,或者嫌赚的钱不够手上劲就松了点之类,而是这种涂层由于没有重新走从电泳就进烤房的流程,瑕疵难免的。
恩,歪楼了,我其实想说的是,开车一定要注意,平时也要多多保养不要任凭鸟屎粘在上面还放太阳下面烤,原厂漆弄坏了真可惜,恩佐的补漆费用这么一合计(算账一定要算上国内支持该车的设备成本和对应工时费),是不是你也觉得这富二代可真没讹诈六爷了吧!
好吧,我真实想说的是,车漆的视觉表现是由其物理特性来决定的,他不是我们普通看到的石头或者陶瓷,表面的反射和折射等光学效果如此单纯,他在不同环境和光线下表现的层次和色彩都会不一样。也正因为如此,我们的眼睛平时看惯了大街上的汽车,即使我们不知道为什么效果是这样,但也能第一时间感觉出我们用传统手段制作出的车漆不够真实。
那么车漆大致分为几种效果呢,简单分类如下:
- 普通漆(素色漆):合成材质包括树脂、颜料和添加剂。最常见的颜色有白色、大红色和黄色。一般便宜的五菱宏光这些都是采用这类漆,色彩很纯,没有其他的层次感。
- 金属漆:在素色漆中加有细微金属粒子的一种涂料,还能增加车漆硬度,是目前流行的一种车漆。最常见的是加有微细的铝粉,光线射到铝粒上后,又被铝粒透过漆膜反射出来,亮晶晶的。
- 珠光漆:加入了云母粒,于是他的反光的方向性导致了色彩斑斓的视觉效果。它的抗氧化能力强,一般多出现在高端车型上。但是珠光漆修补比较麻烦,费用也相对较高一些。
现在市面上还有一些后端技术来调整漆面效果,例如封釉镀膜镀晶,但都是起保护作用为主,对视觉影响较小。改装车的话一般会用到哑光漆,或者其他无限骚包效果的花样贴膜,另外还有特种车辆例如军车(量产方式)是必须亚光不能有反光,这里都不单独讨论了。
了解如此,我们大致可以对车漆效果有了一定概念定位,要做什么材质的效果就可以按照其生产原理设计材质了。
CG 车漆
但是,我们在一些广告片或海报中,又会发现另外一个问题,那就是同一辆车在工作室灯光模式下和户外模式下的效果又不一样,例如下图对比:
这是一个标准的户外光影车漆效果,其光源采用的是环境光,对应3D 制作就是 HDR 照明模式。其表面车漆效果和前面的麦克昆基本一致,具备了和环境光线产生交互影响的细节,边缘明亮,特别是高光线条,动感十足。
这是一个标准的室内拍摄片,其光影采用的是面光源等轮廓照明方式,沿着车身的位置做区域性打光,光线边缘柔软,车漆本色和高光过渡平缓,而有大幅度转折的位置才会出现明显的高光线条,目的是突出车身的造型细节。例如门上的一个凹槽轮廓,在这种角度光下可以看到明显的轮廓线,这在上面的那个效果图中是看不出来的。
那么打开 Blender 吧,我们按照刚才的思路,以分层的方式添加车漆效果,大致节奏如下图:
设置一个基础场景,利用反光板作为打光设置,我喜欢红色,改下,效果如下:
可以看到,按照真实车漆的制作,其实在反光板下会呈现出边缘明晰的高光效果,这其实是环境光效果下期望的效果,当然如果里觉得这个效果复核你的需求,也是可以的。可是这就和上面白色奔驰车的室内效果图略有区别,因此要想获得不一样的效果,不得不去修改材质。当然,不浪费这个材质,我将环境光设置为 HRR 照明模式,如下图所示。
可以看到,光线的包围感更强,线条和光线层次很清晰,完全符合对一张效果图的制作需求。
对比发现,如果要制作的场景不同,那么在光线设计上会有不一样的思路和方法。而我们的材质展示是否会因此受到影响呢?毕竟光线和材质在不同场景中已经出现多对多的情况。根据上面测试,我不得不制作两套材质,放在不同环境光照和片面光照下,分别获得了希望得到的效果,效果如下:
从上图可以看到,如果不分别调整材质,还真难获得对应的效果,而这两个材质的区别,也在于对菲涅尔和反光等属性的调整。那么问题也来了,是否可以有一种方法,让材质设计变得更简单,我只考虑其物理属性,不需要根据不同灯光设计甚至环境去做独立的设置呢?这样是否可以大大减少去应对不同场景下材质重复设计的压力,特别是游戏和动画等需要各种转场的案例。最近这段时间里,我一边尝试一边试图找寻答案,最后我发现了 PBR (Physically Based Rendering /基于物理的渲染)技术!
什么是 PBR?
其实不是一项特别新的技术,我搜索了下历史,大概2010年就在 Siggraph 会议上被提出了技术原型。最近随着游戏越来越多地使用3A 技术以及次时代制作手段去呈现 CG 级游戏画面,手游引擎 Unity5也完全支持 PBR,影视动画公司在为优化视觉效果的同时,尝试借助该技术去降低劳动压力,所以当皮克斯宣布为了 PBR 体系去修改了 Renderman 的架构时,PBR 在主流圈中逐渐火了起来。
PBR 不是仅针对材质,他其实是一个系统性渲染流程,包含了光线、材质、纹理、色彩管理等。在这个体系当中,无论是经由物理化材质实现的光照、阴影或者色彩变化,还是物体表面的材质特征都将会有非常大的提升。
PBR 看似如此复杂的技术,但背后的原则却很简单,就两条:
- 光线能量守恒定律。
- 菲涅尔效果无处不在。
光线能量守恒
物理上大家都了解能量守恒定律,这里我们用同样概念来理解光线。Specular 高光反射光与 Diffuse 漫反射光其实是相互排斥的,有你没我的感觉,因为离开表面的光总量不能比其接受的入射光强,两者的综合值加起来不能超过1,这意味着,如果你的希望材质有较高的高光反射效果(高反射率),就需要要去降低漫反射,能量守恒是 PBR 的一个重要的指导思想,可以让系统计算光线效果时,不会违法物理定律。
上面这个图表现的,就是对于同一个材质,在100%的漫反射到100%的镜面反射转化过程中,光线总量是不会变化的。而我们的视觉路径大致是这样的:
其实任何物体都会对光线有吸收,称之为平面散射,光线在接触物体后会分为两部分继续前进:进入物体表面的部分(折射,在物体内部传播中被吸收或散射),从表面出去进入人眼(反射)。
但因为物体的表面材质不同,表面光线的方向变化也会有区别。平滑的表面偏移比较轻微,从而反射光的方向变化也较小,有了较清晰的反射,如上面图效果。而下面的表面粗糙,表面方向的变化范围也较广泛,反射光的方向变化也比较大,出现了模糊的反射。通常我们在材质中会用 Roughness 参数来控制,有时俗称这是在添加磨砂效果。
这里还有一点误区,就是我们常理解只有水这样的液体或果冻类软体,会存在光线穿透再折射或反射(通常使用 SSS 效果来表现这种质感),在现实世界中,我们如果只是看 Specular 高光效果,那这个理解是没问题的,但 Diffuse 漫反射呢?
对于任何一个物体,当产生漫反射的光线到达物体表面时,一部分会经过折射,被材质吸收(或者说转变为热能,这就是太阳下的石头越烤越烫的原因),或者在内部进行散射。一部分散射光最终会重新返回表面,再从表面折射出来,并被摄像机或眼睛所捕捉到。那么形成漫反射效果的光在被物质吸收并散射后,会成为不同波长的光(也称跨越光谱),这也就给予了物体不同的颜色,比如金属会吸收所有的穿透光,也就没有任何漫反射部分,但金属氧化的部分会和一些表面残留物,构成少量的散射光,形成不同的颜色,而正因为散射的混乱比较均匀,从每个方向看起来都是一样,所以这点和镜面光效不一样。看个图就能明白了。
所以你看,其实金属的漫反射属性是为0的。这样思考之后,就会发现一个问题,这和我们平时制作材质的思路好像有点不一样了呢?对,不过要将这种反射思路混合起来,还需要了解最重要的一个参数,就是刚才提到的,无处不在的菲涅尔效果。
Fresnel 菲涅尔属性
菲涅尔指的是:光在光疏介质传递到光密介质的时候,在一定的角度下会发生全发射。公式为sinc=n1/n2。其中两个n分别为两种介质的折射率。角度C为全反射的临界角度。听不懂是吧,哈哈太科学了,换个简单的方式解释吧,看个图。
有没有发现,其实湖水是相当清澈的,我们看近景位置,水的穿透效果真好,水底一览无余,但是越往对岸看去,越发现水的反射效果越强,在最远处,也就是平面和视觉夹角最小的位置,可以看到湖面几乎成了一面镜子(100%的反射)。那么我们就可以用菲涅尔来定义这种效果,其指代的是材质的反射率和入射角(也就是光源入射向量和平面法线向量的夹角)的对应关系,也就是说,入射光的角度越大,反射率也会越强。
PBR 理论中,就是重点借助菲涅尔来修正材质的光线关系,这里略枯燥,但很重要哦,看下图!
这是一个黑色的塑料材质,我们就称之为通用的非金属效果,其中,越接近边缘橙色区域,也就是视觉角度达到了90度,材质反射率可以无限趋近100%,而平视角度的反射率接近物体本身的值。对应现实中,水和液体的物理反射率是2%,砖块8%,其他有机材质和塑料是5%,半导体和晶体是15%~50% ,那么金属呢?看下图。
我们可以看到,金属本身的反射率就是60%~90%,而当视觉角度逐渐加大时,金属和非金属都会无限接近100%反射,他们之间的唯一区别也就是效果的跨度感了。所以,制作材质的时候,是不是我们只需要设置物体的起始反射率就行了,剩下的逼近效果就留给系统自己完成,如何?
那么 PBR 中通常就会使用到前面讲到的 Roughness 光泽度属性,为物体提供一个基础反射率,设置其表面的最小反射值,然后剩下就交给系统,让其自动解算菲涅尔曲线,以满足不同角度的效果需求。
恩,终于在原理上说通了,那么系统内怎么处理 PBR 呢?
系统如何支持?
根据上面梳理出来的逻辑,支持 PBR 的系统起码需要支持一套全新的着色计算,那么我们看看传统的反射模型计算函数,简单如下图所示:
好像有点复杂,但是,如果看看需要实现 PBR 的算法公式(来源于游戏 EVE Online),如下图所示:
不管你怎么看,我的表情是这样的:
可是还没有完哦,光是材质计算方式更新了还不够,配套的光线计算也要做相应调整,基于物理原理的镜面反射 BRDF 的 Blinn Microfacet 大致如下:
其中,公式中光线结算采用了对纹理的复合计算,尽管纹理的命名与传统的命名相似,但是内容是完全不同的(和以往的线性色彩和 Gamma 控制方式完全不一样了)。
如果你希望了解纹理的更新制作流程,可以看看这篇《-CryEngine3-简易制作PBR纹理贴图的技巧》(全文下载地址),其中对纹理制作规范和标准做了较为规范的说明,这里就不复述了。
Blender 你怎么看?
不好意思,Blender 目前并不能在系统层面上去支持 PBR,尽管你可以采用一些 PBR 的思路重制材质,但光照和渲染性能等机制上无法做到同步。BlenderGuru 提供了一篇教程,解释了如何在 Blender 中制作 PBR 材质,原理类似,所以这里就不翻译了,大家直接看图下载源文件吧,PBR 材质1,PBR 材质2。
因为 PBR 引入了更为严谨的物理模型,为渲染带来了更逼真的效果,但对应的算法复杂度也发生了成倍甚至数倍的提升,运算将会给 CPU 和 GPU 的处理能力和效率提出全新的挑战。除此之外,更高解析度的材质不仅会给显卡带来压力,还会给制作带来新的负担。有得必有失,所以我大致整理了一下我对 PBR 的看法:
- 基于物理过程改良的制作工艺,一定会带来更逼真高效的效果,但也必定带来软件本身和材质库的大量重制,包括工作流程,推荐阅读 ToolBag 的 PBR 教程合集。
- PBR 为整个渲染搭建了完整的演算模型,所以未来用户不需要再花费大量精力去关注一些小的细节设置,例如 AO 的反弹距离等,推荐阅读 PBR 的工作流答疑。
- 新的技术必然带来与艺术之间新的一轮融合,是走向更严谨的模式?还是为了真实而不计一切?这些都值得期待。
- 美术的制作工艺和对人员的要求将被提到一个新的高度,材质的制作将基于真实物质的测试值,或者需要为一个特定的风格创造一套完整的参数世界(例如皮克斯的怪兽大学),并且同样的规则还将支持在多个引擎系统间切换。
- 从艺术和技术的角度看 PBR 的方式是有很多优势的,它能够确保一个美术团队创建出来的资源,在各种光照条件下看起来都不错。但这也意味着,美术人员会逐渐往特种兵的方式成长,单一技术劳动密集型团队也许会出现劳动力过剩,整体美术成本面临再分配。
- 未来一定是属于交互的,技术的演变已经在围绕 Procedual Generate 工作流上发展,实时引擎的技术升级速度在这两年随 VR 和 AR 技术的火爆急速前进,照这个方向来看,美术不再需要担心技术配合的问题,程序猿们你就老老实实写逻辑吧。恩,你看《ADAM》就是一个美术自己干完的。
- PBR 就是个巨坑,你现在想玩就玩玩吧,干活,好好想想吧。
最后,实在不知道怎么收尾了,话题都发散到这份上了,本来只是想研究研究车漆的,那就附上一个制作的车漆材质,供大家参考,渲染效果如下啦。
PBR 相关参考资料:Interplay of Light