SZ神庙

从此开始,遁入幻想

2019年8月12日

秘术记闻>

PBR理论体系整理(二):各向异性

上一篇文章中我们介绍了PBR的一些基本理论。我们介绍的BRDF都是各项同性的,这篇文章我们来讨论各项异性的BRDF及其应用。

一.概念

一个BRDF函数\(f_r\),如果它绕法线旋转之后形式不变,则称该BRDF是各项同性(isotropic) 的。否则,则称该BRDF为各向异性(anisotropic) 的。即,给定任意绕法线的旋转变换\(R\),如果\(f_r\)满足

$$
f_r = \frac{dL_o(\omega_o)}{dE(\omega_i)} = \frac{dL_o(R\omega_o)}{dE(R\omega_i)}
$$

则\(f_r\)为各项同性的。如果不满足,即存在一个\(R\)使得上式不成立,则\(f_r\)为各项异性的。

各向异性来源于材质表面的微面元分布具有方向性。典型的具有各向异性的材质如头发、CD等,如图所示。图片来自Unite 2018上《崩坏三》的技术分享:

20190811164955-image.png

二. NDF的形状不变性(shape invariance)

各向异性与微面元的表面法线分布有着密切的联系。因此在推导各向异性BRDF的形式之前,我们需要对NDF进行更进一步的讨论。

在之前的讨论中,我们都是把NDF看成关于微面元法线方向\(\mathbf{h}\)和表面法线方向\(\mathbf{n}\)的函数。事实上,我们也可以从另一个角度看待NDF,即把其看成关于微面元斜率分布的函数。如下图所示,左侧的微面元对应的斜率分布函数如右图所示。图片来自Heitz 2014[1]。

20190804135040-image.png

拉伸微面元的效果相当于对斜率分布函数进行倒数拉伸,如下图所示。图片同样来自[1]。

20190804135319-image.png

假设我们将微面元看成高度场\(h\),则斜率为\(\nabla h\)。设微面元\(m\)处法线为\((x_m,y_m,1)\),则可将斜率分布函数记作\(P(x_m,y_m)\),那么法线分布函数可表示为

$$
D(\omega_m) = \frac{P(x_m,y_m)}{\cos^4\theta_m}
$$

现在我们考虑粗糙度参数\(\alpha\),则\(P\)写作\(P(x_m,y_m,\alpha)\)。如果改变\(\alpha\)的值相当于将\(P\)作拉伸而不改变\(P\)的形状,则称该NDF具有形状不变性。此时\(P\)可以写成如下形式

$$
P(x_m,y_m,\alpha) = \frac{1}{\alpha^2}f(\frac{\sqrt{x_m^2+y_m^2}}{\alpha}) = \frac{1}{\alpha^2}f(\frac{\tan\theta_m}{\alpha})
$$

可以推导出,对于任意大于0的实数\(\lambda\),有

$$
P(x_m,y_m,\alpha) = \frac{1}{\lambda^2}P(\frac{x_m}{\lambda},\frac{y_m}{\lambda},\frac{\alpha}{\lambda})
$$

即改变粗糙度仅相当于对P做放缩。

在之前介绍的BRDF中,Beckmann和GGX都具有形状不变性,而Blinn-Phong不具备。

三. 各向异性BRDF

如果斜率\(P\)不是依赖一个粗糙度参数\(\alpha\),而是\(x\)和\(y\)方向上的两个粗糙度参数\(\alpha_x\)和\(\alpha_y\),即\(P\)可以写成如下形式

$$
P(x_m,y_m,\alpha_x,\alpha_y) =\frac{1}{\alpha_x\alpha_y}f(\sqrt{\frac{x_m^2}{\alpha_x^2}+\frac{y_m^2}{\alpha_x^2}})
= \frac{1}{\alpha_x\alpha_y}f(\tan\theta_m\sqrt{\frac{\cos^2\phi_m}{\alpha_x^2}+\frac{\sin^2\phi_m}{\alpha_x^2}})
$$

式中\(\phi_m\)为球坐标系下\(m\)的经度。则有

$$
P(x_m,y_m,\alpha_x,\alpha_y) = \frac{1}{\lambda_x\lambda_y}P(\frac{x_m}{\lambda_x},\frac{y_m}{\lambda_y},\frac{\alpha_x}{\lambda_x},\frac{\alpha_y}{\lambda_y})
$$

即\(\alpha_x\)和\(\alpha_y\)分别控制\(x\)和\(y\)两个方向上的伸缩量。此时,我们称该NDF具有各项异性下的形状不变性。

上述推导表明,如果一个各向同性的BRDF具有形状不变性,那么可以很容易地写出其各向异性的形式。而对于几何遮蔽函数\(G\),推导表明其各向异性的形式和各向同性相同,唯一的区别在于粗糙度参数\(\alpha\)现在计算如下:

$$
\alpha = \sqrt{\cos^2\phi_o\alpha_x^2 + \sin^2\phi_o\alpha_y^2}
$$

称为在出射方向\(o\)上的投影粗糙度

我们将我们在前面文章中讨论过的BRDF的各向异性形式摘录如下。

3.1 Beckmann

$$
D = \frac{1}{\pi\alpha_x\alpha_y (\mathbf{n} \cdot \mathbf{h})^4}\exp(\frac{(\mathbf{n} \cdot \mathbf{h})^2-1}{(\mathbf{n} \cdot \mathbf{h})^2}(\frac{\cos^2\phi_h}{\alpha_x^2}+\frac{\sin^2\phi_h}{\alpha_y^2}))
$$

式中我们需要计算半角向量的经度\(\phi_h\)。这需要确定切线的方向。设切线方向为\(\mathbf{t}\),副法线方向为\(\mathbf{b}\),那么我们可以按以下公式计算\(\cos\phi_h\)和\(\sin\phi_h\):

$$
\sin\theta_h = \sqrt{1-(\mathbf{n} \cdot \mathbf{h})^2} \\
\cos\phi_h = \frac{\mathbf{t} \cdot \mathbf{h}}{\sin\theta_h} \\
\sin\phi_h = \frac{\mathbf{b} \cdot \mathbf{h}}{\sin\theta_h}
$$

代入后整理得到

$$
D = \frac{1}{\pi\alpha_x\alpha_y (\mathbf{n} \cdot \mathbf{h})^4}\exp(-\frac{1}{(\mathbf{n} \cdot \mathbf{h})^2}(\frac{(\mathbf{t} \cdot \mathbf{h})^2}{\alpha_x^2} + \frac{(\mathbf{b} \cdot \mathbf{h})^2}{\alpha_y^2}))
$$

3.2 GGX

$$
D = \frac{1}{\pi\alpha_x\alpha_y\cos^4\theta_h(1+\tan^2\theta_h(\frac{\cos^2\phi_h}{\alpha_x^2}+\frac{\sin^2\phi_h}{\alpha_y^2}))^2}
$$

整理后可得

$$
D = \frac{1}{\pi\alpha_x\alpha_y(\frac{(\mathbf{t} \cdot \mathbf{h})^2}{\alpha_x^2} + \frac{(\mathbf{b} \cdot \mathbf{h})^2}{\alpha_y^2} +(\mathbf{n} \cdot \mathbf{h})^2)^2}
$$

UE4中相关代码如下:

由于Blinn-phong不具备形状不变性,因此没有对应的各向异性形式。

四.其他非物理的各向异性BRDF

4.1 各向异性Blinn-phong

虽然Blinn-phong不具备形状不变性,无法据此推导出各向异性形式,不过,Unity Community Wiki给出了一个Blinn-phong的各向异性shader,代码如下:

其主要思路是使用扰动过的法线来计算高光:

这一思路在2006年Siggraph Course上Hoffman等人也提到过[2],不过他们是直接使用切线来代替法线进行高光计算。而sin等项可以使得高光呈现环状:

4.2 Ashikhmin-Shirley BRDF[3]

$$
f_{spec} = \frac{\sqrt{(n_u+1)(n_v+1)}}{8\pi}\frac{(cos\theta_h)^{n_u\cos^2\phi_h+n_v\sin^2\phi_h}}{(\mathbf{h} \cdot \mathbf{v)} \max(\cos\theta_i,\cos\theta_v)}F(\mathbf{h} \cdot \mathbf{v})
$$

式中\(n_u\),\(n_v\)分别是切线和副法线方向上的光泽度值,\(F\)是Schilick-Fresnel项。该BRDF尝试为Blinn-Phong提供一个有一定物理依据的各向异性形式。通过调节\(n_u\)和\(n_v\)的值可以控制高光的形状,如下图所示。下路来自论文[3]。

20190811163857-image.png

五.总结

本文简要地描述了各向异性BRDF的基本理论,并摘录了部分基于物理的和非物理的BRDF函数。可以看到,基于切向量的高光计算是各向异性BRDF的重要特点,这是和各向同性BRDF的重要区别。

参考文献

[1]Heitz, Eric. "Understanding the masking-shadowing function in microfacet-based BRDFs." (2014).

[2]Hoffman, Naty, J. Kautz, and D. Baker. "Physically based reflectance for games." International Conference on Computer Graphics and Interactive Techniques: ACM SIGGRAPH 2006 Courses. Vol. 2006. 2006.

[3]Ashikhmin, Michael, and Peter Shirley. "An anisotropic phong BRDF model." Journal of graphics tools 5.2 (2000): 25-32.