PBR是Physically-Based Rendering(基于物理的渲染)的简称,这个词的字面意思并不容易弄懂,到底什么是PBR呢?本文作者Jeff Russell为你介绍一下PBR的基础知识以及它与其他渲染手法的区别之处,全文并不涉及什么高深的物理工程概念和数学公式。

让PBR材质流区别与其他手法的重要一点是光对表面造成的细腻效果,它有着更为准确的模拟,而且同时不失一定的艺术感。让我们从最基础的概念说起:

漫射与反射
这是两个材质制作里最基本的概念,是光与表面最基础的相互作用,很多人都知道这一点,但不一定知道在物理层面上到底是什么。

当一束光照射到一个表面,有些光会被反射,即从物体表面沿着法线反方向弹射回去。这一过程和一个球打在了墙上或地上反弹回去差不多。在一个光滑的表面上,这会产生一种镜面效果。

也不是所有的光都被物体表面反弹回去,有些会被物体表面吸收,或者散射进了物体内部,有些散射进去的光又会从后面再次穿出去,再次被眼睛或相机捕捉到。

01.png
光的这种被物体表面吸收和散射因光的不同波长而不同,也即颜色的不同而不同。由于这种散射极为不规则,所以看起来给人感觉是来自各个方向。这和镜面效果很不同!要在材质里模拟这种效果,可以通过定义一个漫射颜色来做到。

半透与透明
但有些漫射很复杂,比如皮肤和蜡烛的表面,简单的定义一个漫射颜色是不够的,还需要考虑材质的厚度和形状。如果物体本身很薄,那么就应该能看到透明效果。这时就需要特殊材质才能模拟了。

能量守恒(一)
通过以上对反射和漫射的描述,我们不难得出一个结论:漫射和反射是互斥的。为了能看到漫射颜色,光必须先穿过表面,或者说没能被表面反射回去。那么根据能量守恒法则,就出现这样的情况:越是反射强烈的表面,其漫射越是弱(暗),因为没有那么多的光穿过去,大部分都被反射回去了。一个表面很明亮的物体它不可能有很强的反射。

02.png

能量守恒是PBR材质流的基础,要做出自然逼真的材质来,不可以无视这个规则。

金属
导电体,比如金属材质要特别单独拿出来讲一下。因为:
首先,它们比绝缘体的表面更加具有反射效果,它们的反射率高达60-90%,而绝缘体只有0-20%。高反射率让光无法穿过表面进入物体内部,从而产生了闪光的质感。

其次,金属的反射效果还会随着光谱而不同,这就是说,金属的反射是带有颜色的,而且很不均匀,比如金,铜等。而绝缘体的反射是无色的。

最后,穿过导电体表面的光最后大部分也会被吸收而不是被散射出去,这既是说,理论上导电体是没有漫射颜色的。

菲涅尔
奥古斯汀-让·菲涅尔,这个人的名字是绝对不可能被遗忘的,因为他的名字和反射现象结合到了一起去,不说他的名字谈反射几乎不可能。

在CG里,菲涅尔代表了反射效果因观察角度的不同而不同,也即是物体边缘的反射效果会更加明亮。PBR材质流在这个效果上有几个特色:

首先,对于所有的材质来说,反射效果在接近0度角时最明显,就像镜面反射一样,不管是什么材质都是如此。只要足够光滑能产生反射,那么一定能在某一个角度观察时,看到完美的镜面反射效果!这听起来有点玄乎,但这就是物理。

其次,这种反射效果的变化随着材质的不同而有所不同,如下图:

03.png

这个图的意思是在说:在模拟真实材质时,反射效果必须要稍微有些收敛,至少要在需要弱的地方弱下来。这并不难做到,而且现在的材质系统都能自带这种菲尼尔效果了。PBR材质流是可以带出些艺术处理的,在做出基础反射效果后,你可以再添加一些完全反射的小局部做点缀。

微表面
上面都是基于物体表面说的东西,或者说是物体能被渲染出来的效果。但物体表面并非完美无瑕,小凹痕,裂纹,凹凸,这些无法被眼睛看到,也无法在法线贴图里被体现出来的微小细节,确实左右漫射和反射效果的真正因素。

04.png

上图中,平行照射到物体表面的三道光线被反射到不同的方向上去了,因为它们所照到的物体表面具有不同的方向,使得这种反射的角度变得不可预测,这就产生了模糊反射效果。

但要从物理级别上模拟出这种无规则的反射需要大量的内存和计算量,在CG里只能大概模拟一个整体效果,我们一般叫反射光泽度或反射模糊度。

这是材质制作里一个重要的部分,因为真实世界里到处充满了这种模糊反射效果。

能量守恒(二)
现在渲染器都有了这种虚拟的模糊反射的模拟,正确的参数能让效果更加逼真,比如粗糙的表面会产生更大更柔和的高光区,请看下图:

05.png

图中的小球具有相同的反射强度,但因为不同的反射模糊度而表现出不同的质感,高光随着光滑度越来越清晰明亮。这又是能量守恒的法则体现之一。

微表面反射也同样遵守菲涅尔效果

06.png

 

PBR材质似乎在一夜之间改变了人们对于引擎实时渲染画面的理解。在游戏中我们也能够体验到锈蚀的金属,厚重的皮革,精细的纹理,更加真实的世界从此展现在眼前。从此,PBR材质成为了“次时代”游戏必备的标准。

在GDCC2015,来自Epic Games资深开发者支持美术设计师李文磊,为大家带来应用于虚幻引擎4贴图和材质创建的启示。

以下内容是演讲实录:

PBR是个不老不新的话题,很早它就出现在预渲染的渲染器里,随着硬件越来越快,尤其是显卡,最近几年逐渐的开始应用到实时渲染中来。

今天就和大家一起来聊聊虚幻引擎实时渲染引入PBR以后,我们怎么来正确的使用它

PBR即基于物理的渲染,渲染包括灯光,shader, 材质, 贴图,以及他们之前如何交互影响的,今天的演讲内容主要分三部分内容。1.真实世界的光,材质,以及他们之间的交互是如何的,2. UE4里是如何来模拟真实世界的,3.我们该怎么做才是正确的。

要学会使用PBR首先需要了解什么是PBR,需要从真实世界的这些PBR材质特有的属性拆分开来去了解他们,这样我们就需要了解光,物体表面材质以及光是如何与材质交互的。 光包括了颜色,亮度,衰减,强度,形状等主要属性,真实的世界中永远是多光源并存,除非身处于宇宙深空之中。

我们把自身能发光的物体叫做直接光源,自身不发光仅仅反弹其他光源的物体叫做非直射光源。分析下这张图,从美术角度我们把他分成主光,辅光,装饰光。虽然天色已晚主光还是来自于天空,天空的光线来自于太阳的散射,因此主光来自于一个天空的非直射光

附光来自于路灯,大的城市照明。这些光大都数也是反弹光,而非灯泡光源直接照射到。因此前景的人物基本是在一个天光的环境下低对比低照度的灯光环境下

那么自然界中的材质是如何跟光交互的呢?灯光照射到物体表面后两种情况,反射或继续前行折射。折射后的光线被吸收(一般转化为热),或离散。光线被吸收的行为不是发生在表面,而是次表面,或者内部反射不会带出任何颜色。

吸收会使光线强度降低,吸收某一光谱的光线,余下的光线颜色变化,但方向不变

离散后方向改变,强度不变这里对于绝缘体和导体,两者与光的交互是完全不同的

绝缘体,即非金属的反射率普遍很低,一般在2%-8%左右,大部分光线进行折射,折射后的光线或者被吸收,或者重新离散出来。这部分折射的光线吸收率和材质的明度有关,暗的吸收多,亮的吸收少;离散后光线的颜色也取决于物体表面颜色;

对于导体,即金属,反射率普遍很高,达到70%-100%,所以大部分光线会以镜面反射的形式反弹回来。小部分光线折射后完全被吸收(光是一种粒子,被导体吸收),不同的金属吸收不同波长的光线,导致镜面反射回的光线带有颜色;

漫射和镜面反射:漫射为反射光线方向随机,不一致;镜面反射为一个方向。镜面反射会根据物体表面的粗糙程度表现不同结果。但无论光滑粗糙,反射的总能量是一样的,而且光线反射后的强度不变。漫射是光线被折射的表现。光线从一种媒介进入另一种媒介,并在里面经过多次的散射后从近似入射点的位置返回原来的介质中。漫射过程中除了光线的离散光线还会被吸收(转化成热能)。光线进入介质不深,那么进入点和离开点的差别就可以被忽略。那种光线离散性高,但吸收性弱的材质有时指参与介质或者叫透明材质。比如烟,牛奶,皮肤,翡翠,大理石等。

而在更细微的层面,比如显微镜下,微表面就是物体表面细微的不规则。根据不同的流程可以叫粗糙度,光滑度,光泽度。表面的不规则度其实对于慢反射的影响视觉上不大,因为漫射的这种离散和吸收过程是发生在材质内部的而非表面。

微表面理论就是建立在物体表面这种细微不规则性的基础上的。可以把它看作许许多多不同方向的面,这些面就叫做微表面。光线对于这些面对入射角都是不一样的,反弹后的角度也不一样,并且有的地方被挡住,有的地方会产生阴影,视觉上会产生模糊的反射

在引擎中的明暗shading计算引入了各种函数理论模型,来尽量逼近模拟自然界的物理现象

我们可以通过BRDF来了解UE4里面是如何模拟的。

BRDF 双向反射分布函数(Bidirectional Reflectance Distribution Function,BRDF)场景中的光照射到材质表面反射到视点的光亮度计算方法函数,来定义材质属性。它描述了入射光线经过某个表面反射后如何在各个出射方向上分布,这可以是从理想镜面反射到漫反射

UE4 PBS中引入了各种BRDF理论模型,也可以在shader里选择默认模型,最终需要效率和效果的一个最佳结合点。

通过一些简单的参数,我们可以在引擎中用来区分不同类型材质的反射特性。

在UE4材质里面,每一个input都有着各自的特性,他们的组合成为了一个个不同属性的物理材质。

通过一个简单的Metallic参数的调整,我们就可以轻易区分两个完全不同的材质。

物体表面的反光属性也是这样一个非常重要的参数,通过这张图片,我们就能够非常清晰的区分开来。

那么如何制作一个高质量的PBR材质,如何选择使用的工具,如何设置灯光呢?、

首先观察生活中的真实物体是非常重要的环节,它能够给你一个基本的概念,不同的材质应该有哪些不同的属性。在设计过程中,我们会有一些描述性的词语来清晰说明目标材质的属性(文字+图片),描述词汇包括

材质类型:钢,塑料,铁,玻璃,油漆

材质明度颜色

材质表面处理:打磨过的,抛光,磨砂

材质环境影响细节描述: 生锈的,刮擦的,磕碰的,脏的,油腻的,油漆剥落的,积灰的,崭新的

翻译这些信息到UE的材质属性,材质类型的信息来区分金属还是非金属,材质明度及颜色来定义BaseColor,表面处理关系到Roughness,环境影响复杂多变,牵扯到包括以上多个通道。

比如脏旧磕碰的金属掉漆的表面:掉落油漆的部分为金属,未掉落部分为油漆,在材质类型金属性的定义里区分开来;磕碰信息从法线贴图,粗糙度贴图;新旧又影响镜面反射的量和连续性,又和粗糙度贴图有关

在项目开始前问几个问题:

  1. 材质需要共用吗?
  2. 材质的精度要求高吗?
  3. 材质需要统一管理迅速迭代吗?
  4. 需要自定义或允许改变外观吗?
  5. 效率/内存:材质能够多复杂?贴图能够支持多少?
  6. 是否需要复用?
  7. CG or Game?
  8. 需要改变贴图吗?
  9. 内存多大?
  10. 客户端大小?
  11. 编辑器内还是外
  12. 其他问题

通过创建区分材质,将一个模型不同的区域区分开来,区分大块面材质的意义在于一个物件有多种材质,必须有区分它们的mask,方便随时修改不同材质区域的贴图,提供在引擎中更换不同区域的材质的可能性,为进一步在表面增加细节提供区分的通道

区分材质的信息是灰度图,不同的区域可以放在一张RGBA贴图的各个通道里;根据材质的数量可以是单张或多张。

真实的世界中,每一个材质都有许多的细节,所以接下来,为材质添加更多的细节,比如划痕,污渍,环境元素等,这些信息来自于模型起伏,法线,可以手动选取;经常由一些工具软件生成,这些工具软件可以比较只能的根据已有的模型信息判断和生成出自然的细节。

将大块面的材质区分通道和细节材质区分通道进行混合,由于大块面材质区分通道和细节材质区分通道是分离的给混合提供了更多的自由度,这种自由度表现在可以控制哪些细节可以出现或者被屏蔽在哪些区域。

现在在市面上可以看到大量的工具可以帮助在UE4里面完成PBR材质的制作,在这里我们列举出了一些主流的配套工具。

制作的过程分为三个部分,从高模和低模创建出NormalMap,ID Mask ,AO和Cavity。然后再上面添加必要的细节,最终导入UE4。

在这里我们可以通过这些工具来增加细节贴图,在引擎中合并,这样可以让材质更为真实。

通过以下这些步骤,我们就能够表现多层材质

  1. 导入:主MASK, 细节MASK, NORMALMAP, AO, CAVITY
  2. 创建基本材质,包括基本材质中细节添加的可能性
  3. 创建母材质,混合基本材质
  4. 添加更多变化:图案,潮湿度/多孔性
  5. 创建材质实例

材质贴图都完事了?还没结束呢。PBR的关键之一灯光:创建真实的灯光环境。 (这里不谈论艺术的灯光环境,仅追求真实)

真实的灯光包括直射光,非直射光, 并且HDR,在灯光半径范围内的物体表面会被灯光直接照亮,并有高光点;范围外物任何照明(包括漫射和镜面反射)。

在真实世界中灯光理论上是没有范围的,虽然随着距离增加照度降低,但始终会有影响,在镜面反射上尤为明显。

这种反射在UE4里需要由高动态的环境反射贴图来表现,是一种IBL的照明方式。

有了灯光的烘托,一把次时代PBR材质的武器就正式登场了。

PBR材质是未来的标准,在传统材质转换到PBR材质的过程当中,我们会遇到很多的挑战。对于传统贴图到PBR贴图没有一键转换的工具,因为有些信息计算机是无法猜测出来的,还是需要主观去判断。目前有两种PBR流程贴图转换可以使用工具。

现在的灯光有直射光,阴影,也有间接光,间接反射等,所以贴图上不需要把灯光信息画上去,只要专注于表达材质属性。我们不需要画高光颜色(反色)来达到一个看上去是白色的;线性空间渲染意味着对于basecolor的明度范围大概30-50 到180-250

能量守恒使得高光如何怎么变都不会增加或减少,就不需要手动的来调整贴图使得粗糙的地方高光贴图暗,光滑的地方高光贴图亮。这时候就需要用已有的信息或修改后生成roughness,Cavity:来定义微表面的变化。

通过这样的调整,我们就能够将传统的材质转化到PBR材质。为我们的游戏添加更好的质感

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注