9.6 使用Microfacet理论的粗糙度 - Physically Based Rendering From Theory To Implementation(PBRT)

Physically Based Rendering From Theory To Implementation

翻译:https://pbr-book.org/4ed/Reflection_Models/Roughness_Using_Microfacet_Theory

总目录: Physically Based Rendering From Theory To Implementation - 基于物理的渲染从理论到实践第四版原书翻译

9.6 Roughness Using Microfacet Theory 使用Microfacet理论的粗糙度

前面关于导体bxdf和介质bxdf的讨论只考虑了完美的镜面情况,在这种情况下,材料之间的界面被假设为理想的光滑,没有任何粗糙度或其他表面缺陷。然而,许多现实世界的材料在微观尺度上是粗糙的,这影响了它们反射或透射光的方式。

现在,我们将使用微面理论对这些BxDF进行泛化,该理论将粗糙表面建模为一组小的表面块,称为微面。这些微面被认为是单独非常小,所以他们不能被相机分辨。然而,尽管它们的尺寸很小,它们可以对散射光的角度分布产生深远的影响。图9.20显示了一个相对粗糙的表面和一个光滑得多的微面表面的横截面。我们将使用术语 macrosurface 来描述原始的粗糙表面(例如,用形状表示)
在这里插入图片描述
图9.20 微小面模型通常由一个函数来描述,该函数给出了微小面法向量 ω m \omega_m ωm相对于表面法向量 n n n的分布。(a)微小面法向量的变化越大,表面就越粗糙。(b)光滑的表面微小面法向量的变化相对较小。

值得注意的是,pbrt原则上已经可以渲染粗糙表面,而无需借助microfacet理论:用户可以简单地创建包含这种微尺度表面变化的高分辨率三角网格,并使用完美的镜面BxDF渲染它们。

  • 存储和射线追踪效率:使用三角形几何表示微尺度粗糙度将需要惊人的三角形预算。存储和射线追踪如此大的场景的开销是令人望而却步的。
  • 蒙特卡罗采样效率:完美镜面散射分布的一个基本问题是它们包含Dirac delta项,这排除了BSDF的计算(它们的f()方法返回零,使得BSDF采样成为唯一支持的操作)。这个方面禁用了光采样策略(章节12.1),这对于蒙特卡罗渲染的效率至关重要。

微面理论的一个关键观点是,大量的微面可以在统计学上有效地建模,因为只有它们的整体反应决定了观察到的散射。(在第11章中,使用了类似的统计物理方法来避免大量小粒子组成参与介质的昂贵存储。)这种方法解决了上述两个问题:基于microfacet理论的BSDF模型不需要显式存储微观几何,并且它们用平滑分布取代了无限尖峰的Dirac delta项,从而实现了更多的平滑分布。

在这里插入图片描述
图9.21 在微面反射模型中需要考虑的三个重要几何效果(a)掩蔽:由于被另一个微面遮挡,感兴趣的微面对观察者来说是不可见的。(b)阴影:类似地,光线无法到达微面。©相互反射:光线在到达观察者之前在微面之间跳跃。

与微小面几何相关的几个因素影响着它们散射光的方式(图9.21):例如,一个微小面可能被遮挡(“掩蔽”)或位于邻近微小面的阴影中,入射光可能在微小面之间相互反射。广泛使用的微小面BSDF忽略相互反射,并使用统计近似和高效的评估程序来模拟剩余的掩蔽和阴影效应。

microfacet模型的两个主要组成部分是面片统计分布的表示和描述光如何从单个microfacet散射的BSDF。对于后一部分,pbrt支持完美的镜面导体和电介质,尽管其他选择原则上也是可能的。给定这两种成分,就可以确定微表面产生的聚集体BSDF。

9.6.1 Microfacet分布

微观几何主要通过表面法线的变化来影响散射,在斯涅尔定律和镜面反射定律中,这是表面中心法线作用的结果。假设光源和观察者相对于微面的尺度距离较远,精确的表面轮廓对遮蔽和阴影的影响较小,我们将在第9.6.2节中研究。现在,我们的重点是微面分布,它代表了表面法线上的粗糙度。

让我们把大曲面上的一个小区域表示为 d A dA dA。将宏表面沿其法线 n n n位移得到相应的微表面 d A μ dA_\mu dAμ,即微表面的垂直投影正好覆盖了宏观表面:

译者注解:
macrosurface翻译为宏观表面,也称为宏表面。它表示宏观角度上的表面特征,一般为平面。
microsurface翻译为微观表面,也称为微表面。它表示微观角度上的表面特征,一般为大量微面的集合。
microfacet翻译为微小面,也称为微面。它表示微观角度上的小平面

∫ d A μ ( ω m ( p ) ⋅ n ) d p = ∫ d A d p \int_{\mathrm{d} A_{\mu}}\left(\omega_{\mathrm{m}}(\mathrm{p}) \cdot \mathbf{n}\right) \mathrm{dp}=\int_{\mathrm{d} A} \mathrm{dp} dAμ(ωm(p)n)dp=dAdp

其中 ω m ( p ) \omega_m(p) ωm(p)指定在p点的microfacet法线。然而,如前所述,跟踪大量微面的方向是不切实际的。

因此,我们转向统计方法:microfacet分布函数 D ( ω m ) D(\omega_m) D(ωm) 给出了microfacet与表面法线 ω m \omega_m ωm的相对差面积。例如,一个完美光滑的表面在原表面法线方向上有一个狄拉克δ峰,即 D ( ω m ) = δ ( ω m − n ) D(\omega_m) = \delta(\omega_m-n) D(ωm)=δ(ωmn)。函数一般用 n = ( 0 , 0 , 1 ) n=(0,0,1) n=(0,0,1)的标准反射坐标系表示。

在方向域中,公式(9.14)提供了一个有用的归一化条件,确保特定的微面分布在物理上是合理的,如图9.22所示。

∫ H 2 ( n ) D ( ω m ) ( ω m ⋅ n ) d ω m = ∫ H 2 ( n ) D ( ω m ) cos ⁡ θ m d ω m = 1 \int_{\mathrm{H}^{2}(\mathbf{n})} D\left(\omega_{\mathrm{m}}\right)\left(\omega_{\mathrm{m}} \cdot \mathbf{n}\right) \mathrm{d} \omega_{\mathrm{m}}=\int_{\mathrm{H}^{2}(\mathbf{n})} D\left(\omega_{\mathrm{m}}\right) \cos \theta_{\mathrm{m}} \mathrm{d} \omega_{\mathrm{m}}=1 H2(n)D(ωm)(ωmn)dωm=H2(n)D(ωm)cosθmdωm=1
在这里插入图片描述
图9.22:给定一个表面上的微分面积dA,microfacet的正态分布函数 D ( ω m ) D(\omega_m) D(ωm)必须归一化,使得该面积以上的microfacet的投影表面积等于dA。

最常见的微面分布类型是各向同性(isotropic)的,这也导致了各向同性的聚集体BSDF。回想一下,当表面绕宏观表面法线旋转时,各向同性BSDF的局部散射行为不会改变。在各向同性的情况下,球坐标参数化 ω m = ( θ m , ϕ m ) \omega_m = (\theta_m,\phi_m) ωm=(θm,ϕm)产生的分布仅取决于仰角 θ m \theta_m θm

相反,各向异性的微表面分布也依赖于方位角( ϕ m \phi_m ϕm)来捕获表面粗糙度的方向性变化。许多真实世界的材料是各向异性的:例如,轧制或铣削的钢表面具有与挤压方向对齐的凹槽。将这类材料的平板绕着表面法向旋转,会产生明显的变化,例如,间接观测到的光源的反射轮廓。拉丝金属是一个极端的例子:它的微面分布从几乎单一的方向到几乎均匀的半球。

多年来,已经提出了许多microfacet分布的函数表示。截断椭球体的几何分析致使Trowbridge和Reitz(1975)提出的最广泛使用的分布之一,其中概念微表面由大量椭球体凸起组成(2007,被称为GGX)。沿着不同的半轴缩放,椭球体可以呈现各种形状,包括球形、煎饼形和雪茄形表面。研究一个具有代表性的椭球表面法线的密度就足够了,它有解析解:
D ( ω m ) = 1 π α x α y cos ⁡ 4 θ m ( 1 + tan ⁡ 2 θ m ( cos ⁡ 2 ϕ m α x 2 + sin ⁡ 2 ϕ m α y 2 ) ) 2 D\left(\omega_{\mathrm{m}}\right)=\frac{1}{\pi \alpha_{x} \alpha_{y} \cos ^{4} \theta_{\mathrm{m}}\left(1+\tan ^{2} \theta_{\mathrm{m}}\left(\frac{\cos ^{2} \phi_{\mathrm{m}}}{\alpha_{x}^{2}}+\frac{\sin ^{2} \phi_{\mathrm{m}}}{\alpha_{y}^{2}}\right)\right)^{2}} D(ωm)=παxαycos4θm(1+tan2θm(αx2cos2ϕm+αy2sin2ϕm))21
( 9.16 ) (9.16) (9.16)

译者注解:
α \alpha α越大, D ( ω m ) D(\omega_{\mathrm{m}}) D(ωm)越小,
表示当粗糙度 α \alpha α越大,则法线在 ω m \omega_{\mathrm{m}} ωm方向分布的概率 D ( ω m ) D(\omega_{\mathrm{m}}) D(ωm)越小。

这个方程假设椭球的半轴与着色框架对齐,两个变量的倒数 1 / α x , 1 / α y > 0 1/\alpha_x,1/\alpha_y >0 1/αx,1/αy>0表示沿两个切向轴应用的缩放变换。当 α x , α y ≈ 0 \alpha_x,\alpha_y \approx 0 αx,αy0,椭球体被拉伸到这样的程度,以至于它本质上坍缩成一个平面,聚集的BSDF近似于一个完美的镜面材料。对于较大的值(例如 α x , α y ≈ 0.3 \alpha_x,\alpha_y \approx 0.3 αx,αy0.3),椭球凸起引入显著的法线变化,模糊了反射光和透射光的方向分布。当 α x = α y \alpha_x=\alpha_y αx=αy时,方位角依赖性消失,模型变为各向同性。

与其他微面分布相比,Trowbridge-Reitz模型的一个特征是它的长尾:微面密度在 ω m \omega_m ωm接近掠射配置时衰减相对缓慢( θ m → 90 ° \theta_m \to 90° θm90°)。这与许多现实世界表面的特性很好地匹配。图9.23是它和另一个常用的microfacet分布函数的曲线图。

在这里插入图片描述
图9.23:各向同性Beckmann-Spizzichino和Trowbridge-Reitz微面分布函数关系图,该函数图为 α = 0.5 \alpha=0.5 α=0.5时的关于 θ \theta θ的函数。注意,在较大的 θ \theta θ值处,Trowbridge-Reitz有较高的尾部。

TrowbridgeReitzDistribution类封装了在蒙特卡罗渲染器中使用这个microfacet分布所需的状态和功能。

// scattering.h
<<TrowbridgeReitzDistribution Definition>>= 
class TrowbridgeReitzDistribution {
  public:
    <<TrowbridgeReitzDistribution Public Methods>> 
    TrowbridgeReitzDistribution(Float alpha_x, Float alpha_y)
    	: alpha_x(alpha_x), alpha_y(alpha_y) {}
  private:
    <<TrowbridgeReitzDistribution Private Members>> 
    Float alpha_x, alpha_y;
};

D()方法是公式(9.16)的相当直接的转录,并对数值边缘情况进行了一些额外的处理。

<<TrowbridgeReitzDistribution Public Methods>>+=  
Float D(Vector3f wm) const {
    Float tan2Theta = Tan2Theta(wm);
    if (IsInf(tan2Theta)) return 0;
    Float cos4Theta = Sqr(Cos2Theta(wm));
    Float e = tan2Theta * (Sqr(CosPhi(wm) / alpha_x) +
                           Sqr(SinPhi(wm) / alpha_y));
    return 1 / (Pi * alpha_x * alpha_y * cos4Theta * Sqr(1 + e));
}

即使有了这些预防措施,在非常低的粗糙度下,往往会涉及无穷大或非数字值的数值问题。最好将这些表面视为完全光滑,并退回到前面讨论的专门实现。effectivelyssmooth()方法测试这种情况下的 α \alpha α 值。

<<TrowbridgeReitzDistribution Public Methods>>+=  
bool EffectivelySmooth() const {
    return std::max(alpha_x, alpha_y) < 1e-3f;
}

9.6.2 掩码函数

单独的微面分布不足以构建有效能耗的(energy-conserving)BSDF。从一个特定的方向观察,只有一个子集的微面是可见的,这必须考虑到避免非物理能量增益。特别是,微表面可能被掩盖,因为它们是背面的,或者由于被其他微表面遮挡而被掩盖。我们的方法再次以统计平均的方式捕捉这种效应,而不是跟踪实际微表面的特性。

回想一下公式(9.15),其中指出微观表面和宏观表面沿表面法线 n n n垂直投影时占据相同的面积。掩蔽函数 G 1 ( ω , ω m ) G_1(\omega,\omega_m) G1(ω,ωm) 可以将这个命题推广到其他投影方向 ω \omega ω。我们将很快讨论 G 1 G_1 G1是如何推导出来的,并且现在简单地假设它的存在。该函数指定从方向 ω \omega ω上可见的具有法线 ω m \omega_m ωm的microfacet的比例,因此所有参数满足 0 ≤ G 1 ( ω , ω m ) ≤ 1 0 \le G_1(\omega,\omega_m) \le1 0G1(ω,ωm)1

在这里插入图片描述
图9.24:从观察者或光源的角度来看,表面上的微分区有面积 d A c o s θ dA cos\theta dAcosθ ,其中 c o s θ cos\theta cosθ 为入射方向与表面法线的夹角。可见微面(粗线)的投影表面积也必须等于 d A c o s θ dA cos\theta dAcosθ;掩码函数 G 1 G_1 G1给出了在给定方向上可见的总microfacet面积除以 d A dA dA的分数。

∫ H 2 ( n ) D ( ω m ) G 1 ( ω , ω m ) max ⁡ ( 0 , ω ⋅ ω m ) d ω m = ω ⋅ n = cos ⁡ θ \int_{\mathrm{H}^{2}(\mathbf{n})} D\left(\omega_{\mathrm{m}}\right) G_{1}\left(\omega, \omega_{\mathrm{m}}\right) \max \left(0, \omega \cdot \omega_{\mathrm{m}}\right) \mathrm{d} \omega_{\mathrm{m}}=\omega \cdot \mathbf{n}=\cos \theta H2(n)D(ωm)G1(ω,ωm)max(0,ωωm)dωm=ωn=cosθ
( 9.17 ) (9.17) (9.17)

我们期望微表面分布 D ( ω m ) D(\omega_m) D(ωm)(在我们的例子中是Trowbridge-Reitz分布)和掩蔽函数 G 1 ( ω , ω m ) G_1(\omega,\omega_m) G1(ω,ωm)在物理上合理的组合应该满足这个方程。不幸的是,microfacet分布本身并没有施加足够的条件来暗示特定的 G 1 ( ω , ω m ) G_1(\omega,\omega_m) G1(ω,ωm);无限的函数族可以满足式(9.17)中的约束。需要更多关于特定表面高度剖面的信息来缩小这一大堆可能性。

在这一点上,通常采取一个近似:如果假设表面上不同点的高度和法线在统计上是独立的,那么从概念上讲,材料从一个连接的表面变成了漂浮在空间中的小表面碎片的不透明汤(soup)(因此得名“微面”)。这种简化的结果是,除了忽略背面面的约束( ω ⋅ ω m > 0 \omega \cdot \omega_m > 0 ωωm>0),遮蔽变得独立于微表面法线 ω m \omega_m ωm。然后可以将掩蔽项移出式(9.17)的积分:

G 1 ( ω ) ∫ H 2 ( n ) D ( ω m ) max ⁡ ( 0 , ω ⋅ ω m ) d ω m = cos ⁡ θ G_{1}\left(\omega \right) \int_{\mathrm{H}^{2}(\mathbf{n})} D\left(\omega_{\mathrm{m}}\right) \max \left(0, \omega \cdot \omega_{\mathrm{m}}\right) \mathrm{d} \omega_{\mathrm{m}}=\cos \theta G1(ω)H2(n)D(ωm)max(0,ωωm)dωm=cosθ
G 1 ( ω ) G_1(\omega) G1(ω)可以重新排列来求解:

G 1 ( ω ) = cos ⁡ θ ∫ H 2 ( n ) D ( ω m ) max ⁡ ( 0 , ω ⋅ ω m ) d ω m G_{1}(\omega)=\frac{\cos \theta}{\int_{\mathrm{H}^{2}(\mathbf{n})} D\left(\omega_{\mathrm{m}}\right) \max \left(0, \omega \cdot \omega_{\mathrm{m}}\right) \mathrm{d} \omega_{\mathrm{m}}} G1(ω)=H2(n)D(ωm)max(0,ωωm)dωmcosθ

这是Smith的近似。尽管进行了相当严格的简化,但已发现它与随机生成的表面微结构散射的蛮力模拟和实际测量结果都很吻合。

方程(9.18)中的积分对于各种常见的微面分布 D ( ω m ) D(\omega_m) D(ωm)选择,包括Trowbridge-Reitz模型,都有解析解。在实践中,掩蔽函数通常用辅助函数 Λ ( ω ) \Lambda(\omega) Λ(ω)表示,该辅助函数是在斜率域中进行掩蔽推导时自然产生的。这有一些我们不久将看到的好处,因此我们采取了同样处理,它与 G 1 G_1 G1 L a m b d a Lambda Lambda关如下:

G 1 ( ω ) = 1 1 + Λ ( ω ) , ( 9.19 ) G_1(\omega) = \frac{1}{1+\Lambda(\omega)},(9.19) G1(ω)=1+Λ(ω)1(9.19)

Lambda() 方法计算这个函数。

<<TrowbridgeReitzDistribution Public Methods>>+=  
Float G1(Vector3f w) const { return 1 / (1 + Lambda(w)); }

在高度不相关假设下,Trowbridge-Reitz分布的 Λ ( ω ) \Lambda(\omega) Λ(ω)解析解为:

Λ ( ω ) = 1 + α 2 t a n 2 θ − 1 2 , ( 9.20 ) \Lambda(\omega) = \frac{\sqrt{1+\alpha^2 tan^2\theta}-1}{2},(9.20) Λ(ω)=21+α2tan2θ 1(9.20)

其中 α \alpha α表示各向同性表面粗糙度。各向异性泛化根据观察得出,各向异性意味着微表面基于 1 / α x 1/\alpha_x 1/αx 1 / α y 1/\alpha_y 1/αy的切向缩放。与x轴或y轴不一致的一维射线 ω \omega ω将观察到介于这些极端之间的不同的缩放量。相关的插值粗糙度为

α = α x 2 cos ⁡ 2 ϕ + α y 2 sin ⁡ 2 ϕ , ( 9.21 ) \alpha=\sqrt{\alpha_{x}^{2} \cos ^{2} \phi+\alpha_{y}^{2} \sin ^{2} \phi} ,(9.21) α=αx2cos2ϕ+αy2sin2ϕ (9.21)

各向异性掩码通过 α \alpha α这个定义重用了各向同性掩码 Λ \Lambda Λ。本章末尾的“参考资料”部分提供了这些步骤的更多细节。Lambda()函数在一般情况下实现了式(9.20)。

<<TrowbridgeReitzDistribution Public Methods>>+=  
Float Lambda(Vector3f w) const {
    Float tan2Theta = Tan2Theta(w);
    if (IsInf(tan2Theta)) return 0;
    Float alpha2 = Sqr(CosPhi(w) * alpha_x) + Sqr(SinPhi(w) * alpha_y);
    return (std::sqrt(1 + alpha2 * tan2Theta) - 1) / 2;
}

在这里插入图片描述
图9.25:用(左)各向异性微面分布和(右)各向同性分布渲染的球体。注意各向异性模型中不同的镜面高光形状。我们在这里使用球体而不是龙,因为像这样的各向异性模型依赖于表面上全局一致的切向量集,以合理的方式定向各向异性的方向。

图9.25比较了在模拟远处环境的光源照射下,具有各向同性和各向异性微面模型的两个球体的外观。

图9.26显示了几个 α \alpha α值的Trowbridge-Reitz G 1 ( ω ) G_1(\omega) G1(ω)函数的曲线图。观察这个函数是如何在大部分区域内接近于1,但在掠角处降为零的,在那里掩蔽成为主导。增加表面粗糙度(即更高的值)会导致函数更快地下降。
在这里插入图片描述
图9.26:Trowbridge-Reitz分布的掩蔽函数 G 1 ( ω ) G_1(\omega) G1(ω)。增加表面粗糙度(更高的 α \alpha α值)会使函数更快地降为零。

9.6.3 遮蔽-阴影函数 The Masking-Shadowing Function

BSDF是两个方向参数的函数,每个方向参数都受到表面微观结构引起的遮挡效应的影响。对于观看方向和照明方向,这些分别表示为遮蔽和阴影。为了处理这两种情况,掩蔽函数 G 1 G_1 G1必须被推广为一个掩蔽-阴影函数 G G G,该函数给出了同时从两个 ω o \omega_o ωo ω i \omega_i ωi 方向都可见的微分区域占微表面的分数。

我们知道, G 1 ( ω o ) G_1(\omega_o) G1(ωo) 给出了从 ω o \omega_o ωo 方向可见的微小面片的比例, G 1 ( ω i ) G_1(\omega_i) G1(ωi) 给出了 ω i \omega_i ωi 的比例。 如果我们假设掩蔽和阴影是统计上独立的事件,那么这些概率可以简单地相乘:

G ( ω o , ω i ) = G 1 ( ω o ) G 1 ( ω i ) G(\omega_o,\omega_i) = G_1(\omega_o)G_1(\omega_i) G(ωo,ωi)=G1(ωo)G1(ωi)

然而,这种独立性假设是一个相当严重的近似值,往往高估了阴影和遮蔽的数量。这可能会在渲染图像中产生不受欢迎的黑暗区域。

相反,我们依赖于一个近似值,它解释了这样一个特性:相对于microfacet(微面),具有更高仰角的 macrosurface 更有可能从 ω i \omega_i ωi ω o \omega_o ωo两个角度观察到。如果微面高度呈正态分布,则可以推导出考虑基于高度的相关性的不太保守的G模型:

G ( ω o , ω i ) = 1 1 + Λ ( ω o ) + Λ ( ω i ) , ( 9.22 ) G(\omega_o,\omega_i) = \frac{1}{1 + \Lambda(\omega_o) + \Lambda(\omega_i)},(9.22) G(ωo,ωi)=1+Λ(ωo)+Λ(ωi)1(9.22)

双向形式的G基于之前定义的Lambda()函数实现了这个等式。

<<TrowbridgeReitzDistribution Public Methods>>+=  
Float G(Vector3f wo, Vector3f wi) const {
    return 1 / (1 + Lambda(wo) + Lambda(wi));
}

9.6.4 对可见正态分布进行抽样 Sampling the Distribution of Visible Normals

使用microfacet理论的高效渲染取决于我们确定特定入射光线所遇到的microfacet的能力——本质上,该操作必须模拟寻找与表面微观结构相交的过程。由于其随机定义,幸运的是不需要实际的光线跟踪操作:相交的微面遵循已知的统计分布,该分布取决于入射光线的粗糙度和方向。

回想一下式(9.17)的归一化准则,即给定方向 ω \omega ω,仰角 θ \theta θ,可见microfacet集合(左手边)与底层宏表面(右手边)占据相同的面积:
∫ H 2 ( n ) D ( ω m ) G 1 ( ω , ω m ) max ⁡ ( 0 , ω ⋅ ω m ) d ω m = ω ⋅ n = cos ⁡ θ \int_{\mathrm{H}^{2}(\mathbf{n})} D\left(\omega_{\mathrm{m}}\right) G_{1}\left(\omega, \omega_{\mathrm{m}}\right) \max \left(0, \omega \cdot \omega_{\mathrm{m}}\right) \mathrm{d} \omega_{\mathrm{m}}=\omega \cdot \mathbf{n}=\cos \theta H2(n)D(ωm)G1(ω,ωm)max(0,ωωm)dωm=ωn=cosθ

( 9.17 ) (9.17) (9.17)

光线与特定微面相互作用的概率与它的可见面积成正比;因此,这个等式可以被看作是对应该使用的分布的封装。在等式两边同时除以 c o s θ cos\theta cosθ后,左边的积分等于1,换句话说,它变成了一个归一化的密度 D ω ( ω m ) D_\omega(\omega_m) Dω(ωm),我们将其称为可见法向量的分布:

D ω ( ω m ) = G 1 ( ω ) c o s θ D ( ω m ) m a x ( 0 , ω ⋅ ω m ) D_\omega(\omega_m) = \frac{G_1(\omega)}{cos\theta} D(\omega_m) max(0,\omega \cdot \omega_m) Dω(ωm)=cosθG1(ω)D(ωm)max(0,ωωm)

(9.23)

它描述了正向法向量的投影面积,其中涉及掩码函数的第一项指定了一个 ω \omega ω依赖的归一化因子。方法D()可以计算这个密度函数。

<<TrowbridgeReitzDistribution Public Methods>>+=  
Float D(Vector3f w, Vector3f wm) const {
    return G1(w) / AbsCosTheta(w) * D(wm) * AbsDot(w, wm);
}

接下来的两个微面BSDF将依赖于根据这种密度对微面法线 ω m \omega_m ωm进行采样的能力。此时,人们通常会将反演方法(章节2.3)应用于方程(9.23)来构建一个采样算法,但这会导致一个相对复杂和近似的方法:部分问题在于,中心反演步骤缺乏解析解。我们采用一种简单的几何方法,利用许多相同截断球体或椭球体的排列来定义微表面。

在实现采样例程之前,我们将快速处理返回关联 PDF 的方法,它只是 D() 方法的另一个名称。

<<TrowbridgeReitzDistribution Public Methods>>+=  
Float PDF(Vector3f w, Vector3f wm) const { return D(w, wm); }

在这里插入图片描述

图9 - 27:对可见法线 D ω ( ω m ) D_\omega(\omega_m) Dω(ωm)的分布进行采样,相当于投射射线到由许多截断的球形或椭圆形凸起组成的表面微观结构上。在这个过程中只考虑一个凸起就足够了。

图9-27说明了这个高层次的思想:它只需要聚焦在一个椭球面或球面凸起上,从入射方向 ω \omega ω垂直投射平行光线到其表面。得到的法线方向 ω m \omega_m ωm将根据密度函数 D ω ( ω m ) D_\omega(\omega_m) Dω(ωm)进行分布。

在这里插入图片描述
图9.28:对Trowbridge-Reitz分布的各向异性进行采样,需要将均匀分布的点垂直投影到截断的椭球体上。将椭球的尺度变换逆应用于该问题的所有部分(椭球和入射光线),将该问题简化为更容易的半球/各向同性情况。

图9-28中的一个观察结果可以用来进一步简化这个任务:通过应用椭球的缩放变换的逆,问题就简化为简单的各向同性情况。为此,我们必须将入射方向 ω \omega ω转换为半球配置,执行半球采样步骤,然后将结果点重新转换回椭球状态。Sample_wm()方法实现了这一序列步骤。

<<TrowbridgeReitzDistribution Public Methods>>+=  
Vector3f Sample_wm(Vector3f w, Point2f u) const {
    <<Transform w to hemispherical configuration>> 
    <<Find orthonormal basis for visible normal sampling>> 
    <<Generate uniformly distributed points on the unit disk>> 
    <<Warp hemispherical projection for visible normal sampling>> 
    <<Reproject to hemisphere and transform normal to ellipsoid configuration>> 
}

对半球面结构的第一个变换是通过对入射方向 ω \omega ω应用分量缩放因子 α x \alpha_x αx α y \alpha_y αy并归一化来完成的。按照惯例,微面法线指向上半球,我们可以翻转入射方向,使两个方向一致。

<<Transform w to hemispherical configuration>>= 
Vector3f wh =
Normalize(Vector3f(alpha_x * w.x, alpha_y * w.y, w.z));
if (wh.z < 0)
    wh = -wh;

接下来,我们完成正交基(T1, T2, wh)的单位向量 w h wh wh。下面的特殊结构满足了T1垂直于宏观法线 ( 0 , 0 , 1 ) (0,0,1) (0,0,1)的附加约束。

<<Find orthonormal basis for visible normal sampling>>= 
Vector3f T1 = (wh.z < 0.99999f) ? Normalize(Cross(Vector3f(0, 0, 1), wh))
                                : Vector3f(1, 0, 0);
Vector3f T2 = Cross(wh, T1);

在这里插入图片描述
图9.29:截断半球的垂直投影可以分解为两个半盘的投影,分别用红色和蓝色标出。投影的切向半盘(蓝色)的大小和形状取决于入射方向 ω \omega ω,并在掠入射时消失。

图9.29说明了投影的几何形状。当 ω \omega ω垂直入射时(第一列),半球投射到一个圆盘上。非垂直入射(列2-4)揭示了更有趣的行为:下半部分对应于切向半圆盘(蓝色)的垂直投影,在垂直轴(即T2轴)上经历 c o s θ = ω ⋅ n cos\theta = \omega \cdot n cosθ=ωn给定的缩放。因为变换是均匀的,我们可以用圆盘上均匀点的垂直仿射变换对这个集合进行采样。

<<Generate uniformly distributed points on the unit disk>>= 
Point2f p = SampleUniformDiskPolar(u);

p = ( x , y ) p = (x, y) p=(x,y) 表示单位圆盘上的一点。对于给定的 x ∈ [ − 1 , 1 ] x \in [-1,1] x[1,1] , y分量位于区间 [ − h , h ] [-h, h] [h,h] 上,其中 h = 1 − x 2 h=\sqrt{1-x^2} h=1x2 表示最大高度。由于非垂直投影,这个区间现在必须简化为 [ − h c o s θ , h ] [- h cosθ, h] [hcosθh] ,这需要一个尺度 1 2 ( 1 + c o s θ ) \frac{1}{2}(1+ cosθ) 21(1+cosθ) 和偏移量 h 2 ( 1 − c o s θ ) \frac{h}{2}(1- cos θ) 2h(1cosθ) 的仿射变换。下面的代码片段使用Lerp()函数有效地执行了这个转换。

<<Warp hemispherical projection for visible normal sampling>>= 
Float h = std::sqrt(1 - Sqr(p.x));
p.y = Lerp((1 + wh.z) / 2, h, p.y);

译者注解:
该处将 p . y ∈ [ − h , h ] p.y\in [-h,h] p.y[h,h]等比转化为 p . y ∈ [ − h c o s θ , h ] p.y\in [-h cos\theta,h] p.y[hcosθ,h]
在这里插入图片描述
p . y = ( 1 − 1 + c o s θ 2 ) ∗ h + 1 + c o s θ 2 ∗ p . y p.y = (1-\frac{1+cos\theta}{2}) * h + \frac{1+cos\theta}{2} * p.y p.y=(121+cosθ)h+21+cosθp.y
其中:

  • h + h c o s θ 2 \frac{h+hcos\theta}{2} 2h+hcosθ 为新圆盘y轴的实际半轴高度
  • h + h c o s θ 2 − h c o s θ = h − h c o s θ 2 \frac{h+hcos\theta}{2} - hcosθ = \frac{h-hcos\theta}{2} 2h+hcosθhcosθ=2hhcosθ为圆盘p.y = 0处映射到新圆盘的y轴坐标

最后一步将计算得到的位置投影到半球上并计算其三维坐标。最后,它重新应用椭球体变换并返回结果。

<<Reproject to hemisphere and transform normal to ellipsoid configuration>>= 
Float pz = std::sqrt(std::max<Float>(0, 1 - LengthSquared(Vector2f(p))));
Vector3f nh = p.x * T1 + p.y * T2 + pz * wh;
return Normalize(Vector3f(alpha_x * nh.x, alpha_y * nh.y,
                          std::max<Float>(1e-6f, nh.z)));

注意,似乎我们应该除以而不是乘以 α x \alpha_x αx α y \alpha_y αy,以实现从片段<<Transform w to hemispherical configuration>>的变换的逆。这个明显的错误是由法线根据线性变换的逆转置进行变换的性质解释的(章节3.10.3)。

9.6.5 Torrance–Sparrow 模型

我们可以最终解释ConductorBxDF如何通过Torrance和Sparrow(1967)的BRDF模型处理粗糙的微观结构。我们不会直接从第一原理推导出他们的方法,而是解释这个模型如何在pbrt中采样,然后逆向工程隐含的BRDF。

结合可见光法向采样方法,该模型的采样例程由三个物理直观的步骤组成:

  1. 给定一个观察射线 ω o \omega_o ωo,从可见光正态分布 D ω o ( ω m ) D_{\omega_o}(\omega_m) Dωo(ωm)中抽取一个微面法线 ω m \omega_m ωm。这一步封装了观察射线与随机微面相交的过程。
  2. 利用镜面反射定律和菲涅耳方程对采样的微面进行了反射建模,得出了入射方向 ω i \omega_i ωi和衰减路径携带的光的反射系数。
  3. 最后对散射光进行 G 1 ( ω i ) G_1(\omega_i) G1(ωi)缩放,以考虑其他微面遮挡的影响。

我们的目标是确定表示这一系列步骤的BRDF。为此,我们必须首先找到采样的入射方向 ω i \omega_i ωi的概率密度。虽然涉及到可见正态抽样,但重要的是要注意, ω i \omega_i ωi不是按照可见正态分布分布的——要找到它的密度,我们必须考虑步骤的顺序,用来从 ω m \omega_m ωm获得 ω i \omega_i ωi

综合现有的信息,我们知道 ω m \omega_m ωm的概率密度由 D ω o ( ω m ) D_{\omega_o}(\omega_m) Dωo(ωm)给出,而 ω i \omega_i ωi ω m \omega_m ωm ω o \omega_o ωo利用镜面反射定律得到,即:

ω r = − ω o + 2 ( ω m ⋅ ω o ) ω m , ( 9.24 ) \omega_r = -\omega_o + 2(\omega_m \cdot \omega_o)\omega_m,(9.24) ωr=ωo+2(ωmωo)ωm(9.24)

这个反射映射也有逆映射:对应于特定反射的法线可以通过

ω m = ω i + ω o ∥ ω i + ω o ∥ , ( 9.25 ) \omega_{\mathrm{m}}=\frac{\omega_{\mathrm{i}}+\omega_{\mathrm{o}}}{\left\|\omega_{\mathrm{i}}+\omega_{\mathrm{o}}\right\|},(9.25) ωm=ωi+ωoωi+ωo,(9.25)

它被称为半角或半方向变换,因为它给出了唯一的方向向量。它位于和 ω i \omega_i ωi ω o \omega_o ωo中间。

半方向变换 The Half-Direction Transform

在这里插入图片描述
图9.30:微小面法线、入射方向和出射方向满足一个有趣的几何关系。我们保持出射方向 ω o \omega_o ωo固定,并可视化微小面集(蓝色阴影部分),它将产生围绕入射方向(绿色阴影部分)的弧/圆锥方向的有效反射。
在(a)所示的平地场景中,可容许的微小面集只是一个较小的弧。三维情况更加复杂,涉及球面圆锥截面。
在(b)中,圆锥中心 ω i \omega_i ωi ω o \omega_o ωo 对齐,可容许的微小面形成一个球面圆。
© ω o \omega_o ωo与中心 ω i \omega_i ωi方向之间形成一个140°角,微小面形成一个球面椭圆。
(d) 角度为 170° 时,结果是一个球面双曲线。Torrance-Sparrow模型取决于这些阴影集的表面积比,在无限小的情况下有一个简洁的解析解。

半方向和入射方向之间的转换实际上是一种变量的变化,相关映射的雅可比行列式 d ω i / d ω m d\omega_i/d\omega_m dωi/dωm使这两个空间的概率密度能够转换。

θ m = θ o + θ i 2 , ( 9.26 ) \theta_m = \frac{\theta_o+\theta_i}{2},(9.26) θm=2θo+θi(9.26)

在保持 θ o \theta_o θo固定的同时,入射角 θ i \theta_i θi(绿色阴影区域)的轻微扰动需要相应地改变微面角度 θ m \theta_m θm(蓝色阴影区域),以确保镜面反射定律继续保持不变。然而,这种对 θ m \theta_m θm扰动要小得多——准确地说,只有它的一半——这可以从式(9.26)中直接推导出来。实际上,方程(9.26)的导数 d θ m / d θ i = 1 / 2 d\theta_m/d\theta_i = 1/2 dθm/dθi=1/2 在二维情况下产生。

由于图9.30(b-d)中显示的不同行为,3D情况最初看起来很有挑战性。幸运的是,使用无穷小集合可以得到一个简单的解析表达式,可以通过使用球坐标表达立体角 ω m \omega_m ωm ω r \omega_r ωr的微分来推导:

d ω m d ω i = sin ⁡ θ m d θ m d ϕ m sin ⁡ θ i d θ i d ϕ i . \frac{\mathrm{d} \omega_{\mathrm{m}}}{\mathrm{d} \omega_{\mathrm{i}}}=\frac{\sin \theta_{\mathrm{m}} \mathrm{d} \theta_{\mathrm{m}} \mathrm{d} \phi_{\mathrm{m}}}{\sin \theta_{\mathrm{i}} \mathrm{d} \theta_{\mathrm{i}} \mathrm{d} \phi_{\mathrm{i}}} . dωidωm=sinθidθidϕisinθmdθmdϕm.

这个表达式可以简化,因为镜面反射定律意味着 θ i = 2 θ m \theta_i=2\theta_m θi=2θm,且在围绕 ω o \omega_o ωo 的球坐标系中 ϕ i = ϕ m \phi_i = \phi_m ϕi=ϕm

d ω m d ω i = sin ⁡ θ m d θ m d ϕ m sin ⁡ 2 θ m 2   d θ m d ϕ m = sin ⁡ θ m 4 cos ⁡ θ m sin ⁡ θ m = 1 4 cos ⁡ θ m = 1 4 ( ω i ⋅ ω m ) = 1 4 ( ω o ⋅ ω m ) . \begin{aligned} \frac{\mathrm{d} \omega_{\mathrm{m}}}{\mathrm{d} \omega_{\mathrm{i}}} & =\frac{\sin \theta_{\mathrm{m}} \mathrm{d} \theta_{\mathrm{m}} \mathrm{d} \phi_{\mathrm{m}}}{\sin 2 \theta_{\mathrm{m}} 2 \mathrm{~d} \theta_{\mathrm{m}} \mathrm{d} \phi_{\mathrm{m}}} \\ & =\frac{\sin \theta_{\mathrm{m}}}{4 \cos \theta_{\mathrm{m}} \sin \theta_{\mathrm{m}}} \\ & =\frac{1}{4 \cos \theta_{\mathrm{m}}} \\ & =\frac{1}{4\left(\omega_{\mathrm{i}} \cdot \omega_{\mathrm{m}}\right)}=\frac{1}{4\left(\omega_{\mathrm{o}} \cdot \omega_{\mathrm{m}}\right)} . \end{aligned} dωidωm=sin2θm2 dθmdϕmsinθmdθmdϕm=4cosθmsinθmsinθm=4cosθm1=4(ωiωm)1=4(ωoωm)1.

( 9.27 ) (9.27) (9.27)
由此得到的雅可比行列式可以方便地用微面法线和 ω i \omega_i ωi ω o \omega_o ωo表示。

Torrance–Sparrow PDF

有了式(9.27)的关系式,我们现在可以计算出通过可见光法向采样和反射映射相结合得到的采样入射方向单位立体角的概率:

p ( ω i ) = D ω o ( ω m ) d ω m d ω i = D ω o ( ω m ) 4 ( ω o ⋅ ω m ) , ( 9.28 ) p\left(\omega_{\mathrm{i}}\right)=D_{\omega_{\mathrm{o}}}\left(\omega_{\mathrm{m}}\right) \frac{\mathrm{d} \omega_{\mathrm{m}}}{\mathrm{d} \omega_{\mathrm{i}}}=\frac{D_{\omega_{\mathrm{o}}}\left(\omega_{\mathrm{m}}\right)}{4\left(\omega_{\mathrm{o}} \cdot \omega_{\mathrm{m}}\right)},(9.28) p(ωi)=Dωo(ωm)dωidωm=4(ωoωm)Dωo(ωm)(9.28)

其中,通过式(9.25)中的半方向变换, ω m \omega_m ωm取决于 ω i \omega_i ωi。以下先前未定义的片段将这些观察结果合并到ConductorBxDF::PDF()中。

<<Evaluate sampling PDF of rough conductor BRDF>>= 
Vector3f wm = wo + wi;
if (LengthSquared(wm) == 0) return 0;
wm = FaceForward(Normalize(wm), Normal3f(0, 0, 1)); 
return mfDistrib.PDF(wo, wm) / (4 * AbsDot(wo, wm));

当入射光线位于表面以下时,方程和实现之间的符号相关差异确保了正确的操作。

Torrance–Sparrow BRDF

任何BRDF模型的采样例程都编码了对散射方程进行重要采样的局部策略,(4.14)。这里,我们处理的是一个不透明的表面,所以积分只在半球上。单样本蒙特卡罗估计量为

L o ( p , ω o ) = ∫ H 2 ( n ) f r ( p , ω o , ω i ) L i ( p , ω i ) ∣ cos ⁡ θ i ∣ d ω i ≈ f r ( p , ω o , ω i ) L i ( p , ω i ) ∣ cos ⁡ θ i ∣ p ( ω i ) \begin{aligned} L_{\mathrm{o}}\left(\mathrm{p}, \omega_{\mathrm{o}}\right) & =\int_{\mathrm{H}^{2}(\mathbf{n})} f_{\mathrm{r}}\left(\mathrm{p}, \omega_{\mathrm{o}}, \omega_{\mathrm{i}}\right) L_{\mathrm{i}}\left(\mathrm{p}, \omega_{\mathrm{i}}\right)\left|\cos \theta_{\mathrm{i}}\right| \mathrm{d} \omega_{\mathrm{i}} \\ & \approx \frac{f_{\mathrm{r}}\left(\mathrm{p}, \omega_{\mathrm{o}}, \omega_{\mathrm{i}}\right) L_{\mathrm{i}}\left(\mathrm{p}, \omega_{\mathrm{i}}\right)\left|\cos \theta_{\mathrm{i}}\right|}{p\left(\omega_{\mathrm{i}}\right)} \end{aligned} Lo(p,ωo)=H2(n)fr(p,ωo,ωi)Li(p,ωi)cosθidωip(ωi)fr(p,ωo,ωi)Li(p,ωi)cosθi
( 9.29 ) (9.29) (9.29)

式中 p ( ω i ) p(\omega_i) p(ωi)为样本单位立体角的概率。

回想一下我们之前介绍的Torrance-Sparrow采样程序,它是由物理上直观的步骤组成的:通过可见的正常采样使射线与随机微观结构相交叉,通过反射定律计算 ω i \omega_i ωi,以及菲涅耳和掩蔽因子对入射辐射的衰减。用这种方法计算的辐射值应与式(9.29)的蒙特卡罗估计值一致,即 f r f_r fr必须满足恒等式

f r ( p , ω o , ω i ) L i ( p , ω i ) ∣ cos ⁡ θ i ∣ p ( ω i ) = ! F ( ω o ⋅ ω m ) G 1 ( ω i ) L i ( p , ω i ) \frac{f_{\mathrm{r}}\left(\mathrm{p}, \omega_{\mathrm{o}}, \omega_{\mathrm{i}}\right) L_{\mathrm{i}}\left(\mathrm{p}, \omega_{\mathrm{i}}\right)\left|\cos \theta_{\mathrm{i}}\right|}{p\left(\omega_{\mathrm{i}}\right)} \stackrel{!}{=} F\left(\omega_{\mathrm{o}} \cdot \omega_{\mathrm{m}}\right) G_{1}\left(\omega_{\mathrm{i}}\right) L_{\mathrm{i}}\left(\mathrm{p}, \omega_{\mathrm{i}}\right) p(ωi)fr(p,ωo,ωi)Li(p,ωi)cosθi=!F(ωoωm)G1(ωi)Li(p,ωi)
( 9.30 ) (9.30) (9.30)

我们将简单地解这个方程得到 f r ( p , ω o , ω i ) f_r(p,\omega_o,\omega_i) fr(p,ωo,ωi)。将式(9.28)中Torrance-Sparrow模型的PDF进一步代入,得到BRDF

f r ( p , ω o , ω i ) = D ω o ( ω m ) F ( ω o ⋅ ω m ) G 1 ( ω i ) 4 ( ω o ⋅ ω m ) ∣ cos ⁡ θ i ∣ f_{\mathrm{r}}\left(\mathrm{p}, \omega_{\mathrm{o}}, \omega_{\mathrm{i}}\right)=\frac{D_{\omega_{\mathrm{o}}}\left(\omega_{\mathrm{m}}\right) F\left(\omega_{\mathrm{o}} \cdot \omega_{\mathrm{m}}\right) G_{1}\left(\omega_{\mathrm{i}}\right)}{4\left(\omega_{\mathrm{o}} \cdot \omega_{\mathrm{m}}\right)\left|\cos \theta_{\mathrm{i}}\right|} fr(p,ωo,ωi)=4(ωoωm)cosθiDωo(ωm)F(ωoωm)G1(ωi)

( 9.31 ) (9.31) (9.31)

插入式(9.23)中可见正态分布的定义,并假设方向在正半球,得到Torrance-Sparrow BRDF的一般形式:

f r ( p , ω o , ω i ) = D ( ω m ) F ( ω o ⋅ ω m ) G 1 ( ω i ) G 1 ( ω o ) 4 cos ⁡ θ i cos ⁡ θ o f_{\mathrm{r}}\left(\mathrm{p}, \omega_{\mathrm{o}}, \omega_{\mathrm{i}}\right)=\frac{D\left(\omega_{\mathrm{m}}\right) F\left(\omega_{\mathrm{o}} \cdot \omega_{\mathrm{m}}\right) G_{1}\left(\omega_{\mathrm{i}}\right) G_{1}\left(\omega_{\mathrm{o}}\right)}{4 \cos \theta_{\mathrm{i}} \cos \theta_{\mathrm{o}}} fr(p,ωo,ωi)=4cosθicosθoD(ωm)F(ωoωm)G1(ωi)G1(ωo)
( 9.32 ) (9.32) (9.32)

然而,我们将对上述表达式做一个小的调整:第9.6.3节介绍了一个更精确的双向掩蔽阴影因子G,该因子考虑了微观结构上的高度相关性。我们用它来代替单向因子的乘积:

f r ( p , ω o , ω i ) = D ( ω m ) F ( ω o ⋅ ω m ) G ( ω i , ω o ) 4 cos ⁡ θ i cos ⁡ θ o f_{\mathrm{r}}\left(\mathrm{p}, \omega_{\mathrm{o}}, \omega_{\mathrm{i}}\right)=\frac{D\left(\omega_{\mathrm{m}}\right) F\left(\omega_{\mathrm{o}} \cdot \omega_{\mathrm{m}}\right) G\left(\omega_{\mathrm{i}}, \omega_{\mathrm{o}}\right)}{4 \cos \theta_{\mathrm{i}} \cos \theta_{\mathrm{o}}} fr(p,ωo,ωi)=4cosθicosθoD(ωm)F(ωoωm)G(ωi,ωo)
( 9.33 ) (9.33) (9.33)

Torrance-Sparrow模型的一个优点是它的推导不依赖于所使用的特定microfacet分布。此外,它不依赖于特定的菲涅耳函数,可以用于导体和电介质。然而,推导中使用的 d ω m d\omega_m dωm d ω o d\omega_o dωo之间的关系确实依赖于微面镜面反射的假设,并且该模型的折射率变化需要适当的修改。

评估Torrance-Sparrow BRDF的项是简单的。

<<Evaluate rough conductor BRDF>>= 
<<Compute cosines and wm for conductor BRDF>> 
<<Evaluate Fresnel factor F for conductor BRDF>> 
return mfDistrib.D(wm) * F * mfDistrib.G(wo, wi) /
       (4 * cosTheta_i * cosTheta_o);

入射方向和出射方向需要明确处理,以避免产生NaN值:

<<Compute cosines and wm for conductor BRDF>>= 
Float cosTheta_o = AbsCosTheta(wo), cosTheta_i = AbsCosTheta(wi);
if (cosTheta_i == 0 || cosTheta_o == 0) return {};
Vector3f wm = wi + wo;
if (LengthSquared(wm) == 0) return {};
wm = Normalize(wm);

请注意,菲涅耳项是基于相对于microfacet(即 ω o ⋅ ω m \omega_o \cdot \omega_m ωoωm)的入射角,而不是微表面。

<<Evaluate Fresnel factor F for conductor BRDF>>= 
SampledSpectrum F = FrComplex(AbsDot(wo, wm), eta, k);

Torrance–Sparrow 采样

抽样程序遵循本小节开始时概述的步骤顺序。在计算BRDF和密度函数之前,首先使用Sample_wm()找到microfacet方向,并反射microfacet法线的出方向来找到wi。

<<Sample rough conductor BRDF>>= 
<<Sample microfacet normal wm and reflected direction wi>> 
<<Compute PDF of wi for microfacet reflection>> 
Float cosTheta_o = AbsCosTheta(wo), cosTheta_i = AbsCosTheta(wi);
<<Evaluate Fresnel factor F for conductor BRDF>> 
SampledSpectrum f = mfDistrib.D(wm) * F * mfDistrib.G(wo, wi) /
                    (4 * cosTheta_i * cosTheta_o);
return BSDFSample(f, wi, pdf, BxDFFlags::GlossyReflection);

当采样微面法线导致一个位于宏观表面以下的计算方向时,会出现一种奇怪的情况。在实际的微观结构中,这将意味着光线深入缝隙,被二次或三次散射。然而,所提出的ConductorBxDF仅模拟单一的相互作用,因此将这样的样本标记为无效。这揭示了所提出的模型的主要缺陷之一:具有显著粗糙度的物体可能由于缺乏多次散射而显得太暗。解决与能量损失有关的问题是一个活跃的研究话题;有关更多信息,请参阅“进一步阅读”部分。

<<Sample microfacet normal wm and reflected direction wi>>= 
Vector3f wm = mfDistrib.Sample_wm(wo, u);
Vector3f wi = Reflect(wo, wm);
if (!SameHemisphere(wo, wi)) return {};

我们省略了导体bxdf::PDF()之后的片段<<Compute PDF of wi for microfacet reflection>>

可见正态采样仍然是一个相对较新的发展:几十年来,microfacet模型依赖于与microfacet分布成正比的采样 ω m \omega_m ωm,由于BRDF的某些项没有精确采样,因此往往会产生嘈杂的渲染。图9.31将这种经典方法与现在在pbrt中实现的方法进行了比较。

在这里插入图片描述
在这里插入图片描述

图9.31:Microfacet采样技术的比较。球体下的地平面采用Torrance–Sparrow BRDF模型,其粗糙度为 α = 0.01 \alpha = 0.01 α=0.01。即使使用这种相对光滑的微表面,(a)对整个微面分布 D ( ω m ) D(\omega_m) D(ωm)进行采样,从背面微面采集的不可用样本产生的误差明显高于(b)直接对可见微面分布 D ω o ( ω m ) D_{\omega_o}(\omega_m) Dωo(ωm)进行采样。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值