首先声明,本文系转载,平时梳理知识点看到的这篇,觉着写的很清晰,故拿来共勉~有些配图是lz另外找的,方便在阅读时学习更多。
PBR贴图
一、对PBR的误解
在开始之前,要对究竟什么是PBR以及PBR需要什么样的贴图做一些澄清。
首先,金属贴图metalness map并不是PBR的必须,也不是使用了高光贴图specular map就不能算作PBR。
PBR基本概念是一系列复杂的处理真实物理和光照的渲染器的组合,以及在这些渲染器下工作的一系列使用了标准化的表示真实材质属性的参数的贴图。
PBR本质是一个用于创建贴图和做渲染工作的整体系统,通常在不同的工具和引擎下有不同的实现(一般指渲染器模型和贴图的输入类型)。
直接将非PBR的作品在PBR的渲染器下渲染是不会有正确真实的效果的。所以,渲染器只是PBR的一部分,要正确地使用PBR得到真实的效果,还必须要考虑到如何正确地校准、使用PBR下的贴图。
二、PBR做了哪些改变
要想透彻理解怎样创建PBR贴图或者怎样将以前模式下的贴图转换到PBR下,就必须要清楚PBR的渲染器做了怎样的改变。
首先,一个重要的改变就是光照的计算方式。PBR使用了动态光源和实时阴影技术,以及提供了精准环境漫反射和镜面折射的基于图像光照(image-based-lighting)的技术。这就使得美术不用再去将光照、反射、阴影等直接绘制到贴图上,不用再去烘焙光照贴图,而将注意力转移到重现真实的材质属性。
线性空间渲染使得美术不用再在高光贴图中使用漫反射的补色来获得真实的白色高光,同时PBR微表面算法中的能量守恒将使美术不用再在高光贴图中使用灰度来区分材质的粗糙(更黑)和光滑(更亮)的区域。这就意味着高光贴图通常只用包含比数值稍微复杂一点的信息(表示绝缘体的灰度等级,表示金属的色彩信息),其他的变化将交由微表面贴图来定义。
PBR metalness workflow
三、对传统工作流程的吐槽
传统方式往往将很多东西混杂在一起去实现一个凭空想象的效果,而且每个人每个公司都有自己的方式,就好比绘画一样,没有一个标准的流程和规范。
这里用一个狙击枪的作品来举例(diffuse-specular-normal)。
传统贴图
漫反射贴图太暗,只能在特殊的光照环境中才能的到较好的效果。(千万不要讲作品/贴图放置在特殊的光照环境中来制作效果,当然以前美术就是这么干的)
环境光遮蔽AO/ cavity接绘制在了漫反射和高光贴图上了。(AO/ cavity细节应该属于一个单独的输入,让渲染器能够更智能地使用它们。另外大范围的AO更不应该直接加入到高光贴图中,因为会和高光贴图要反映的信息产生冲突。)
一个渐变映射贴图的信息被放置到了漫反射贴图和高光贴图中。(渐变映射贴图可以作为一个手动创建遮罩来实现局部效果的实用工具(比如角色更底部的脏旧信息),但这绝不是将它直接绘制到贴图中的理由。)
这里使用的渲染器并不支持光泽贴图,这就意味着高光贴图有着表现反射度和表面细节的双重任务,而仅仅使用单一的变量去控制材质整体的光泽度。
这里使用的高光值是靠眼睛测量的而不是一个真实材质的属性。那么结果就是金属部分反光太强烈,并且还毫无理由地偏黄,然而塑料和橡胶部分的材质有没有足够的反光。
传统贴图vs.PBR贴图
四、传统流程到PBR Specular工作流程的贴图转换
传统流程向PBR Specular工作流转化
1.首先,去掉漫发射贴图和高光贴图的光照信息和渐变映射信息。
2.AO/ cavity单独作为两张贴图使用到渲染器的属性凹槽中。
3.然后,将漫反射贴图适当调亮一些(参考物体的固有色)。
4.由此便能得到Albedo Map, Cavity/AO Map和Specular Map。
5.将刚才得到的高光贴图分解成一个高光贴图和一个光泽贴图(将原高光贴图中所有的表面信息移植到新建的光泽贴图中,并且更新这些值使他们符合不同材质的微表面结。再次确认这些值是否合理)。
6.当高光贴图“干净”之后,美术就能将精力集中到反射率的思考和设置上。
现在的关键点是区分物体那些部分是金属材质而哪些部分是非金属(绝缘体)材质,即便并不是在metalness 工作留下。原因非常的简单,非金属的反射一般没有颜色并且反射率一般在4%的线性区间(2~16%,当然除了宝石很少有非金属会大于4%)(或者sRGB 4075)。与之相比金属的反射率则要高得多,一般介于70100%或者sRGB 155~255)。所以分清楚所要表达的材质类型非常重要,这关乎找到正确的反射率值。
高光RGB
补充:如果金属物体被画上了或者涂上了其他的材质,那么就要作为非金属来考虑,除非是被划伤或裸露的金属材质部分。
五、Metalness Workflow和Specular Workflow的区别
在继续深入之前我们应该清楚MetalnessWorkflow和SpecularWorkflow的基本区别,虽然大多数引擎都会选择支持一种或两种都同时支持。
两种工作流最大的区别在于怎样在贴图中呈现Diffuse和Refectivity。例如在Specular Workflow下,这两者由明确区分的两种贴图来呈现。
而Metalness Workflow下,Albedo Map 则同时包含了Diffuse和Reflectivity的信息,而Metalness Map 则用于区分金属和非金属。这是因为金属导电,这就意味着绝大多数光子(光)会在其表面发生反射,而其余的光子则会被吸收而不是发生漫反射,所以金属没有漫反射的概念。相反绝缘体则会反射一小部分光(大约4%),而大部分的光则是发生漫反射或在物体表面弹射从而形成均匀分布的颜色。
Metalness Map区分金属和非金属
这就意味着在Metalness Workflow下的实践中,Diffuse Map和Specular Map基本就是浪费。反过来说Metalness Workflow就更加高效,但它(在一张贴图中同时储存Diffuse 和Specular 信息)也有一个缺点,那就是在贴图中金属和非金属的过度部分会有明显的白色痕迹。
Gloss Map(光泽贴图)和Roughness Map定义了相同的信息,但通常是相反的意义。在Gloss Map中,亮色表示光滑(有光泽),而Roughness Map亮色则表示粗糙(无光泽)。在一些领域,Glossiness这个词和reflectivity同意,有人认为用Roughness更不容易造成误解。当然,重要的并不是怎么命名而是他们的数值所代表的含义。
高光工作流 vs. 金属工作流 缺点对比
当然也有些Metalness Workflow 提供了 Secondary Specular Map来对非金属的反射做更好的控制表现。
这两种工作流可根据喜好进行选择,或者说哪种容易上手就用哪种。
六、 Specular和Metalness的转换
Specular到Metalness的贴图转换
使用photoshop作为工具。
首先创建 metalnessmask:
使用图层遮罩工具,以白色填涂金属,黑色填涂非金属,一定的灰度表示“半金属”、过度、划痕或者脏痕迹。
然后将图层做为Metalness Map保存。
2. 创建Albedo Map:
新建一个文件,用Diffuse Map作为背景层。
然后在其上用Specular Map创建一个图层。
并且以Metalness Map作为Specular层的蒙板层,这样就的到了合适的Albedo Map。
创建Albedo Map
Specular****到****Metalness****的贴图转换
使用Photoshop作为工具。
我们只需要将Diffuse和Specular信息在Albedo Map分离出来,作为单独的Diffuse Map和Sepcular Map。
1. 合成Diffuse Map。
2.新建文件将Albedo Map 载入Photoshop中。
3.创建一个黑色的填充层。
4.将 Metalness Map复制到填充层的图层蒙板中。
5.合成Specular Map
6.新建文件,将Albedo Map 载入Photoshop中。
7.创建一个色值为#383838的填充层。
8.将 Metalness Map复制到填充层的图层蒙板中。
9.翻转图层蒙板。
比较和说明
现在,我们可以比较两种不同的转换工作流程的有效性。
看来表现无差,说明转换理论和工作正确。
但的说明这里有个重要的前提——我们首先设置了标准合理的物理参数。如果是这个作为基础,那么转换后的效果将会有很大的不同。
而且转换工作中,Sepcular 工作流下的非金属的有色反射将在Metalness 工作流下丢失。
所以理想的情况是为自己选择的工作流制作相应的贴图,而不是仅仅依靠贴图转换来适应多套工作流。