前言
本文主旨是对我在学习PBR(基于物理的渲染)过程中接触到的前置知识点,特别是有关范畴和概念上的认知来作一些总结和个人理解。就我而言,PBR不光是指在渲染中使用到的光学计算会更多得遵循物理规律,更是因为在这套渲染流程中,前辈们建设性得引入了微平面理论,并依照这套理论建立了合适的光照模型和物质模型,使得艺术家们在控制材质方面的能力不光更深了一层,而且能相对轻松的渲染出符合真实世界丰富细节变化和宏观表现的作品。
我认为学习PBR的3个主要前置概念是:
- 微平面理论;
- 基于物理的光照模型(能量守恒,菲涅尔反射);
- 一套契合的物质分类法(金属,半导体,电介质)。
微平面理论
如下图,借用下网络上的图片:
宏观上平坦的表面,微观上不一定如此,现代PBR渲染理论为了能表现出这种来自微观表面带来的对光的影响,引入了微平面理论。
微平面理论的本质是数学上的一种建模,所谓建模无非是对复杂事物的抽象,而微平面理论就是用来描述亚像素表面性状用的,它假设宏观不可分割的一小块平面在微观尺度上任然可能存在凹凸不平的起伏,但人们并不关心这种起伏的具体细节,而是关注这些起伏对区域内反射光线在三维空间上概率分布的影响。
为了能用简练的数学语言描述这种分布,微平面理论视每一块区域都是由无数面理想光学镜面构成,由这些镜面集合成的整体,在宏观上可以共享一份法线信息 n。这可以理解为传统渲染流程中法线贴图中每个像素点所带有的法线信息;但记住我们研究的是亚像素区域,因此在微观上这些理想光学镜面各自也具有独立的法线信息 m。微平面理论关心的是无数个这样的法线 m 在各个空间方向上的统计分布,一般使用法线分布函数(Normal Distribution Function, NDF)表示,缩写是字母D。
分布函数D也可以写作D(m)或D(h),入参m或h都是微表面法线的意思,函数的返回值是给定微表面方向在单位面积内所占据的百分比大小,故单位是立体角的倒数(1/steradians),也就是说如果我们用D(m)dω对整个三维空域积分,那么得到的结果会是1。
如下图所示,感性的认识告诉我们,在微观尺度上表面越粗糙反射越分散,看起来也越模糊。按照微表面理论来解释,这是因为粗糙表面意味着分布在表面上的理想镜面朝向越随机,微表面法线 m 与整个宏观表面方向n之间的差距(偏离)就更大。
那么是不是当我们输入一个θ角的方向向量,可以直接拿法线分布函数的返回值作为在这个方向上光亮度的强度因子了呢?答案是否定的,微平面理论不仅认为细分后的表面可以是凹凸不平的,而且在某些方向上可能存在几何上的遮蔽关系:
如上图,当沿着θ角方向考察微表面时,某些面元(a)所贡献的反射分量会被另一些面元(b)所遮蔽,导致不是所有满足法线朝向 m 的微表面会对光路折射做出直接的贡献。为了处理这部分光能的损耗,新的几何遮蔽函数(Geometry masking function)被定义了,用字母G表示,这个函数首先与材质本身的性质有关,一般认为是粗糙度,其次对于一种给定的材质,又与观察方向v和光源方向l有关,人们一般使用微表面法线m代替光源方向,写作G(m, v)。
D和G之间的联系可以通过如下公式加深理解:
沿着各个方向的m去积分D(m)得到1,因子(v dot m)+表示截取在观察方向的投影,加号表示只取用正值,忽略一切负方向的投影(上图中背向观察方向的一侧)。如果不存在任何几何遮挡,那么此时应当得到等式右侧的值,v dot n,既“遮挡关系”图例右上方的黑色实线。但是我们看到如图中淡蓝色线段a所示的区域,被b所在的区域遮挡了,为了提出这部分额外计算的量,我们还需要乘以几何遮蔽函数G,修正掉被遮挡的部分。
光照模型
借用微分思想,让我们先将目光聚焦于弥漫在自然界中各个方向光照中的其中一束,既考察当一束方向光照射到一小块光学平坦的物质表面时会有怎么样的变化。
光照射到物体的过程,本质上是光从原先所处的介质进入到另一种介质的过程,这时一部分光发生镜面反射(reflection)重新回到原来的介质中,另一部分发生了折射(refraction)沿一定的角度顺利进入新介质中。反射光沿着反射方向平行射出,带走了一部分入射光的能量,同时对于金属来说,由于不同波长的光具有不同的折射率n(或者说反射率),也就是说一部分波长(颜色)的光被可能被更多得反射了出来,让反射光染上与入射光不一样的颜色。
折射进入物质内部的光有一部分被自由电子吸收(absorption),转化为电势能;另一部分则会在物质内部进行传递,如果介质是均匀连续没有起伏的(如玻璃),那么光线最终会以一定角度透射(transmission)出物体,而如果介质的密度极高(如金属)或者内部存在剧烈的密度起伏(如牛奶咖啡),那么我们认为光线会在发生多次折射/反射后重新回到入射光所在的介质中,形成次表面散射(subsurface scattering),当观察距离足够远时,这种微观尺度上的散射就好似发生在入射光点周围,此时的次表面散射也可以叫做漫反射(diffuse)。
下图是我根据自己对光照模型的认识进行的梳理和总结:
物质分类法
我们知道光是一种电磁波,在微观领域,光与物质的交互中,物质的密度,微观结构,以及自由电子多寡都是重要的影响因素。在渲染领域,人们一般按照自由电荷的比率,将世间万物分类为“金属 -> 半导体 -> 电介质”共3个大类,其中金属又称导体,电介质又称绝缘体,介于中间的统称半导体。
我们知道金属由原子直接构成,实验测得,入射到金属表面的光,绝大部分会被反射,余下少量光折射到金属内部并迅速被电子吸收,可以认为这种吸收非常高效且彻底,以至于几乎没有折射光能通过多次反射重新回到入射介质中,形成散射。感性的认识下,即便光泽比较暗淡的金属,诸如铁,镍,铬,它们的F0(垂直入射光的反射率)值高达0.6左右,而金和银等“亮晶晶”的金属,其F0值高于0.95以上,对光谱上的红色部分的反射率甚至超过了1(其他波长的入射光的能量因改变波长而并入了红色部分),形成了金子独有的亮黄色。
电介质相对于金属,其电学性质和光学性质是截然不同的。电介质(绝缘体)本身近似于不带自由电子,前面我们提到光的吸收本质是激发自由电子,提高势能的过程,联系电介质的特性,可以很轻易的推论出“理想电介质很难吸收光能”这个结论,所有折射进入物质内部的光,几乎都通过多次反射、折射和透射,最终逃逸出了物体本身,形成散射。另一方面,由实验测得的绝大部分电介质拥有非常低的F0值(通常不高过0.1),90%以上的光会首先折射进入物体内部,并最终散射回空气,为我们肉眼所见。也许有人会问,如果我们看到来自电介质的光几乎都是未经吸收的散射光,那岂不是所有绝缘体看起来都是入射光本身的颜色了,这和我们平常所见的五彩斑斓的花花草草不同呀?回答这个问题只需要明确我们所谈论的电介质是“理想电介质”就行,现实世界中的花花草草或者人体皮肤和骨骼虽然都被认为是绝缘体,但是其本身组成成分非常复杂,比如富含铁元素的血红蛋白使得我们的皮肤泛出红光,纸张上的彩色染料则由各种金属矿物掺杂构成,这些绝缘体内部带有自由电荷的部分当然会吸收光能,染色物体。
为了进一步弄清散射与电介质的关系,我们将电介质划分为两大类,其一叫均质(homogeneous),由同种分子构成;另一种叫异质(heterogeneous),含有两种及以上的不同分子。先说比较简单的均质,举个例子,被“静置”的“纯净”的水就是一种均质,为什么要加“静置”这个限定呢?因为在光学成像的范畴里,被摇晃后含有气泡的水就不能被称为均质了,其中含有水分子和聚成团的大量空气胶囊。在现实世界中,大多数均质都是透明的,光线折射进入均质内部后仍然保持一个朝向的光路向前传播,并且可以近似的认为传播途中不发生散射。类似的均质还有玻璃,水晶和金刚石等。对于异质来说情况会复杂不少,基于光学成像中散射的强度,由弱到强我们可以将异质再拆分为:混沌介质(cloudy)、半透明介质(translucent)以及不透明介质(opaque)共3类。如果在均质(比如水)中混入一定量的直径小于光波长十分之一的悬浮颗粒(比如牛奶豆浆之类的高分子蛋白),就构成了混沌介质。这种介质对光具有较强的透射性,但由于悬浮颗粒诱发的瑞丽散射,波长较短的部分光会被偏折,比较典型的是晚霞的红色天际线,阳关沿着掠射角穿透了非常厚的大气,形成瑞丽散射,蓝色光线被朝外偏折,留下了穿透能力较强的红色光线。当均质中的悬浮颗粒直径超过光的波长时,瑞丽散射会被米氏散射替代,这时不分光谱波长的长短,各个频段的光波都会发生随机散射,从而形成泛白的光芒,典型的事例是白色的浪花,水和水中的气泡颗粒构成了米氏散射的条件,将入射光随机散射出水体表面。当均质中掺杂的颗粒足够大,足够多时,物体透明的性状消失,成为不透明介质。不透明介质的散射能力最强,因为光线既不被吸收,有没啥透射,几乎都被反射回空气中,形成漫反射。
所谓半导体,在光学成像中可以被视为介于金属与电介质中间的状态,不应该被理解为物质受激后在金属与电介质两种状态间的跳变,而应该视为是金属与非金属的中间态。它们的F0值测量后一般位于0.2到0.5之间。
我将上述理解总结如下:
参考文献
CMU Computer graphics
PBR理论体系整理
PBR-White-Paper
pbs_disney_brdf_notes
光的散射