实时渲染基础(6)基于物理的渲染(Physically Based Rendering)

时间:2024-02-23 21:43:34

辐射度量学(Radiometry)


为了渲染出物理上正确的图像,那么我们就需要从能量的角度上去理解光的传播、光在空间中的分布,而这些也就刚好是辐射度量学的范畴。

Radiant Enery & Radiant Flux(Power)

Radiant Energy:能量 \(Q\) \([J=Joule]\)

Radiant Flux(Power):单位时间的能量(功率),\(\phi=\frac{dQ}{dt}\) \([W=Watt][lm=lumen]^*\)

图形学中,物体表面总是时时刻刻接受光子能量,又时时刻刻散发光子能量,因此常将 Radiant Flux(Power)用来衡量光照强度,而几乎不用 Radiant Energy。

立体角(Solid Angle)

角度(Angle):从二维上看,用圆上所对应的弧长与半径之比来定义一个角度,而且这个角度是与圆半径大小无关的(因为使用了弧长和半径之比)。

  • \(\theta = \frac{l}{r}\)
  • 任何圆都有 \(2\pi\) 弧度

立体角(Solid Angle): 推广至三维,类似地,用球面上的面积A与所对应的半径平方之比来定义一个立体角,而且这个立体角同样是与球体半径大小无关的(因为使用了球面上的面积A与所对应的半径平方之比)。

  • \(\omega = \frac{A}{r^2}\)
  • 任何球体都有 \(4\pi\) steradians

考虑下图所示空间中的点光源,以球心为顶点的无限长锥体内,任何截面(与任意半径的球体相截)接收到的光子能量应该是一样的。换句话说,近处较小面积的表面和远处较大面积的表面所接收到的 Power 应该相同。立体角(Solid Angle)正可以表示这样一个比例关系(球面面积A与半径平方之比)。

角度 \(\theta\) 可以代表一个2D方向,而立体角 \(\omega\) 常常被用来代表一个3D有向单位向量。

Radient Intensity

Radient Intensity:每单位立体角的 Power,可以理解成 => 光源点朝某个立体角方向辐射的 Power。

\(I(\omega) \equiv \frac{\mathrm{d} \phi}{\mathrm{d} \omega}\)

\(\left[\frac{\mathrm{W}}{\mathrm{sr}}\right]\left[\frac{\mathrm{lm}}{\mathrm{sr}}=\mathrm{cd}=\mathrm{candela}\right]\)

Irradiance

Irradiance:每单位面积的 Power,可以理解成 => 表面点上每单位面积接受的 Power。

\(E(\mathbf{x}) \equiv \frac{\mathrm{d} \phi(\mathbf{x})}{\mathrm{d} A}\)

\(\left[\frac{\mathrm{W}}{\mathrm{m}^{2}}\right]\left[\frac{\mathrm{lm}}{\mathrm{m}^{2}}=\operatorname{lux}\right]\)

Radiance

Radiance:每单位立体角,每单位投影面积的 Power,可以理解成 => 表面点上每单位面积接受 Power 后朝某个立体角方向反射的 Power。

\(L(\mathrm{x}, \omega) \equiv \frac{\mathrm{d}^{2} \phi(\mathrm{x}, \omega)}{\mathrm{d} \omega \mathrm{d} A \cos \theta}\)

\(\left[\frac{\mathrm{W}}{\mathrm{sr} \mathrm{m}^{2}}\right]\left[\frac{\mathrm{cd}}{\mathrm{m}^{2}}=\frac{\operatorname{lm}}{\mathrm{sr} \mathrm{m}^{2}}=\mathrm{nit}\right]\)

渲染方程(The Rendering Equation)


有了上述的概念,那么我们就可以用公式这样描述对某个 shading point 的渲染:一个点 \(x\)​ 接受各个方向(\(\omega_i\in \Omega^+\)​)的入射光 \(L_i\)​ 后,则往某个指定方向 \(\omega_r\)​ 反射的光为 \(L_r\)​,并有:

\(L_{r}\left(x, \omega_{r}\right)=\int_{\Omega^{+}} L_{i}\left(x, \omega_{i}\right) f_{r}\left(x, \omega_{i}, \omega_{r}\right)\left(n \cdot \omega_{i}\right) \mathrm{d} \omega_{i}\)

倘若点 \(x\) 还包含有自发光 \(L_e\),那么完整的渲染方程应该如下:

\(L_{r}\left(x, \omega_{r}\right)=L_{e}\left(x, \omega_{r}\right)+\int_{\Omega^{+}} L_{i}\left(x, \omega_{i}\right) f_{r}\left(x, \omega_{i}, \omega_{r} \right)\left(n \cdot \omega_{i}\right) \mathrm{d} \omega_{i}\)

  • 积分域 \(\Omega^+\) 的意思是上半球的范围,这是因为shading point不可能被从背面的下半球面传来的光线打到。

  • \(f_{r}\left(x, \omega_{i}, \omega_{r}\right)\)​​ 表示为某个光入射点表面后孤立的反射情况(也是马上要讲的BxDF,一般而言是对BRDF、BSDF、BSSDF等几种双向分布函数的统一表示),因为光传播到某个物体表面上的反射情况是各不相同的,例如对于glossy的物体(光滑的镜子)和diffuse的物体(粗糙的木头),前者往往更容易形成镜面反射的光,而后者则是更容易形成漫反射的光。

  • \((n\cdot\omega_i)\) 这个点积则意味着入射方向与表面法线夹角越小,那么这个表面能够接受的 Power 就越多:

双向反射分布函数(BRDF)


Bidirectional Reflectance Distribution Function (BRDF) 表示的便在某个点 \(x\)​ 上,对于来自某个方向 \(w_i\)​ 的光照,可以朝某个方向 \(w_r\)​ 反射光的多少:

\(f_{r}\left(\omega_{i} \rightarrow \omega_{r}\right)=\frac{\mathrm{d} L_{r}\left(\omega_{r}\right)}{\mathrm{d} E_{i}\left(\omega_{i}\right)}=\frac{\mathrm{d} L_{r}\left(\omega_{r}\right)}{L_{i}\left(\omega_{i}\right) \cos \theta_{i} \mathrm{~d} \omega_{i}} \quad\left[\frac{1}{\mathrm{sr}}\right]\)

Microfacet Cook-Torrance BRDF


而通过前人对现实中物体表面材质的研究,总结了以下一个基于微平面原理的 Microfacet BRDF 公式:

\(f_{r}\left(x, \omega_{i}, \omega_{r}\right)= k_{d} \frac{c}{\pi}+k_{s} \frac{F(\omega_{r},h)\cdot G(\omega_{i},\omega_{r},h)\cdot D(h)}{4\left(w_{r} \cdot n\right)\left(w_{i} \cdot n\right)}\)

其中 \(h\) 是指半程向量 \(h= \frac{\omega_{i}+\omega_{r}}{||\omega_{i}+\omega_{r}||}\) 。​

这套公式为绝大多数物体表面的渲染提供了统一的计算方法,换句话说,一个BRDF代表着一种物体表面的材质。需要渲染不同物体表面的材质时,只需要简单的修改函数里面的系数就可以得到对应的BRDF。不过仍然还存在一些物体的渲染(例如毛发、皮肤等)仍需要更加复杂的BRDF。

下面讲解释这个公式的每个成分及对应的物理现象。

漫反射项(Diffuse Term)

光的漫发射是一个老生常谈的现象(以前的笔记也说过),简单来说就是认为表面足够粗糙以至于光打到该表面时会往各个方向均匀发散,在 BRDF 中表现为:

\(k_{d} \frac{c}{\pi}\)

其中,\(c\) 为纹理颜色,\(k_d\) 为漫反射系数(\(k_d+k_s=1\)\(k_s\) 为镜面反射系数)

分母为什么是 \(\pi\) :渲染方程的后半部单独积分就是 \(\int_{\Omega^{+}}(n \cdot \omega_{i})\mathrm{d}\omega_i = \int_{\Omega^{+}} \cos \theta_{i} d \omega_{i}= \int^{2\pi}_0 \int^{\frac{\pi}{2}}_0 \cos \theta_{i} \sin \theta_{i} d \theta_{i} d\phi =\int_{0}^{2 \pi} \int_{0}^{1} \mu_{i} d \mu_{i} d \phi=\pi\) ,而漫反射是往着色点的正面半球各个立体角方向均匀反射,对某个出射方向理应反射出 \(k_d\cdot c\) 的光,因此需要除多一个 \(\pi\) 来让方程配平,从而满足能量守恒。

菲涅尔项(Fresnel Term)

菲涅尔现象,简单的讲就是视线夹角与能量反射的关系:当视线垂直于反射表面时,能量反射较弱;而当视线与反射表面夹角越小,反射越明显。水体是菲涅尔效应最明显的现实物体之一(当站在湖边看到脚下的湖水是透明的,而远处湖面的水则是不透明的,并且反射非常强烈)。

此外,菲涅尔项,即视线夹角与能量反射的关系还受不同介质的折射率所影响(前者图为各类极化的绝缘体的菲涅尔函数,后者图为各类极化的导体的菲涅尔函数):

  • 标准的菲涅尔项

\(F_{\mathrm{s}}=\left|\frac{n_{1} \cos \theta_{i}-n_{2} \cos \theta_{\mathrm{t}}}{n_{1} \cos \theta_{\mathrm{i}}+n_{2} \cos \theta_{\mathrm{t}}}\right|^{2}=\left|\frac{n_{1} \cos \theta_{\mathrm{i}}-n_{2} \sqrt{1-\left(\frac{n_{1}}{n_{2}} \sin \theta_{\mathrm{i}}\right)^{2}}}{n_{1} \cos \theta_{\mathrm{i}}+n_{2} \sqrt{1-\left(\frac{n_{1}}{n_{2}} \sin \theta_{\mathrm{i}}\right)^{2}}}\right|^{2}\)​​

\(F_{\mathrm{p}}=\left|\frac{n_{1} \cos \theta_{\mathrm{t}}-n_{2} \cos \theta_{\mathrm{i}}}{n_{1} \cos \theta_{\mathrm{t}}+n_{2} \cos \theta_{\mathrm{i}}}\right|^{2}=\left|\frac{n_{1} \sqrt{1-\left(\frac{n_{1}}{n_{2}} \sin \theta_{\mathrm{i}}\right)^{2}}-n_{2} \cos \theta_{\mathrm{i}}}{n_{1} \sqrt{1-\left(\frac{n_{1}}{n_{2}} \sin \theta_{\mathrm{i}}\right)^{2}}+n_{2} \cos \theta_{\mathrm{i}}}\right|^{2}\)​​

\(F=\frac{1}{2}\left(F_{\mathrm{s}}+F_{\mathrm{p}}\right)\)​​

精准的菲尼尔项计算量比较大(考虑了S极化、P极化的综合效果),而且还要考虑介质的折射角,因此不常用。

  • Schlick\'s approximation

\(F_{0}=\left(\frac{n_{1}-n_{2}}{n_{1}+n_{2}}\right)^{2}\)

\(F=F_0 +(1-F_0)(1-(n \cdot \omega_{r}))^{5}\)

其中,\(n1\)​​、\(n2\)​​分别为两种介质的折射率。一般假设 \(n1=1\) 近似于空气折射率,而 \(n2\)​​ 取决于被渲染的物体介质。业界一般都采用Schlick的Fresnel近似,因为计算成本低廉,而且精度也足够了。

法线分布函数(Normal Distribution Function)

微平面模型中一个重要特性就是微平面法线的统计分布。法线分布函数 D(h) 描述了平面法线分布的概率,即具有正确朝向(能够将来自 \(\omega_{i}\) 方向的光反射往视点方向 \(\omega_{o}\) )的微表面法线浓度。

简单来说,当微平面的法线分布比较集中(各法线朝向大致相同)时,那么物体表面材质会更容易表现出高光;当微平面的法线分布比较散开(各法线朝向差异比较大)时,那么物体表面材质将表现的非常diffuse。

法线分布函数相当于从微平面的角度去解释高光(Specular)部分。

  • Normalized Blinn-Phong

传统的Blinn-Phong模型通过 \(Specular = k_smax(0,n\cdot h)^p\) 确定Specular部分的运算,但是在辐射度量学的角度中渲染方程是一个余弦加权的半球积分,因此需要将其归一化:

\(D(h)=\frac{p+2}{2 \pi}(n \cdot h)^{p}\)​​​

其中,\(p \in [0,\infin)\)​​​ 表示为表面的光滑程度,低值表示粗糙表面,高值表示光滑表面。

  • Beckmann NDF

Beckmann NDF 是第一批微平面模型中使用的法线分布,也是Cook-Torrance BRDF在提出时选择的NDF。

\(D(h)=\frac{1}{\pi \alpha^{2}({n} \cdot {h})^{4}} \cdot \exp {\left(\frac{({n} \cdot {h})^{2}-1}{a^{2}({n} \cdot {h})^{2}}\right)}\)​​

其中,\(\alpha \in[0,1]\)​ 表示为表面的粗糙程度。

Beckmann分布于Phong分布实际是同族分布,两种法线分布可以通过参数的关系式子\(p=2\alpha^{-2}-2\)​​进行等效。只是Blinn-Phong的参数范围不便表示(主要指较大的值时),Beckamann 通过参数映射将其范围固定在更标准的范围[0,1]。

  • GGX/Trowbridge-Reitz

\(D(h) =\frac{\alpha^{2}}{\pi\left((n \cdot h)^{2}\left(\alpha^{2}-1\right)+1\right)^{2}}\)

其中,\(\alpha \in [0,1]\)​ 表示为表面的粗糙程度。

GGX(or Trowbridge-Reitz)与 Beckmann NDF 的主要区别在于前者函数具有更长的尾巴,这样就可以让高光部分过渡部分更加缓和,从而更加自然。

  • Generalized-Trowbridge-Reitz(GTR)

\(D(h)=\frac{c}{\left((n\cdot h)^{2}\left(\alpha^{2}-1\right)+1\right)^{\gamma}}\)​​​​

其中, \({\gamma}\)​​ 参数用于控制尾部形状。 当 \({\gamma}= 2\)​​ 时,GTR等同于GGX。 随着 \({\gamma}\)​​ 的值减小,分布的尾部变得更长。而随着 \({\gamma}\)​​ 值的增加,分布的尾部变得更短。

为让不同的 \(\gamma\) 会导致 \(\int_{\Omega^{+}}D(h)(n \cdot \omega_{i})\mathrm{d}\omega_i \ne 1\) ,因此 \(c\) 是随着 \(\gamma\) 变化的,是专门用于归一化的常数。

几何函数 (Geometry Function)

几何函数体现了光在物体微平面上反射时的损耗,一般指两种损耗:阴影(Shadowing)和遮蔽(Obstruction)。

阴影(Shadowing)表示微平面对入射光的遮挡,即光源无法完全覆盖微平面;而遮蔽(Obstruction)表示微平面对出射光的遮挡,即微平面反射出的光不能完全到达摄像机观察点。

因此对这两种现象,定义这样的几何函数 \(G_1\)​​ 为单个方向上的可见比例(值域为[0,1]),可以称为遮蔽函数(masking function)或阴影函数(shadowing function)。

由于光路的可逆性,我们可以认为对于几何遮蔽效果的入射光方向和出射光方向是近似等效的,因此Shadowing和Obstruction都使用了相同的几何函数 \(G_1\)​​。

那么几何函数的综合效果即是 \(G_2(\omega_{i}, \omega_{r},h) \approx G_{1}(\omega_{i},h) G_{1}(\omega_{r},h)\)

引入几何函数一个很重要的原因:由于菲涅尔项(Fresnel Term)的加入,会导致表面法线垂直于视线(即 Grazing angle)的物体边缘反射近乎100%的能量,而表面法线与视线平行的物体正面则会反射较少的能量,这样就会导致物体容易出现一圈白线描边。而微平面模型的几何函数在 Grazing angle 下可以极大限制反射的能量。

此外,几何函数不可以随便乱选,需要和对应的法线分布函数一起搭配使用,因为从数学的角度上看,几何函数是依赖于法线分布函数的建模的。

  • Smith 高度相关遮蔽阴影函数(Smith Height-Correlated Masking and Shadowing Function)

\(G_{2}(\omega_r, \omega_i, h)=\frac{\chi^{+}(\omega_r \cdot h) \chi^{+}(\omega_i \cdot h)}{1+\Lambda(\omega_r)+\Lambda(\omega_i)}\)

这块数学公式有点复杂难理解,留个坑。

能量补偿项(Energy Compensation Term)

几何函数表示了光在物体微平面上反射时的损耗,但实际上这些光线并不是损耗了,而是变成了微平面之间的互反射或多次表面反射的光线,但是Microfacet理论忽略了这些反射,这样做的缺点是会造成越diffuse的物体能量损失越多,从而使粗糙物体渲染偏暗。

GGX + height-correlated masking & shadowing 的组合下,粗糙度参数(rough)为1时的能量损耗接近60%。

能量损失:

能量守恒(GGX 单散射 + The Kulla-Conty Approxiamation):

实现多重散射微平面BRDF(Multiple-scattering microfacet BRDF)可以保证能量守恒(能量几乎没有损失),但是不适用于实时渲染。

  • The Kulla-Conty Approximation

是一种开销较小、适用于实时渲染的近似公式,它的主要思想是创建一个额外的BRDF Lobe(注意,该BRDF与之前的Microfacet BRDF形式完全不一样),作为能量补偿项(Energy Compensation Term)。

首先,我们需要算出菲涅尔项系数 \(F_0\)​​​ 设置为 1 的原始BRDF项 \(f_r\)​​​ 的余弦加权半球积分,即为 \(\omega_{r}\)​​​ 方向反射的能量百分比,也叫方向反照率(Directional Albedo)

\(E(\omega_{r})=E(\mu_o)= \int_{\Omega^{+}}f_r\left(\mu_o, \omega_{i} \right)\left(n \cdot \omega_{i} \right) \mathrm{d} \omega_{i} =\int_{0}^{2 \pi} \int_{0}^{1} f_r\left(\mu_{o}, \mu_{i}, \phi\right) \mu_{i} d \mu_{i} d \phi\)​​​​

此处实际上就是将渲染方程中的 \(L\) 移除(不考虑颜色,仅考虑能量率)。此外, \(w\) 方向与平面的夹角为仰角 \(\mu\) ,BRDF 对不同方向但仰角相同的处理是一致的,因此可用且常用仰角 \(\mu\) 代替 \(\omega\)​ 方向。

\(E \in [0,1]\)​​,取值依赖于参数粗糙度(rough) \(\alpha\)​​ 和仰角 \(\mu\)​ ,不过由于这个函数相对平滑,因此可以在数值上预计算,并存储在一个小的2D Texture中(一般32×32分辨率就足够了)。

那么缺失的能量百分比将是:\(1-E(\mu_o)\)​​

我们期望额外的BRDF项 \(f_{ms}\)​​ :

  1. 满足它的余弦加权半球积分等于缺失能量百分比
  2. 满足光照方向的对称性(交换 \(\mu_o\)\(\mu_i\)​​​​ 不改变BRDF的值)

Sony ImageWork的Kulla和Conty按照这样的规则设计出的附加BRDF是:

\(f_{\mathrm{ms}}\left(\omega_{r}, \omega_{i}\right)=\frac{\left(1-E\left(\mu_o\right)\right)\left(1-E\left(\mu_i\right)\right)}{\pi\left(1-E_{\mathrm{avg}}\right)}\)​​​​

其中,\(E_{avg}\) 是半球上 \(E\) 的余弦加权平均值 \(E_{\mathrm{avg}}= \frac{\int_{\Omega^{+}}E\left(\omega_{i} \right)\left(n \cdot \omega_{i} \right) \mathrm{d} \omega_{i}}{\int_{\Omega^{+}}\left(n \cdot \omega_{i} \right) \mathrm{d} \omega_{i}}=2 \int_{0}^{1} E(\mu) \mu \mathrm{d} \mu\) ,取值仅依赖于参数粗糙度 \(α\),因此可以存储在一维纹理中,或者可以将廉价的曲线拟合到数据中。

推导过程:假设额外BRDF的形式为 \(f_{ms}=c(1-E(\mu_o))(1-E(\mu_i))\)​​​​ ,这种形式可以满足光照方向对称性。

\(\begin{aligned} E_{\mathrm{ms}}\left(\mu_{o}\right) &=\int_{0}^{2 \pi} \int_{0}^{1} f_{\mathrm{ms}}\left(\mu_{o}, \mu_i, \phi\right) \mu_i d \mu_i d \phi \\ &=2 \pi \int_{0}^{1} c\left(1-E\left(\mu_{o}\right)\right)\left(1-E\left(\mu_i\right)\right) \mu_i d \mu_i \\ &=2 \pi c (1-E\left(\mu_{o}\right)) \int_{0}^{1}\left(1-E\left(\mu_i\right)\right) \mu_i d \omega_{i} \\ &= \pi c (1-E\left(\mu_{o}\right))\left(1-E_{\mathrm{avg}}\right) \\ \end{aligned}\)

令 $E_{ms}(\mu_o) =1-E\left(\mu_{o}\right) $​​,即令满足 \(f_{ms}\)​​ 的余弦加权半球积分等于缺失能量率,则解得:

\(c=\frac{1}{\pi(1-E_{avg})}\)

如果表面材质具有吸收或者发出能量(BRDF输出带有颜色)的特性时的附加BRDF将是:

\(f_{m s}(\omega_r, \omega_i)=\frac{F_{avg} E_{avg}}{1-F_{avg}\left(1-E_{avg}\right)}\cdot \frac{\left(1-E(\mu_o)\right)\left(1-E(\mu_i)\right)}{\pi\left(1-E_{avg}\right)}\)​​​​​

其中, \(F_{avg}\) 为平均菲尼尔项(半球上的余弦加权平均值):\(F_{avg} = 2\int^{1}_{0}F(\mu)d\mu\) ,若使用原始Schilick近似,则 $F_{avg} =\frac{20}{21} \cdot F_{0}+\frac{1}{21} $​

推导过程:

假设表面若干次散射的能量都是diffuse的,因此可认为每次散射的能量都会乘于 \(F_{avg}\)

因此经过微平面直接反射出来的能量为:\(F_{avg}E_{avg}\)​​​

一次间接反射出来的能量(”损耗“的能量再经过微平面反射出来)则应为:\(F_{avg}(1-E_{avg}) \cdot F_{avg} E_{avg}\)

...

k次间接反射出来的能量应为:\(F_{avg}^k(1-E_{avg})^k \cdot F_{avg} E_{avg}\)

将所有这些能量加起来得到这样一个颜色项: \(\frac{F_{\mathrm{avg}} E_{\mathrm{avg}}}{1-F_{\mathrm{avg}}\left(1-E_{\mathrm{avg}}\right)}\)​​​

这个颜色项直接与无颜色的附加BRDF相乘即可得到带颜色的附加BRDF。

最终,使用了能量补偿项的渲染方程将会是这个样子:

\(L_{r}\left(x, \omega_{r}\right)=L_{e}\left(x, \omega_{r}\right)+\int_{\Omega^{+}} L_{i}\left(x, \omega_{i}\right) (f_{r}\left(x, \omega_{i}, \omega_{r} \right)+f_{ms}\left(\omega_{i}, \omega_{r} \right))\left(n \cdot \omega_{i}\right) \mathrm{d} \omega_{i}\)

迪士尼原则 BRDF(Disney’s Principled BRDF)

迪士尼原则的BRDF(Disney Principled BRDF)是开发一种面向艺术家的易用模型,而不是严格的物理模型。它能让美术同学用非常直观的少量参数,以及非常标准化的工作流,就能快速实现涉及大量不同材质的真实感的渲染工作。

以前,基于物理的渲染(Physically Based Rendering , PBR)技术的参数还比较复杂难调,因此没有多少人使用。当迪士尼原则的BRDF(Disney Principled BRDF)在SIGGRAPH 2012被提出后,由于其高度的易用性以及方便的工作流,已经被电影和游戏业界广泛使用,并成为了次时代高品质渲染技术的代名词。

核心理念如下:

  1. 应使用直观的参数,而不是物理类的晦涩参数。
  2. 参数应尽可能少。
  3. 参数在其合理范围内应该为0到1。
  4. 允许参数在有意义时超出正常的合理范围。
  5. 所有参数组合应尽可能健壮和合理。

以上述理念为基础,最终得到了一个颜色参数(baseColor)和下面描述的十个标量参数:

  • baseColor(基础色):表面颜色,通常由纹理贴图提供。
  • subsurface(次表面):使用次表面近似控制漫反射形状。
  • metallic(金属度):金属(0 =电介质,1 =金属)。这是两种不同模型之间的线性混合。金属模型没有漫反射成分,并且还具有等于基础色的着色入射镜面反射。
  • specular(镜面反射强度):入射镜面反射量。用于取代折射率。
  • specularTint(镜面反射颜色):对美术控制的让步,用于对基础色(base color)的入射镜面反射进行颜色控制。掠射镜面反射仍然是非彩色的。
  • roughness(粗糙度):表面粗糙度,控制漫反射和镜面反射。
  • anisotropic(各向异性强度):各向异性程度。用于控制镜面反射高光的纵横比。 (0 =各向同性,1 =最大各向异性。)
  • sheen(光泽度):一种额外的掠射分量(grazing component),主要用于布料。
  • sheenTint(光泽颜色):对sheen(光泽度)的颜色控制。
  • clearcoat(清漆强度):有特殊用途的第二个镜面波瓣(specular lobe)。
  • clearcoatGloss(清漆光泽度):控制透明涂层光泽度,0 =“缎面(satin)”外观,1 =“光泽(gloss)”外观

总结


所谓的基于物理的渲染(Physically Based Rendering,PBR),实际上就是整套渲染的每个成分(包含材质、光照、摄像机、光路light transport等)都遵循了更加正确的物理原理,不过平时人们提起PBR经常是指材质,即与之相关的BxDF。

不过,单单 BxDF 内容也有很多更高级的话题:

  • BSDF:BSDF = BRDF + BTDF,即和BRDF相比,额外考虑光线从物体内部穿过的情况(透射现象),常用于半透明的材质。
  • BSSRDF:和BSDF相比,额外考虑次表面散射的现象(认为不单单只有一个表面),常用于半透明且内部成分复杂的物体(包括玉石、皮肤),基本上需要搭配ray tracing来实现。
  • 等等...

各种进阶材质:

  • 皮肤渲染(Skin Rendering)
  • 布料渲染(Cloth Rendering)
  • 半透明表面渲染(Translucent Surfaces Rendering)
  • 头发渲染(Hair Rendering)
  • 毛发渲染(Fur Rendering)
  • 车漆渲染(Car Paint Rendering)
  • 水体渲染(Water Rendering)
  • 湿润表面渲染(Wet Surface Rendering)
  • 天空与大气渲染(Sky and Atmosphere Rendering)
  • 薄表面材质渲染(Thin Surface Rendering)
  • 体积渲染(Volumetric Rendering)
  • 等等...

PBR 是一块内容庞大的主题,《Physically based rendering: From theory to implementation》算是覆盖比较全但很难啃完的进阶书籍,只能先尽量掌握好这些常见且基础的 PBR 知识。

参考