基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

基于物理的模型渲染

(Physically-Based Shading Models in Film and Game Production)


SIGGRAPH 2010 Course Notes
【原文地址】


背景:基于物理的渲染

在这个部分,我们先来重温一下基于物理的渲染技术(PBR)的基础原理。首先从基础物理学原理的定性描述开始,逐步引出相关数学模型的定量表述,并在最后讨论如何将这些数学模型珍真正的用于实际的渲染任务中。

1、着色的物理学基础

与着色(shading)过程密切相关的物理现象主要是光与物质的相互作用。为了更好的理解这些物理现象,首先我们需要先了解自然光的基础知识。

基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

光是一种电磁波,而且是一种横波。这意味着其震动方向与传播方向相互垂直。由于光是一种波,他可以由波长来进行描述(波长:峰值到峰值的距离)。电磁波的波长范围覆盖了一个很大的范围(从长波到伽马射线),但是其中只有一个很小的区域能够被人眼感受到,我们称其为可见光(波长从400nm到700nm),这也是着色过程感兴趣的区域,如图2所示。

基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

均匀介质
最简单的光与物质相互作用的情况是:光线在均匀介质中传播。均匀介质意味着在介质的一个区域内其折射率是统一的相等的。(注意这里的折射率是一个复数,包含实部和虚部)
透明物质是指介质的折射率的复数部分很小,这意味着任何可见光在这种介质中传播都不会发生明显的吸收,而且其传播方向将会沿着直线,而不发生任何改变。常见的透明介质如玻璃和水,如图3所示。

基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

如果一种均匀介质具有较大的吸收率,这意味着其对穿过它的对可见光有明显的吸收效果。而且随着光在这种介质中传播的距离增加,光线被吸收的总量也增加。可是,此时光线的传播方向依然是不变的,只是光的强度降低(如果这种吸收效果只是针对某个很窄的光谱范围,其那么还将导致传播光线的颜色发生变化),如图4所示。

基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

光的散射(Scattering)
在均匀介质中光线总是保持连续的直线传播,而不会改变方向。相对的,在非均匀介质(heterogeneous)中,介质各处的折射率是变化的。如果非均匀介质中折射率缓慢而联系的变化,那么光线在其中传播的路径会被弯折称为一条曲线。如果非均匀介质的折射率在一个很短的距离上(波长尺度)变化是突变的,非连续的,那么光就会发生散射,光线的传播方向被分割为多个。需要注意的是:散射并不会改变光的总量,它只是改变了光的传播方向。

折射率与周围不同的微粒在介质中形成了一个个独立的小岛。这导致光在所有可能的方向上形成方向连续折射(不是折射连续发生,是说折射的方向是连续的) 如图6所示。

基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

介质的外观
前面的的章节讨论了光与物质的两种不同形式的相互作用。
1)吸收作用:具有较大复分量折射率的的区域导致了对光的吸收作用:光线的总量随着传播几率增加而减少,(如果吸收只对特定波长起作用,光的颜色也会发生变化),但是光线的传播方向不发生变化。
2)散射作用:折射率的快速突变导致了光的散射:光线的传播方向发生变化(光的传播方向被分割为多个不同的方向),但是光的总量和光谱分布不发生变化。
现在我们来介绍第三种光与介质的相互作用:自发光(emission)。
3)自发光作用:光线从其他能量形式转化而来。这种情况存在与光源中,但是在着色过程中并不经常发生。
图10展示了这三种不同的相互作用。

基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

大多数的介质都会在一定程度上吸收和散射光线。每一种介质的外观都依赖于其吸收和散射光线的量。图11展示了具有不同吸收率和散射率的组合的介质外观。

基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

在平面边界处的散射
麦克斯韦方程组可以被用来计算光在折射率发生变化时候的习性,但是在大多数的情况下解析解都是不存在的。但是在一个特殊的情况下,我们可以得到麦克斯韦方程的解析解,而且这个特殊形况与着色过程密切相关。这种情况是:在两个具有不同折射率的介质之间有一个无限大且完美的平面界面。在这个情况下麦克斯韦方程组可以写为另一个特殊形式:菲涅耳方程(Fresnel equations)。

虽然真正的物体表面不会是无限大的,但是相对于光波长的尺度,我们可以近似认为这个条件是成立的。对于“完美平面”这个条件,真实物体表面不可能是绝对平的,即使小到原子尺度,原子自身也会形成微小的突起。但是,和其他的条件一样,这个尺度也是相对于光波长来说的。实际上在几百纳米尺度上是可以形成较为完美的平面的,这种表面被称之为光学平面,并且被用于高质量的光学设备中。
在这种特殊的平面散射情况下,光线不再被散射向多个连续的不同方向,而是被分割为两个方向:反射方向和折射方向,见图12。

基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

如图12所示,反射角度等于入射角,但是于折射角度不相同。折射角的大小依赖于介质的折射率(参考折射定律 Snell’s Law)。傅里叶方程(Fresnel equations)描述了折射光和反射光的性质,具体的讨论在后面的章节中给出。

非光学平面表面
当然,大多数真实物体的表面不能被抛光成如同望远镜镜片般光滑。当物体表面不是完美的光学表面的时候,情况又是怎样的呢。大多数情况,存在一些不规则的区域,他们要比波长的尺度大,但是又很小以至于几乎看不见。(例如不规则区域的尺寸小于一个像素的面积,但是大于波长)。在这种情况下,这个表面可以被看作是由一系列微笑的光学平面组合而成的。此时表面的外观是由很多个具有不同方向的点的着色结果聚合而成的,入射光在每一个点的反射方向都有微小的不同,如图13所示。

基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

此时表面微观结构越粗糙,其反射就越模糊,改变方向的反射光线偏离原反射方向的程度就越剧烈,如图14所示。
为了实现着色目标,一般以统计的方式处理这种微结构,并且把这个表面看作可以产生多个方向的反射光(或折射光),如图15所示。

基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

次表面散射
折射光会发生什么变化呢?这依赖于构成问题的物质。金属对可见光光谱具有一个很高的吸收系数。所有的折射光会立即被金属吸收。而对于非金属来说,一点光折射进入其内部,则其表现为标准的参与介质(participating media),呈现出了我们前面介绍的吸收和散射行为。在一些情况下,一些折射光线被散射的程度较大,以至于他们会重新射出表面,进去不表面和非金属表面折射的情况如图16所示。

基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

在图16的右侧你可以看到那些用蓝色箭头标明的次表面散射光(subsurface-scattered light)从表面上的与入射点相距不同的多个点射出来。图17展示了两种不同距离与像素尺寸之间的关系的情况。

基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

在上左图中,像素的尺寸大于散射距离(从入射点到散射出射点的距离)。在这种情况下,散射距离可以被忽略,此表面散射被假设为从表面上同一个点入射和出射。此时的着色处理可以完全的被看作是一个局部处理,出射光仅仅依赖于入射光。
在图17的下边,像素尺寸小于散射距离。在这种情况下,每一个点的着色都收到其相邻点入射光线的影响。为了处理这种情况,局部的着色处理不能满足要求,必须采用较为特殊的处理方法。这种方法一般被称为“次表面散射”技术。但是必须注意的一点是:传统的漫反射着色是由相同的物理现象(折射光线的次表面反色)引起的。唯一的区别是散射距离是相对于观察尺度的。这个观点告诉我们:表现出次表面散射特性的材料,可以在远距离被当使用标准的漫反射着色来处理(例如站在远处人角色的皮肤)。相对的,那些具有标准漫反射特性的材料,在距离特别近的位置观察,也会出现次表面散射效果。(如在非常近的距离观察塑料玩具)。

2、着色的数学基础

电磁辐射的测量被称为“辐射线测定”,很多工程量被用来测量表面的光线在不同表面和方向上的情况。这里,我们只关心亮度这个量,它被用来量化沿着一条射线传输光线的量级。当我们对一个点进行着色的时候,我们用公共的辐射量符号 L 来表示辐射量。 Li表示入射到表面的辐射, Lo表示出射出射的辐射量。亮度(与其他辐射量一样)都是一个“光谱量”,也就是说这个量是波长的函数。理论上说,为了表达不同光线的辐射量,需要存储一个连续的光谱分布。在一些专业渲染应用中,采用稠密的采样来处理上述光谱分布,但是在对于更多的渲染过程中,往往使用使用RGB三元组来代替稠密的采样。关于三元组与光谱分布之间的关系在很多的网站或书籍上都有详细的说明,其中包括“Real-Time Rendering”(http://realtimerendering.com/)。

The BRDF
一个比较通常的假设是:着色过程是一个局部处理过程(如图17 右上图所示)。在这种情况下,一个给定表面上的点如何对光照进行响应,完全取决于入射光和观察(出射)的方向。在本文中,我们将使用 v来表示沿着观察方向的单位向量,使用 l表示入射光反方向的单位向量(将所有的向量起点都定在表面上会使得后续处理更为便捷)。表面对光线响应的情况通过BRDF(Bidirectional Reflectance Distribution Function 双向反射分布函数 ) 函数进行量化,定义为 f(l,v)。每一个方向的向量(入射方向和观察方向)都被表示为两个变量的组合(如采用极坐标表示),因此整个BRDF函数是一个四维的函数。在一些情况下,沿着表面法线方向旋转入射和观察方向不会改变BRDF的值。这种各向同性的BRDF函数可以被三个变量(角度)所描述,如图18所示。
基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

实际上,根据情况不同,计算一个给定的BRDF函数可能需要1-5个不同的角度,图19展示了常用的一些角度。
理论上说,BRDF函数仅仅由表面上的入射光和观察方向决定,换句话说 (nl) 以及  (nv)都必须是非负的(也就是说两个向量的夹角小于九十度)。在着色过程中,会出现一些情况使得角度超过这一范围(如,
正常的映射可以导致法向量的背向
观察向量)。这时候典型的做法是将点乘的结果钳制为0,但是也可以采用其他的方法。
BRDF函数可以直观的通过两种方式进行解读,两种都被证实是有效的。
第一种解释是:当给定某一特定方向的入射光线后,通过BRDF可以计算出在各个出射方向上反射光和折射光的分布。
第二种解释是:给定观察方向后,BRDF可以给出所有入射光线的相关分布,从而描述他们是如何被转换为出射光线的。这两个表示被展示在图20中。
基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

BRDF也是一个光谱量。理论上说,输入输出光线的波长也是BRDF的输入变量,这提升了BRDF函数的维度。但是在实际情况下,不同波长的光线不会相互串扰,特定波长的出射光只收到相同波长的入射光的影响。这意味着我们不会将入射光和出射光的波长作为BRDF的输入变量,而是将BRDF函数本身作为一个与波长相关的光谱量。(用特定颜色的BRDF乘以颜色值)

将BRDF用于反射方程可以得到:

Lo(v)=Ωf(l,v)×Li(l)(nl)dωi

虽然这个方程看起来有点吓人,它的意思很简单:出射光亮度等于入射光亮度乘以BRDF再乘以一个余弦因数的积分(再表面上所有的方向上)。如果你不了解积分,那么你可以把他想象为某种加权平均。­­ ×用来表示向量之前的乘法,因为无论是BRDF还是颜色值都是向量。

并不是任意一个输入输出向量的函数都可以被认为是BRDF函数,通常一个BRDF必须满足如下两个条件:“交换性”和“能量守恒”,交换性的意思当输入和输出互换的时候,BRDF函数的值必须相等:

f(l,v)=f(v,l)

能量守恒保证了表面反射的能量不能超过入射能量的100%,数学上,可以通过如下等式表示:
l,Ωf(l,v)(nv)dωo1.

这意味着,对于任意方向的输入光线  l,它所有出射光的余弦分量乘以BRDF的积分不能超过1.
由BRDF描述的现象包含了两个明显的现象,表面反射和表面散射。由于两个现象具有不同的行为特性,BRDF包含两种单独的术语。用来描述反射的BRDF术语是“specular 镜面”,描述次表面反射的术语是 “diffuse 漫反射”,如图21所示。
基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

表面反射率(镜面反射项)
大多数基于物理的镜面BRDF项的基础都是“微表面理论(microfacet theory.)”。这个理论是用来描述非光学表面的反射。微表面理论的基础假设是:一个表面可以由大量细小、无法独立观察到的微小表面(microfacet )组合而成。每一个微小表面都被看作是光学平面。在前面章节我们提到过,一个光学平面会将入射光精确的分解为两个方向的光:折射光和反射光。

每一个微小表面对于一个给定的入射光都会产生一束单独的反射光,反射的方向由微小表面的法线方向 m 决定。当我们评估一个BRDF项的时候,需要同时规定好入射方向 l和观察方向 v.这意味着,在表面上的数百万个微小表面中,只有那些角度使得入射光 l较好反射到观察方向 v的微小表面,才会对此时的BRDF值产生贡献。如图22所示,那些**的微小表面,刚好使得其法线方向 m处在入射方向 l和观察方向 v的正中间。 l v正中间的向量被称为半矢量(half-vector)或半角矢量(half-angle vector),我们用 h来表示。

基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

需要注意的是:并不是所有的 m=h的情况都会使得入射光线对反射有贡献,某些情况下在入射光线或反射光线的路径上可能存在遮挡(其中入射光的遮挡称为shadowing,也就是阴影,出射光的遮挡称为mask,也就是掩饰)。微表面理论假设所有被遮挡的入射光(shadowing)都被从镜面反射项(specular)中去除。在实际情况中由于多表面的反射,上述的某些光线最终能够被用户看到,但是在微表面理论中不对这些光线进行计算。在通常情况下,上述被忽略的光线并不是主要的误差源(粗糙金属表面除外)。图23中展示了不同的光线与微结构表面交互的情况。

基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

根据上述假设(光学平面的微结构,不进行交互反射),一个镜面反射的BRDF项可以根据第一原则得到【1,25】:

fμfacet(l,v)=F(l,h)G(l,v,h)D(h)4(nl)(nv)

在后面我们会详细解释这个公式中的各个项,但是首先让我们先总体的介绍一下。
 F(l,h):是当前微表面的傅里叶反射率,它是光线的入射方向 l和当前微表面发法线方向 m=h的函数。
 G(l,v,h):是微表面的分摊( m=h的时候值为1)。是输入光方向 l,观察方向 v和微表面法线 m=h的函数。
 D(h):是微表面的正态分布函数
分母 4(nl)(nv)是一个修正因子,用来描述从局部微表面转化到全局表面的量。

傅里叶反射项
傅里叶反射项用来计算光学平面上的反射光。它的数值有两个因素决定:入射角(入射光矢量与法线矢量的夹角)和折射系数。由于折射系数随着可见光光谱而变化,因此折射系数也是一个光谱量,也通过一个RGB三元组来表示。同时我们也可以却似那个,所有这些RGB的值都在0-1之间,因为一个表面的反射率的值也是再0-1之间。
同时,由于我们只是考虑 m=h的情况,傅里叶反射项的入射角只会是 h l中的一个矢量。完整的傅里叶等式较为复杂,并与材料的参数有关,对于艺术家来说使用起来并不方便。不过通过检测真实材料的傅里叶方程的习性,可以得到一个更为简单的表达方式。如图24所示。

基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

图24中所选择的材料包含了很广泛的种类。尽管如此,我们依然可以发现一些共性。反射率在0°到45°基本保持为一个常量,在45°到75°之间发生明显的变化(一般是增加),最终在75°到90°之间快速上升到1。由于在整个0°到90°之间的大多数时候,傅里叶反射率在保持在与其0°的值附近。因此我们也将 F(0°)的值称之为材料的 “典型镜面反射率”(characteristic specular reflectance)。这个值通常被看作是一种类似“颜色”的值,由三个0-1之间的值所构成,是对光的选择性反射的测量。基于这个原因,我们将这个值看作是表面的镜面反射颜色(specular color),标记为: cspec
 cspec看起来是对傅里叶反射率的理想近似的参数,实际上,Schlick [22]给出了一个廉价且合理的精确近似:

FSchlick(cspec,l,n)=cspec+(1cspec)(1(ln))5

这个近似被广泛的适用于计算机图形学领域。在活动微面的特殊情况下, h 必须被替换成为表面法线 n

FSchlick(cspec,l,h)=cspec+(1cspec)(1(lh))5

为了知道 cspec被指派为什么数值才是合理的,一个直观的想法是看一下真实世界中材料在 F(0°)的值。这些数值如表1所示。数值以线性(linear Space)和伽马空间(gamma (sRGB) space);两种方式给出。对线性空间和伽马空间不熟悉的读者读者可以看一下参考文献[14, 15].
基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

当我们仔细检查表1,我们不难发现:
1)金属的 F(0°)要明显高于非金属。例如:铁是非常黑的金属,但是它在0°的反射率超过了50%。回忆一下,金属不发生次表面反射这一事实,可以得知:一个明亮的镜面反射颜色,无漫反射颜色是金属明显的视觉特征。相对的,钻石,最为一种最明亮的非金属,在0°的时候,其反射率只有17%,而大多数非金属的反射率都低于这个数值。少数的材料具有20%-40%的反射率,这个区域几乎是一个无人区。这些材料是典型的半导体,与当前的处理效果不同。同样的情况对于那些反射率小于2%的材料也会出现(如水)。事实上,排除金属,宝石和晶体,任何你可能在实验室之外看到的材料都有很小的F(0)值,大约在2%到5%之间。

法线分布项
在大多数表面上,微表面的方向并不是一致分布的。不过微表面的法线方向有很大的比率与宏观表面的方向想接近。精确的表面发现分布通过“微表面发现分布函数”(microfacet normal distribution function)来进行描述,记为  D(m) ,与 F()不同,  D()的数值并没有被限制在0-1之间(不过要求为非负数),它可以是任意大小的数值。同时  D(m)也不是一个与光谱有关的函数,而是一个标量值。在BRDF的各项中, D()由方向 h决定,用料检测活动微表面的集中程度(对于哪些h=m的微表面)。这就是法线分布项在方程4中表现为 D(h)的原因。
函数 D(h)决定镜面高光反射的尺寸、形状和亮度。在现有的图形学文献中提到了多种不同的法线分布函数,这些函数大都是类高斯函数(Gaussian-like),只是具有不同的“粗糙度”和方差函数。随着表面粗糙度降低,微表面的集中程度增加,与整个表面法线方向n相接近的微表面法线m增加, D(m)的数值就会变得极高(极限情况为理想镜面,此时m=n)。

Walter et. al. [25] discuss the correct normalization of the distribution function, and give several examples; more examples can be found in other papers [2, 3, 19, 26].

阴影遮罩项
阴影与遮罩项 G(l,v,h)在BRDF的相关文章中也被程为几何项(geometry term)。 G(l,v,m)函数表征在给定法线方向 m,入射光线 l,和观察方向 v之后,微表面可被观察到的概率。在微表面上的BRDF函数中, m h所代替。由于函数 G()表示的是一个概率,所以它的值也是标量的,而且数值被限制在0-1之间。与 D()类似, G()也有很多种解析形式,具体可参考文献【2, 3, 7, 8, 17, 19, 25】。 G()本身并没有为BRDF函数引入新的参数。

In many cases, the shadowing-masking term partially cancels out the (n·l)(n·v) denominator in Equation 4, replacing it with some other expression such as max  (n·l,n·v).

阴影与遮罩项对于BRDF函数的能量守恒特别重要。如果没有这个项,BRDF将会随意的增加比入射光更多的反射光。微表面BRDF的一个关键部分是活动区域(将光线从l反射到v的区域的总和)与总区域(整个宏观表面)的比值。如果阴影和遮罩不进行计算,那么活动区域的面积可能会超过总区域的面积。这显然是非常不合理的,同时会导致BRDF函数的能量不守恒,在某些情况下,会产生一个巨大的数量,具体可参考图25.
基于物理的模型渲染 Physically-Based Shading Models in Film and Game Production

微表面模型
 G()函数和 D()函数的选择是相互独立的。他们可以混合出各种不同的微表面模型。关于BRDF的新论文往往可以被看作是介绍了某种新的 G()函数或 D()函数。
一旦 G()函数和 D()函数被选定,整个BRDF函数就只由参数的值来决定。微表面BRDF函数具有简介的参数形式,一般只由一个RGB值 (cspec) 和一个表示粗糙程度的标量值(在各向异性的BRDF中需要两个粗糙度的数值)来决定。

次表面反射
虽然在很多文献中给出了多种次表面局部反射的模型,最为广泛被使用的依然是琅伯(Lambertian)模型。Lambertian BRDF实际上是一个常数值。Lambertian模型的准确值可以表达为:

fLambert(l,v)=cdiffπ

这里的 cdiff表示漫反射光的部分。 cdiff是一个RGB量,他的R,G,B数值都被限制在0-1之间,数值表示的颜色与一般人感觉的中表面颜色想接近。这个参数一般被称为diffuse color。

Non-Lambertian diffuse terms attempt to model either the trade-off between specular and diffuseterms at glancing angles [2, 3, 17, 24], or the effects of surface roughness at a scale larger than the scattering distance [21].