【EGSR 2007】Microfacet Models for Refraction through Rough Surfaces - GGX

今天介绍的是2007年EGSR上的文章,这篇文章里提出的BRDF模型就是著名的GGX模型,这里是原文链接。

摘要


微表面模型在粗糙表面上的反射光照计算已经被证明是非常成功的,而本文则尝试将微表面模型的应用扩展到表面穿透光照计算(transmission)上:通过比对模型结果与实测数据,提出了一种新的微表面分布函数D以及阴影遮罩函数G的公式模型。此外,考虑到表面穿透包含两次介质切换,因此需要一种比较好的importance sampling方法,这里同样对这个问题进行了讨论。

1. Introduction


皮肤,毛玻璃(etched glass)等众多的材质都需要关心穿过材质表面的光线对于输出颜色的影响,对于光滑表面而言,可以直接通过Snell折射定理计算出相关数据,而对于粗糙表面而言,目前并没有一个PBR的模型可供使用。

本文借用微表面模型的理论知识,给出了一种用于模拟光线穿过粗糙表面(如毛玻璃)后表现的通用BSDF模型,并详细讨论了这个模型中各个函数成分(如D,G等)的选取策略。

经过与真实表面实测数据的比对,验证了本文模型的有效性。粗糙表面透射存在很多有意思的特征,比如相对于光滑表面而言,其输出光强的峰值会发生一个较大的偏移(偏向grazing角度,有点类似粗糙表面中的off-specular(非镜面)反射峰值表现),微表面模型可以很好的复刻与预测这类特征。同时,本文还给出了一种全新的微表面分布模型,即GGX模型,这个模型在很多材质上的表现要优于以往的Beckman分布模型。

2. PreviousWork


Cook & Torrance基于光学理论([TS67])将微表面模型引入到图形学中([CT82]),目前是粗糙表面光照反射计算的主要模型,能够模拟出非常逼真的反射效果。

Ward [Lar92]对Cook & Torrance模型进行了简化,并将其扩展到各向异性材质的反射计算中,同时还给出了一种在所给模型上完成采样计算的方法。Beckman对这个方案的通用性进行了扩展,不过其给出的采样权重还不够准确,[Wal05]对采样权重计算理论进行了修正。此外,Lawrence et al. [LRR04]给出了另外一种使用fitted separable approximations 的采样方法。

Schlick [Sch94]通过有理数近似的方法对Cook & Torrance模型的实现成本做了大幅精简,同时还给出了一种目前广为传播的菲尼尔公式近似模型。

Ashikhmin & Shirley [AS00]通过Phong微表面分布函数给出了一种各向异性反射模型,同时还对此前业界所使用的importance sampling方案进行了修正,之后发表的[APS00]文章又进一步提出了一种任意微表面分布函数下的能量守恒模型,不过可惜的是这个模型公式包含了积分项,且没有闭合解。

关于阴影遮罩项G的模型有很多研究成果,本文采用的是原本为高斯表面设计的Smith 模型([Smi67],后来被[Bro80,BBS02]在通用性上做了扩展,可以推广到任意的微表面分布函数上)。

符号约定

本文会使用加粗的小写字母表示单位向量或者方向,而使用头顶带箭头的字母表示未归一化的方向或向量。有时候也会使用球面极坐标来表示方向,如,其中极度角表示的永远是方向与材质宏观表面法线之间的夹角,而纬度角则来源于与垂直的规范化方向。

3. Microfacet Theory

BSDF(Bidirectional Scattering Distribution Function)指的是沿着输出方向的散射radiance与从方向入射的irradiance的比值,用表示,如果只考虑反射或者透射的话,那么有BRDF()以及BTDF()两项子函数,有如下的关系:(这个只能算是简化模型,实际情况比这个复杂,比如次表面散射等在此处都未考虑)。

如Figure 4所示,微表面模型中,一个具体的微表面通常都是用一个简化的宏观表面来代替的,这个宏观表面对应的BSDF会在总体特征上与微表面的BSDF保持一致(即在远处看起来应该要是一样的)。这种做法的假设是微表面细节过于微小,因而在近距离位置的差异基本可以忽略不计。通过这种做法,就可以直接使用经典的几何光学理论来对BSDF进行建模,且只考虑单次散射以对问题进行简化,而光线的波动效应(如衍射等)以及两次以上的表面交互散射则直接忽视或者通过其他的方法单独模拟。

微表面模型并没有哪种具体的模型公式能够满足所有的应用情景,因此通常都是用一种通用性的BSDF公式来表示,且使用两个统计特征函数来对模型进行描述:即微表面分布函数D以及阴影遮罩函数G。

3.1. Microfacet Distribution Function, D

微表面法线分布函数表示的是微表面法线在微表面上的分布统计规律。假设是一个以微表面法线为中心的极小固体角,而是极小宏观表面积,那么则是法线分布位于指定固体角范围内的微表面的所对应的面积总和,这是一个密度函数,其单位为。一个良好的法线分布函数应该要具备以下几个属性特征:

  1. 密度值非负:
  2. 所有微表面面积之和不小于宏观表面面积:
  3. 对于任意的投影方向,微表面投影面积与宏观表面投影面积应该是相等的:,当的时候,有 。
3.2. Shadowing-Masking Function, G

如Figure 5所示,双向阴影遮挡函数G表示的是某个法线为的微表面对于输入方向以及输出方向都可见的比例。通常来说,除非材质表面极其粗糙,或者从grazing角度进行考察,一般阴影遮罩函数对于BRDF的形状的影响微乎其微,这一项的添加更多是基于能量守恒的考虑。

一个好的阴影遮罩函数应该要具备以下几个属性特征:

  1. 取值范围在[0, 1]之间:

  2. 应该满足光路可逆原则:

  3. 从宏观表面的前方是看不到微表面的背面的,反之亦然:

阴影遮罩函数对应的是微表面的几何特征,不同的表面有不同的几何特征,因此没有一种通用的确切函数公式予以描述。通常是通过不同的统计模型加上一些简化假设来近似模拟,详情可以参考后面第5章以及附录A中的内容。

3.3. Macrosurface BSDF Integral

宏观表面的BSDF应该与微表面各方向散射特征的总和相一致,因此可以通过对微表面的所有可见部分的散射贡献(通过微表面的BSDF,进行表达)进行积分或者累加来得到。对于每个微表面法线而言,D跟G的乘积可以用于表示对应法线方向可见的微表面的面积。不过在做这些处理之前,还需要进行一些修正计算:比如先将输入的宏观表面的irradiance转换到微表面空间,之后将微表面输出的radiance转换到宏观表面空间——之所以要做这些修正计算,则是因为不论irradiance还是radiance,其定义都是与表面的投影面积相关的。根据前面的描述,给出宏观表面的BSDF为:

为了计算这个积分,就需要知道 等三项数值,如果假设表面时局部光滑的(locally smooth),那么就等于理想(ideal)镜面反射与理想折射(根据snell定律计算)的总和经过菲涅尔项F调制之后的结果。

4. Microsurface Specular BSDFs

微表面有很多可用的BSDF模型,然而大多数的BSDF模型都会假设微表面上的反射是理想的镜面反射(毕竟都拆成微表面了,就没有必要再考虑微表面上的粗糙度了,不然就继续拆下去好了),而本文的BSDF模型会以理想的镜面反射与理想的折射作为假设条件。

在一个通用的BSDF散射模型中:从方向入射的光线经过表面spcular反射之后会从方向射出,且出射光线能量与入射光线能量之比为;其中都是的函数,o是观察方向,m是微表面的法线。用公式来表示如下:

其中是狄拉克(Dirac)delta函数,当值为无穷大,其他时候值为0(狄拉克函数的定义可以参见维基百科)。从数学的角度而言,delta函数并不能算是一个函数,只能算是一个广义函数(generalized function),这种函数通常会跟一个测度函数measure(全称是狄拉克测度Dirac Measure)相关联,之后通过与measure相关的积分来定义delta函数——对于任意的函数,都有如下关系:

为了使用前面3.3节中的宏观BSDF模型,这里就需要使用微表面法线以及对应的固体角measure来对之进行表达。这里先假设对于任意给定的输入方向以及输出方向,这里最多只有一个微表面法线能够实现能量从到的传播,这个满足条件的微表面法线用来表示,并称之为half-vector(即正好处于跟的中间的向量)。这里就可以通过跟之间的delta函数来对BSDF公式进行改写。不过由于delta函数是以积分形式来定义的,如果修改其对应的measure函数的话,就需要对增加一个修正因子来维持积分结果的恒定。

用half-vector对specular反射输出方向s进行替换的话,本节开头(公式2)中的BSDF就可以改写成如下的形式:

其中表示的是跟之间变换(使用固体角measure,啥意思?即,使用前面公式3给出的作为测度函数)的雅克比矩阵的行列式的绝对值,出于简化考虑常常将之直接称之为雅克比。

雅克比描述的是两个变量空间()扰动之间的振幅关系,这个值可以通过在上面施加一个小量扰动,之后通过计算上的扰动来得出:

即用逼近于0时的微分比值来给出(可以看成是函数的导数)。固体角通常会与单位球面上的一块面片(正如弧度对应于圆上的一段圆弧一样)相对应,而当固体角足够小的时候,这个面片也可以近似看成是一个平面。在这种近似下,就可以如Figure 6跟Figure 7所示,直接使用几何方法对反射与折射进行计算。在方向上给定一个无穷小的固体角,其数值正好等于以的起点为球心的单位球面上的无穷小的一块面片的面积,将这块面片投影到以的起点为球心的单位球面上,投影区域的面积就正好等于的数值,而两者之间的比值就正好等于雅克比。此外,Sta01还给出了一种通过代数的方式计算雅克比的方法。

4.1. , Ideal Reflection

对于理想反射而言,这里使用(对于透射计算的话,这里的half-vector就会使用表示)表示half-vector单位向量,而表示的则是非归一化的half-vector。这里为了能够处理正反两面的情况,会在标准的反射计算公式上加上的符号处理,反射即雅克比计算公式给出如下:

Figure 6给出了雅克比的几何推导方法,其中用到了如下的关系:

当时,反射表现就属于未定义状态,因为这种情况下只会导致投射而不会存在反射。对于反射而言,这里将设置为菲涅尔项F,根据前面公式4可以推导出最终的BRDF公式:

这个公式对于表面上的任何一面上的反射都是成立的。而由于雅克比项的存在,使得会随着降低而增加,而这就是微表面模型所预测的当入射方向与表面法线垂直的时候,非specular反射达到峰值(off-specular reflection peaks),而这个结果也跟实际表现是一致的。

4.2. , Ideal Refraction

对于光照透射的计算,就需要知道表面两侧材质的IOR,分别假设输入材质与输出材质的IOR为以及,那么根据snell定律,在完美折射的情况下,可以根据入射光线的方向计算出折射光线的方向,同样,这里也可以将snell定律用在half-vector上:

输入与输出向量在与微表面法线方向相垂直方向上的分量的幅度之比等于与的夹角的正弦之比,而根据snell定律,这两个分量在上面的公式中刚好抵消,因此则只包含与平行方向上的分量。如果不考虑处于表面同一侧(什么情况下会出现这种情况?)的情况,那么当且仅当遵守以为法线的snell定律的时候,才会有。上面公式中之所以要带一个负号,是因为表面法线的方向通常是指向IOR较小的材质(如空气)(没太懂,为什么因为指向的是小IOR材质,就要带负号?如果这里考虑的只是从空气向其他介质的折射的话,那么加个负号是可以理解的,而如果是从其他介质射向空气,那么这个负号不就导致了吗)。如果材质两边的IOR是相同的,这个折射就失去了意义,因此这里假设材质两边媒介的IOR是不同的,那么对应的雅克比就可以定义成:

如果不考虑吸收作用的话,那么折射能量比就等于,仿照公式4,折射的BSDF可以写成如下形式:

可以看到,这个BTDF是不遵守光路可逆原则的,实际上,这个公式是满足如下关系的:,这是折射界面的一个广为人知的属性([Vea96]),而如果想要恢复光路可逆的表现,在计算中就不要直接取用radiance,而是取用。跟反射一样,折射的BTDF也会随着入射角的增加而增大从而在grazing角度处达成off-specular refraction。

5. BSDF for Rough Surfaces

反射BSDF以及折射BSDF都有了,现在将之代入到公式1中,就可以得到宏观表面的反射以及折射BSDF :

其中:

这个公式跟Cook-Torrance给出的公式非常相似,区别仅仅在于这里的分母中的系数是一个4,而Cook-Torrance公式的分母系数则是一个。不过原文中D的归一化方法跟这里的有所不同,而近期的文章([Sta01])则更倾向于使用4作为分母的系数。

折射BSDF为:

到此为止,绝缘体微表面模型上的反射与折射的BSDF的基本公式就算是推导完成了。

5.1 Choosing F, D and G

前面给出的BRDF以及BTDF公式中的D,F,G都还是泛式指代,并没有一个具体的公式,因而无法直接实施。

F表示的是菲涅尔项,这是最好理解的,在相关文献中也能找到确切的计算公式。这一项在法线方向上的数值较小(如对于IOR为1.5的玻璃而言,这个值是0.04),而在grazing角度处的数值较大接近于1(这个现象也叫做全反射),绝缘体在非偏振光照下的一个常用的菲涅尔公式给出如下([CT82]):

注意,如果g是一个虚数,这个时候的F = 1,对应的就是全反射时候的情况。关于F还有一些简化计算公式,详情参考对应的文献([CT82], [Sch94])。

D项有很多的模拟公式,本文只对其中的三种进行讨论:Beckmann,Phong以及GGX。

  • Beckmann分布方法是建立在微表面粗糙度符合高斯分布的假设的基础上的,在光学理论中用得较多。

  • Phong分布方法则是图形学界给出的一个经验公式,如果宽度参数挑的好的话,其效果可以逼近Beckmann分布方法。

  • GGX分布方法则是本文为透射所提出一个全新的微表面分布模型。

阴影遮罩函数G跟微表面分布函数D以及表面的细节有着极强的关联,因此通常很难给出一个确切的模拟公式。Cook-Torrance使用的是一个在1D模型上推导出来的一个能量守恒G模型,而这里由于这个模型在一阶微分上的不连续以及一些其他现实材质所不具备的一些表现,因此并不推荐使用这个模型,这里使用的是Smith的阴影遮罩近似模拟方法([Smi67]),这个方法起初是为高斯粗糙表面而设计的,后来被其他研究者扩展到任意的粗糙表面上,可惜的是,在一些情况下,这个模型对应的积分函数并没有闭合解。

Smith G模型将阴影遮罩函数拆分成两个相互独立的之积:

是从微表面的分布函数D推导出来的,在附录A中有详细介绍。实际上Smith给出了两个阴影遮罩函数,其中一个用于微表面法线m已知的情况,而另一个则是在m不知道的情况下,直接对所有可能的法线m对应的阴影遮罩结果进行平均来求取。虽然后面一种方法在现存的文献中使用较多,然而在微表面模型中,由于微表面的法线m是已知的,因此这里更倾向于使用前一种阴影遮罩模型。

5.2. Specific Distributions and Related Functions

下面来给出Beckmann,Phong以及GGX的分布函数D,Smith阴影遮罩函数以及采样公式。采样公式用于从两个归一化的随机变量以及(这两个随机变量的值域均为[0, 1))生成微表面法线,生成任意微表面法线的概率函数公式给出如下:

用分别表示到之间的夹角,表示正向特征函数(positive characteristic function,a > 0时为1,其余时候为0)。

Beckmann 分布函数,宽度参数用表示:

在的公式中,第一项保证了三个方向是处在同一边的(即保证v跟m,n都处于表面上的同一侧),由于这里引入了一个误差函数erf:

因此使得这个公式计算的代价非常高昂。Schlick([Sch94])基于另外一个阴影遮罩公式给出了一个代价较小的近似模型。而本文则对上面的Smith 遮罩公式给出了如下面公式所述的近似模型,这个模型的相对误差不超过0.35%:

对进行采样的公式为:

Phong分布函数,指数参数用表示:

如果设定的话,那么Phong分布函数跟Beckmann分布函数就非常相似了,尤其是在宽度参数较小的时候(见Figure 8),这就是为什么经验式的Phong分布函数会有如此长的寿命的原因了吧。由于Phong分布与Beckmann分布的相似性,在实际使用的时候到底选用哪一个就看具体的计算消耗了。不过可惜的是,对于Phong分布而言,计算Smith 的积分公式并没有闭合解,而这里基于Phong分布与Beckmann分布的相似性以及一些数值测试,这里推荐直接使用前面Beckmann的计算公式(公式22),不过a的计算公式有所不同,这里使用,之后对进行采样的公式给出如下:

GGX的分布函数,宽度参数用表示:

GGX分布的拖尾比Beckmann模型的以及Phong模型的要长很多,因此阴影程度更强,的采样公式给出如下:

5.3. Sampling and Weights

为了方便对BSDF进行采样,这里先假设入射光方向为,散射后的出射光方向为,入射光与出射光能够匹配模式(这句话如何理解?)。通常来说,一个微表面模型的BSDF是不能通过精确采样得到的,这里给出的方法是先采样出微表面的法线,之后使用这个法线来生成散射方向为的出射光线。为了计算上述样本的权重,这里还需要一个计算对应采样方向的概率密度函数,最终的权重函数(概率越大,权重越低)给出如下:

在这里为了缩小所生成的权重的方差,这里需要对样本进行选择。

如果我们按照某个概率函数来对法线进行生成,之后根据这个数据计算出对应的散射方向,之后对应的概率函数将需要包含half-vector的雅克比(为啥?):

如果使用5.2节介绍的采样公式的话,那么此时法线计算的概率函数。之后就可以计算出对应的菲涅尔项,之后用计算所得的结果计算折射与反射光照,因此这里也需要将菲尼尔项加入到概率函数中,对于反射而言,散射方向给出如下:

对于折射而言,其透射方向给出如下:

对于折射跟透射的任何一种情况而言,散射方向的权重计算公式:

入射方向与法线方向接近平齐(垂直入射)是一个非常好的采样点,grazing入射角度(这里指的是与宏观表面相平齐)实际上也是一个很好的采样点,不过其权重可能会非常大,根据所选取的D函数与G函数的不同,这个数值在数百到数百万之间波动,这种高权采样点实际上是不太好的(在微表面与宏观表面相互垂直的时候,grazing角度下的入射光线所对应的很小,这种时候的效果极其差),因为可能会导致一些建立在低权重假设基础上的一些方法失效(比如大多数粒子tracing方法就存在这种假设)。通过对采样分布函数进行轻微修改,可以避免这个高权问题。比如,对于Beckmann分布而言,可以通过增加分布函数的宽度的方式,来将最大采样权重降低到4左右。

6. Measurements

为了验证散射模型的效果,这里设计了一套测试方法,下面给出拟合的一些结果。

7. Conclusions

本文对微表面理论进行了一番深入介绍,并提出了对应的BTDF模型,且用数据验证过此模型的有效性,之后还给出了一种新的微表面分布模型GGX,并证实了在部分材质上,这个模型比标准的Beckmann模型有着更好的拟合结果。此外,本文还对如何实施高效的importance sampling进行了介绍。

Appendix A: Deriving the Smith Shadowing, G1

附录A介绍了如何从分布函数D中推导出Smith阴影遮罩函数G1,详情请参考对应的原始文献。

假设将微表面看成是宏观表面的一个随机高度场,并用两个概率分布函数来表示,其中表示高度的概率分布,而表示微表面的2D斜率(p,q,分别对应于表面的垂直于平行方向)的概率分布。可以是任意的概率分布函数,而则需要跟随分布函数D来做相应的关联:

其中的cos项对应的是测试数据的变化(如固体角到斜率的变化)以及到宏观表面的投影。对于Beckmann分布函数而言,很容易知道实际上是一个标准的2D高斯分布函数(使用)。斜率q的一维分布函数给出如下:

假设表示的是微表面上一个在方向上可以看到的,高度为的随机点,其中是可见射线的斜率,参考Figure 16。

你可能感兴趣的:(【EGSR 2007】Microfacet Models for Refraction through Rough Surfaces - GGX)