Chapter 9 – Physically Based Shading 基于物理的着色

9.7 Microfacet Theory(微面理论)

许多BRDF着色模型都基于微观几何面对于反射率的影响的数学分析,其被统称为microfacet theory(微面理论)。这一理论首先由光学研究者提出。在1977年以及1981年,Blinn,Cook和Torrance分别将其引入计算机图形学。这一理论的基础就是将微观几何面模拟为一组microfacet(微面)

这些微小的facet每一个都是一个平面,且拥有一个独立的微面法线m。每一个微面都会根据micro-BRDF fμ(l,v,m)反射光线,所有微面的反射在加总之后形成了表面总体的BRDF。一般我们将每一个微面作为一个理论上完美的菲涅尔镜面,因此我们将使用specular micro-BRDF来模拟物体表面的反射。不过我们也有其他选择,diffuse micro-BRDF能用于模拟局部的subsurface scattering,diffraction micro-BRDF能用于模拟几何光学与波动光学的效果。

微面模型的一个重要的属性是微面法线m的静态分布。我们将通过物体表面的normal distribution function(NDF,法线分布函数)来确定该分布。有些参考书中会将其称为distribution of normals,以避免与Gaussian normal distribution搞混。本章节中我们将使用D(m)以指代NDF。

NDF D(m)表示微观几何表面范围内微面的法线的静态分布。对D(m)在整个微面进行积分能够求出微面的范围。不过,一般我们会对D(m)(n·m)进行积分,也就是D(m)在宏观表面上的投影,这样我们能够使得宏观表面的区域等于1,如下图左侧部分所示。我们可以看到对D(m)(n·m)进行积分,微面被投影到了宏观表面所在的平面上,而宏观表面所占的区域(因为下图为侧视图,所以使用长度表示)为1。

换句话说,D(m)(n·m)的投影将被标准化:

上述积分是对整个球体进行积分,所以我们使用字母Θ而不是之前的小节所使用的Ω,该字母代表半球。在实践中,图形学所使用的微观结构模型大多为heightfield(高度层),这意味着如果m位于Ω范围之外,那么D(m)=0。但是上述积分等式则适用于非heightfield的微观结构。

为了积分等式更泛用,我们将微观表面和宏观表面投影到一个垂直于任何视野方向v的平面:

上述两个等式中我们并未将点乘的结果clamp至0。这是因为,在上图的右侧部分,我们对D(m)(v·m)进行积分,微面被投影到了一个垂直与向量v的平面,同时我们可以求出宏观表面在该平面的投影,其为cosθo或者(v·n)。当多个微面的投影发生重叠时,位于背面的面将被抵消。

NDF更像是微面法线的“柱状图”。如果更多的微面法线指向某一方向,那么NDF将会在该方向上有较高的值。大多数的表面其在宏观表面的法线n的方向上会有较高的NDF值。在第八小节中我们将会学习一些在渲染中所使用的NDF模型。

现在我们再来看一下上图中的右侧部分。虽然有许多微面会在投影平面重叠,但是我们最终需要用于渲染的只有那些可见的微面,例如,距离camera最近的微面。这意味着,我们可以用另一种方法将投影后的微面区域与投影后的宏观几何面区域进行关联:所有可见的微面的投影区域的总和需要等于宏观表面的投影区域。而我们可以使用masking function G1(m,v)来实现这一计算,其只会返回在视野向量v的方向上“可见的”微面的法线m

该积分等式的意义如下图所示。不同于之前的积分等式,我们将向量v与向量m的点乘进行了clamp。因此背面的微面都是不可见的,所以这些微面并不会进行计算。而G1(m,v)D(m)的乘积是distribution of visiable normals(可见法线的分布)

基于一个给定的微面法线分布D(m),有无限多的masking function能够满足上述等式的限制条件。这是因为D(m)并没有确定微观表面的法线,其只是告诉我们在一定的范围内有多少法线会指向某一个方向。

虽然在过去的几年中提出了不同的G1,但为了现在行业内几乎都在使用由Heitz提出的一种方法。Heitz以Smith masking function为基础,而该函数则是Gaussian normal distribution的延伸,之后被沿用至任意的NDF中。在Heitz的论文中所有的masking function,只有Smith function以及Torrance-Sparrow “V-cavity” function遵循上述等式,同时在数学上是成立的。其论文还证明了Smith function相较于Torrance-Sparrow function更接近微观面的随机性。同时,Smith masking function是唯一一个masking function能够同时满足上述等式和normal-masking independence(法线遮罩独立)。这意味着只要微面朝向camera,那么m的方向并不会影响G1(m,v)的值。Smith G1函数如下:

上述等式中的χ+(m·v)意义如下:

上述等式中的Λ函数会随着NDF的变化而改变。基于一个NDF来求出Λ的过程,大家可以参考Heitz的论文Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs

但是Smith masking function仍旧有一些不足。从理论上来说,该函数的要求并不符合实际表面的结构,有时可能并不可能实现。从实践的角度来看,对于随机表面该函数较为准确,但是如果物体表面法线方向与masking有这较强的联系,例如上一小节末尾处我们所展示的凹凸表面,那么该函数的准确性会降低。尤其是对于那些物体表面有着重复性的结构(例如,前文提到的纺织物)。但是目前为止,Smith masking function仍旧是我们的最佳选择。

基于微观几何面的属性,包括micro-BRDF fμ(l,v,m),法线分布函数D(m),遮罩函数G1(m,v),最后宏观表面的BRDF等式为:

上述等式将以法线n作为中心的半球Ω进行积分,这样就能避免受到物体表面下方的光线的影响。同时,上述等式并未使用masking function G1(m,v),而是使用了joint masking-shadowing function(遮罩阴影函数)G2(l,v,m)。该函数是G1的延伸,其要求微面在视野向量v以及光线向量l的方向上都是可见的。通过使用G2,上述等式所求得的BRDF将同时考虑masking与shadowing,但是其并不能计算微面与微面之间的互相影响(例如,微面之间的互相反射)。因此,这一类BRDF看上去会偏暗,在之后的两个小节我们将学习一些方法以缓解该限制。

在Heitz的论文中,其讨论了几种G2函数。最简单的方法是将masking与shadowing的结果相乘,如下所示:

上述等式就等于我们假设了masking与shadowing是不关联的。但是,实际上这两个因素是关联的,而这一假设将会使得BRDF的结果更暗。

我们举一个极端的例子,假设视野方向和光线方向是相同的。那么此时的G2应该等于G1,因为所有的微面都是可见的(也就是说G1(l,m)=1),但是如果根据上述等式,G2将等于(G1)2

如果微观表面是heightfield,其也是渲染所常用的技术,那么只要当向量v与向量l的相对夹角Ф等于0°,那么G2(l,m,v)应该等于min(G1(v,m),G1(l,m))。关于相对夹角Ф的概念,请参考第三小节。因此,对于masking与shadowing的关联性,我们可以求出以下等式:

上述等式中的函数λ(Ф)会随着角度Ф的增加而增加,其范围是0到1。Ashikhmin与Ginneken分别提出了下列两个公式:

除了光线向量与视野向量在方向上的相关性,还有一个原因使得物体表面上某一点的masking与shadowing是相关联的。它们都与该点基于剩余平面的高度差有关。如果该点较低,那么masking的可能性就会增加,其同样适用于shadowing。如果我们使用了Smith masking function,那么我们可以通过Smith height-correlated masking-shadowing function来求出它们的关联性:

Heitz还提出了结合方向与高度的关联性方程:

上述等式中的λ(v,l)类似于前文中的λ(Ф)。

在这些选择中,Heitz建议我们使用Smith height-correlated函数,因为其开销与第一种完全不关联的函数相差不大,但是准确性高很多。该函数也在实践中被广泛运用,当然也有一些游戏会使用第一种非关联的函数。

一般来说,在渲染中我们并不会直接使用之前列举的微面BRDF函数。而我们将会把它作为参考求出一个相近的(或者说模拟)micro-BRDF fμ。在下一小节中我们将为大家举出一个例子。

留下评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据