作者:Auv_525
来源:CSDN
一、自然界材质
要学会使用PBR首先需要了解什么是PBR,需要从真实世界的这些PBR材质特有的属性拆分开来去了解他们,这样我们就需要了解光,物体表面材质以及光是如何与材质交互的。光包括了颜色,亮度,衰减,强度,形状等主要属性,真实的世界中永远是多光源并存的。那么自然界中的材质是如何跟光交互的呢?灯光照射到物体表面后两种情况,反射或继续前行折射。折射后的光线被吸收(一般转化为热),或离散。光线被吸收的行为不是发生在表面,而是次表面,或者内部反射不会带出任何颜色。
吸收会使光线强度降低,吸收某一光谱的光线,余下的光线颜色变化,但方向不变,离散后方向改变,强度不变。这里对于绝缘体和导体,两者与光的交互是完全不同的绝缘体,即非金属的反射率普遍很低,一般在2%-8%左右,大部分光线进行折射,折射后的光线或者被吸收,或者重新离散出来。这部分折射的光线吸收率和材质的明度关,暗的吸收多,亮的吸收少;离散后光线的颜色也取决于物体表面颜色;对于导体,即金属,反射率普遍很高,达到70%-100%,所以大部分光线会以镜面反射的形式反弹回来。小部分光线折射后完全被吸收(光是一种粒子,被导体吸收)。
1、扩散Diffusion与反射Reflection
扩散与反射,也即是漫反射diffuse与镜面反射specular,是描述光与物质的相互作用经常用到的两个词。大多数人应该能基本了解他们的含义,但不一定能知道他们两个在物理上的区别。
当光线照射到物体表面上时,光线会以和入射角度相同的反射角度从物体表面反弹出去(入射角度与反射角度都是光照方向与光照表面发现方向所成的夹角)。这和你朝墙上扔小球非常相似,你把一个球扔在地上或者墙壁上,小球会以相同的角度但是相反的方向弹开。如果一个表面足够光滑,那么它将表现的像个镜子一样。“镜面反射”这个词便用来描述这个现象。
当然了,并不是所有的光都被表面反射出来了。通常情况下会有一部分光线进入到受照射物体的内部。在受照射物体内,这部分光线会被物体本身吸收(通常会转化为热)或者在物体内进行散射,部分散射的光有可能会通过内部的传播最终又反射回表面,再次成为可以观察到的光线。这个现象有很多叫法,Diffuse Light(漫反射光),Diffusion(扩散光),Subsurface Scattering(子面散射、次表面散射),都说的是一个东西。
散射(Scattering)的光和被吸收(Absorption)的光的波长往往是不一样的。当受照射物体吸收了大部分的光,但是反射了蓝色的光,那么这个物体看上去就是蓝色的。散射往往是一致无序的,可以说它从各个方向上来看都是一样的,这和镜子完全不同。所以当使用PBR的材质球需要描述物体的扩散与反射属性时,只需要输入“固有色albedo”就好了,即用反射贴图来描述从物体表面散射出的各种颜色。Diffuse color有时也被用作它的同义词。
2、半透明与透明
在某些情况下扩散现象(Diffusion)会更加复杂,比如皮肤和蜡烛这些有着更广泛的扩散距离的材料。这时仅仅一张固有色贴图Albedo是不够的,整个着色系统必须考虑到被照射物体的形状与厚度。如果被照射物体足够的薄,那么往往能够从物体背面看到散射出来的光,并被称为半透明。如果被照射物体内的扩散程度很低(比如玻璃),那么光的散射几乎是不可见的,你可以从物体的这一面看到另一面的整个画面。这一现象和典型的“接近物体受照射表面”的扩散现象有非常大的区别,这时候就需要去专门的调整并去模拟这种物理属性。
3、能量守恒
讲到这里我们足以得出一个重要的结论,那就是扩散与反射是完全独立的。这是因为光在扩散之前必须先进入物体内部(也就是没有被物体表面反射)。这在光的投射现象里被称为“能量守恒”,这也就意味着离开表面的光的亮度是不可能高于最初所照射光线的亮度的。
4、金属
基于以下几个原因,导体,特别是金属,具有很特殊的材质效果。
首先,导体相对于绝缘体具有更强的反射。导体的反射率在60%~90%之间,而绝缘体则低得多,只有0%~20%。这些金属的高反射率意味着大多数的照射光线都不能进入物体内部进行散射,这就意味着金属看上去非常的闪。
其次,导体的反射光在可见光谱上会发生变化,也就是说反射光被上色了。这种反射的颜色虽然就算在导体中也算很罕见,但这种材料在日常生活中也是能看到(比如黄金,红铜和黄铜)。一般来说,绝缘体并不会出现这种现象,他们的反射是没有色彩影响的。
最后,导体通常是吸收光,而不是让光散射。这意味着理论上来讲,导体不会表现出任何散射现象。然而在现实中,金属表面上的氧化物和残留物会显现一些少量的散射光。
正是因为金属与其他物质的二元性,使得一些渲染系统采用直接输入“金属度metalness”的方法来控制一个材料是否是金属。而不是仅仅去分别指定固有色albedo和反射率reflectivity。有时在创建材质,这会是首选的简单方法,但PBR并不是都要这么做。
5、菲涅尔
在计算机绘图中,菲涅尔指的是在不同入射角度时所出现的不同的反射率。具体的说,光的入射角度越大,反射率越高(如果水质够清晰,当你垂直的看水面时,是看不到自己的脸的,只能看到水底。而当你的目光和水面接近水平时,就看不到水底,反而可以看到湖面对岸上的树之类的倒影)。这意味着开了菲涅尔的物体,渲染出来的物体的边缘会有明亮的反射。大多数人都应该很熟悉这个概念,它在计算机绘图中不是个新词。但是PBR在菲涅尔方程上做了一些很重要的修正。
首先,对所有的材质来说,当以接近水平的角度来观察光滑物体的边缘时,会出现近乎完美的镜面。是的,真的,任何物体都可以作为镜子,只要它是光滑的,并且以正确的角度观察。直觉上会觉得这不科学,但是这很科学。
第二点,对于不同材质来说,入射角度对应的曲率或者是梯度并没有明显的区别。金属是最特别的,但也没特别到哪里去。(说实话这段翻译我没太明白,看下面的图可以发现不同材质在0°入射角时的反射率差别最大,而在90°时都无限接近了100%,所以差别还是蛮大的。不过反射率在靠近0°时爬升的很慢,这时确实是没什么太大变化。
6、微表面
上面所说的反射与扩散都是由表面的方向所决定的。在较大的尺度下(可以理解为宏观条件下),这是由被渲染表面的形状决定,当然也可以使用normal map来描述一些小细节。只要有了这些信息,任何渲染系统都能将扩散和反射表现的相当不错。
然而我们仍然忽略了一个地方。现实当中大多数物体的表面都会有非常微小的缺陷:微小的凹槽,裂缝,几乎肉眼不可见的凸起,以及在正常情况下过于细小以至于难以使用normal map去表现的细节。尽管这些微观的细节几乎是肉眼观察不到的,但是他们仍然影响着光的扩散和反射。
微表处的细节对反射的影响最容易被观察到(次表面的散射不太会被影响到,所以这里就不说了)。在上图中,当平行光照射到粗糙表面时会分散开来,也即是每条光线都照射到了物体表面上朝向不同的部分。用小球和墙壁来说:球仍然会反弹但反弹的角度变得不可预知。总之,物体表面越粗糙,反射光看上去越“模糊”。
不幸的是,分别去计算每一个微小表面所对应的光照情况是不可能的。那怎么办?如果我们放弃去直接计算每个微表面的光照和反射情况,而是直接给出一个粗糙度的数值,那我们可以写出一个相当准确的shader并得到非常相似的最终效果。这个数值通常被称为“光泽度”,“平滑度”,或“粗糙度”。它可以被特定的制作为一张贴图并赋予给材质。
微表面的细节对于任何材质都是个非常重要的特质,就像真实世界中就有着各种各样的微表面。光泽度贴图并不是一个新概念,但因为微表面的细节对光照的反射具有如此重要的影响,所以它在PBR中占据了一个关键位置。很快我们就将看到PBR着色系统在微表面方面的改进。
二、PBR材质系统
UE4的PBR材质系统中引入了各种BRDF理论模型。BRDF 双向反射分布函数(Bidirectional Reflectance Distribution Function)是建立在光学物理与计算机图形学的基础上的用于描述光反射现象的数学模型。BRDF描述了入射光线经过某个表面反射后在各个出射方向上的分布,即场景中的光照射到材质表面反射到视点的反射特征。在光学物理中,BRDF模型通过积分的形式来描述物体上一无穷小点对入射光线的吸收和反射情况,等于反射方向的光亮度和沿入射方向的入射光辉度之比,在理论上可以描述现实中绝大多数的光学现象,其模型如下:
BRDF模型还需遵循能量守恒定律,即入射光的能量等于出射光的总能量:
BRDF中的渲染方程计算了环境光照明下的反射光的光亮度,它可以写成不同角度下的入射光光亮度乘以BRDF的积分:
为了便于使用,BRDF模型被组织成了多种参数化的指数模型,可以分为三类:经验模型、基于物理的模型、数据模型等,下面介绍几种常用的BRDF模型:
1、Lambertain漫反射模型
Lambertain漫反射模型是计算机图形学中最基本的反射模型,它模拟了入射光线被均匀地反射到各个方向(各向同性)的情况,也就是说沿不同方向的BRDF是一个常数,那么就有:
反射率 等于反射光辉度与入射光辉度之比,即
Lambertain模型能够很好地表示包含纯粹漫反射现象的物体材质(例如:纸张),但不能表示镜面反射效果,而镜面反射效果对于金属材质的表现十分重要。
2、Phong光照模型
Phong光照模型在Lambertain漫反射模型的基础上添加了镜面反射项,来表达镜面反射效果:
Phong模型不满足可逆性。
尽管Pong模型缺乏物理解释,但由于简洁和高效的特性而被广泛应用于计算机图形学的反射模型中。
3、Fresnel模型
Fresnel模型是建立在光学物理的基础上的数学模型,其建立在表面由众多微表面组成的细节几何结构上。从微观角度来说,微观尺度的表面几何是通过一组微平面集合来组成的。在真实的物理环境下,我们发现光的单向反射性会在擦地角处附近增大,(例如:在以垂直角度向下看水面几乎不存在反射,而以平行角度看水面时则存在明显的反射现象)。在此基础上,我们从麦克斯韦电磁波方程组中得到菲涅尔公式,从而计算出入射光的反射量:
其中,F表示菲涅尔反射率。
4、Cook-Torrance模型
Cook-Torrance模型是计算机图形学中应用最早的BRDF物理模型,是应用物理学家Torrance-Sparrow模型的一个应用版本。Cook-Torrance模型中把物体看成无数个微平面,并假定微平面是由V型凹槽组成的,凹槽中满足镜面反射。该模型结合了Lambertain模型的漫反射项与微平面反射的镜面反射项,公式为:
其中,D表示微平面法向分布函数,G表示几何衰减因子,s和d表示镜面反射和漫反射系数。
5、Ward模型
Ward模型介绍了一种更一般的表面法向表达方式,即通过椭圆体这种润徐各向异性反射的形式来表达。该模型将菲涅尔因子和几何衰减因子替换成了一个用于保证分布在整个半球内积分的简单归一化项,由于没有考虑菲涅尔因子与几何衰减因子,使得该模型更像是一种经验模型。
6、波动光学模型
波动光学模型以波动光学为基础,假设物体表面的微平面大小与光的波长相当。虽然波动光学模型有很强的描述能力,能够很好地表示真实感物体材质,但由于该模型本身过于复杂而限制了它的应用。
7、数据驱动模型
数据驱动模型是将一个大的材质集合的BRDF记录为高维向量,并通过降维的方法从这些数据中计算出一个低维模型。数据驱动模型对材质属性没有假设限定,使用起来更灵活,但由于数据量大,还需要通过数据降维的方法来压缩数据。
三、UE4中的PBR材质
UE4引擎的PBR材质系统中引入了各种BRDF函数理论模型,来尽量逼近模拟自然界的物理现象,PBR材质的编辑指的是用户通过修改现有的BRDF模型从而得到新的BRDF模型。如果是解析形式的BRDF模型,那么通过修改其参数,就能实现BRDF的编辑。也可以在shader里选择默认模型,最终需要效率和效果的一个最佳结合点。
在UE4材质里面,每一个input都有着各自的特性,他们的组合成为了一个个不同属性的物理材质。可以实现钢,塑料,铁,玻璃,油漆等材质类型,打磨过的,抛光,磨砂等材质表面处理,生锈的,刮擦的,磕碰的,脏的,油腻的,油漆剥落的,积灰的,崭新的等材质表现细节。
PBR其实并不是一个逻辑复杂的过程,它更像一杯由各种数学公式组成的鸡尾酒。比如说要描绘正确的高光过程,一个实用的PBR实例就是将施利克的菲涅耳系数与基于施利克-史密斯的视觉函数来进行组合。通过将复数的描述物理过程和结果的算法进行组合,PBR最终能够具备赋予像素正确颜色的能力。
其实在漫长的图形技术进化过程中,PBR所做的工作一直在被程序员们进行着,从光锥阴影到softshadow,再到最近日趋火热的AO过程,这些技术进步其实都是对算法模型的改进。但相对而言,传统的做法往往集中在某个特定的有针对性的领域,比如说阴影当中,或者往往只考虑了像素的处理,所以并不能解决所有问题。PBR除了为整个渲染过程搭建了一个能够整合的框架,令更多像素细节能够有机会在改进算法和物理模型的作用下呈现更正确的颜色之外,最重要的改进还在于建立了更加完备的、分辨率更高同时能够与经过PBR修饰的光影效果更正确互动的材质库。
版权声明:本文为CSDN博主「Auv_525」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42660918/article/details/80989738