次世代材质大师【第二卷:材质基础】转载
版权声明:本文为魁梧的抠脚大汉博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_16756235/article/details/80107917
第一卷已经大概描述了一下什么是材质,下面我们来对材质作进一步探索。现在的游戏工业大致有两个走向,一个是真实向如刺客信条起源等。一个是风格化向,如塞尔达,二之国等。特别是欧美等大作,都是喜欢写实风格,但是其实不管是那种方向,其实都感觉你中有我我中有你。就拿神秘海域4来说,其实他写实的背后也做了不少风格化处理,这一点很好论证,你拿刺客信条的画面和神秘海域的做对比就能轻易发现,各个写实类游戏都有自己的风格化的东西在里面。一提到写实我们会常常听到PBR。所以到底什么是PBR呢?
PBR顾名思义,基于物理的渲染,可以更加准确地表示光和表面的相互作用。PBR其实是一套渲染方案,它不是一个材质球,不是几张贴图,不是SubstancePainter!!!我们在做PBR材质的时候,需要让我们的贴图是基于物理的,我们的shader是基于物理的,我们的灯光是基于物理的,我们的摄像机需要是基于物理的等等。如果只是shader的计算是基于物理的,那只能叫PBS。下面我们就来梳理一下PBR材质制作过程。
很多美术被很多错误的理论所误导,比如有些人会去根据经验,金属的metalic是多少,布料的Rouph是多少。这些其实会变化的,不同的引擎,不同的计算公式,这些值多多少少都会有变化,那么如何才能做出正确的效果呢,最好的办法就是在你们项目所在的环境下去实验,找出正确的那几个值。
我们可以做一个整列,这样就一目了然了。
不同的项目不同的计算公式,这些值多多少少都会有所变化,我们可以去挨个实验,找出非金属,高光塑料皮革,亚光塑料皮革,高光金属,亚光金属的值,然后把这个值记录下来,以后就按照这个值去做。当然会有偏移,偏移造成的主要原因是脏迹挂痕造成的。
其实现在业界流行的这套PBR材质模型能够描述游戏内90%的材质效果,如金属石头,沙子泥土等等,但是这并不意味着有了这个我们能做一切事情了,有些比较特别的材质如宝石,头发,皮肤,眼睛,绒布,皮毛,羽毛等可能现在的这套比较流行的PBR材质模型就不适用了。而且PBR材质模型也有很多种,更多详情可以去网上搜搜PhysicbasedRendring相关文章。游戏内使用的基于物理的渲染大部分也都是拟合的。为什么头发布料不适用PBR那套模型公式呢?因为原理就不一样。想了解原理的话只有去看各大论文了,在RTR3里有对这些公式模型的详细描述。
第一:BaseColor
既然是基于物理的渲染,贴图自然也要基于物理。BaseColor一般储存为sRGB,线性空间中的颜色值。线性空间和gama空间的关系必须要搞清楚。一般颜色的计算这些都是线性空间下的。在制作PBR材质的时候,Basecolor的亮度很有讲究。非金属的基本上应该服从正太分布,然后金属集中在240左右附近
可以把PS的图像模式改成LAB模式,然后窗口打开直方图来检测BaseColor的制作是否合法。
BaseColor一般应该是一致的,平台的,没有过亮或过暗的,BaseColor应该只包含纯颜色信息不应该有光影信息。颜色代表了非金属材料的反射率,除了遮挡外,应该没有光照信息,黑色值不应该低于30 sRGB或50sRGB(如果材质颜色低于的话,你以为你是黑洞啊),亮度值不应高于240 sRGB
第二:Normal
法线贴图烘焙的时候主要是注意坐标空间,左右手坐标系。杜绝手动PS这些操作。除非你有特异功能可以人眼光线追踪。
第三:Metalic和Rouphness
金属度和光滑度这一点上需要特别注意,因为PBR模型其实是拟合的(也可以说是带有一定trick的)。所以其实并无法表现所有零到一各个数值的完美效果,我们只能取其中一小段来使用会比较完美。这个取值范围会根据不同的PBR模型不同的环境而变化。具体值需要自己取实验。
第四:贴图使用
在贴图的制作过程中,可能我们并不会刻意地去关心什么贴图应该绘制什么东西。可能这个问题会有点奇怪,但是仔细想想,美术在贴图制作过程中一般都是怎么好看怎么来,也不会刻意去关心到底贴图里面应该画什么。举个例子,布料的纹路到底应该怎么表现呢?画在Diffuse上?那那种有高光的布条怎么办?美术可能会说,这个好办,在光滑度或者金属度上也画上去啊!但是问题就来了,贴图就那么几张。假设贴图上能保存的我们肉眼能看到的纹理信息的总量是10单位,那么我们想尽可能多地表达我们的信息,那么就会涉及到储存空间不够用的问题。所以合理地分配什么信息储存在什么贴图上,可以有效地使我们贴图的利用率更高。比如水渍使用光滑度去表现就可以了,没必要使用Diffuse或者别的。这样还能避免过噪和贴图压缩带来的信息损失。
在游戏开发过程中其实会常常遇见一个问题,模型到底应该如何拆分?怎么建模怎么布线这些我就不多说了,这些都是角色师应该知道的。我们站在材质的角度上想这个问题。一个材质至少是一次DrawCall,如果角色材质过多,会导致DrawCall过多,当然DrawCall的多少和游戏运行效率不是必然关系。那么我们应该如何拆分模型呢?
可以确定的是,在其他外在因素一定的情况下,如果游戏瓶颈在Drawcall上的话,材质数量越少越好。当材质计算很复杂的情况下,可以把模型拆开使用两个材质,可能效率反而还有所提升。单单就从效果上说的话,如果引擎架构是像Unreal那种分材质模型或者光照模型的话,那么模型拆分就是根据光照模型的数量种类来拆,如果是像unity那种不分这些概念的话,那么就可以按照复杂度等因素来拆,其实这个还是一个比较灵活多变的概念,这里只是一个声明行的论述,希望引起大家的关注罢了。
有些人可能会疑问了,这不是材质么,跟动画和物理模拟有关系么。其实是有一定关系的,我们需要知道一些相关的东西。比如我们制作布料材质,我们需要去设定布料模拟状态下布料的运动状态的物理硬度这些。布料的表现,布料的物理模拟至少占了一半的比重。比如我们要做草的材质,这时候是需要考虑草的摆动因素的,如果草的摆动通过操控顶点着色器来实现的话。
至此我们大概描述了一下材质的一些东西。后面我们就会开始实际动手制作研究材质了。