PBR中的辐射度量学

PBR的核心法则是基于物理,在渲染领域最关注的就是光,更具体而言是光的表现以及光和物体的交互。而光也是一种电磁辐射,因此渲染中最主要的理论依据都源自辐射度量学(radiometry),这是专门研究电磁辐射量化的学科。

Domains and measures

在量化电磁辐射之前,需要对场景有一个定义。首先将场景几何抽象为 (R^3)​​​ 中的面(surfaces)的有限集 (mathrm{M}) ,这里的表面是指分段可微的二维流形(Manifold),出于实现考虑,这里的流形默认都是存在边界 (partial M) 的,否则邻接面之间可能会存在缝隙(gaps)。而 (mathrm{M})​​ 作为一个集合,其本身并不一定是流形,如:仅含两个相切球的场景。

这些表面会把整个空间划分为一个个相连的区域,而为了简化模型,这里先不考虑体吸收(volume absorption)、自发光(emission)、散射(scattering)等情况,即假设每个区域中都只有非参与介质,这些介质被抽象描述为一个固定的折射率。当然,表面也不一定充当区域划分的边界,如:一个悬浮的平台。

对于一个域 (Dsubsetmathrm{M})​ ,定义度量 (A(D))​​ 表示该域的面积,则勒贝格(Lebesgue)积分为

[int_mathrm{M}f(x) dA(x) ]

其中, (f:mathrm{M} ightarrow R)​ 是关于表面积的函数。

而方向可以被定义为一个单位向量 (omegain R^3)​​ ,所有方向构成一个集合 (S^2)​​​ ,显然这是空间中的单位球面。设 (sigma)​​ 表示 (S^2)​​ 上的面积度量,则对于给定的方向集合 (Din S^2)​​​​ ,可以定义其对应的立体角(solid angle)为 (sigma(D))​​ 。类似地,对于一个表面 (P)​​ ,将其上的点投影到以点 (x)​​ 为球心的单位球面上,这些点所代表的方向的集合的度量,即为 (P)​​ 在点 (x)​​​​​​ 处所对的(subtend,类似平面几何中线段相对于点的对角)立体角。从定义可以看出,立体角本质上是一种面积度量,可以理解为:我们站在某点观测某一物体,物体表面上的每一点都对应着一个观测方向,这些观测方向单位化后的集合也就是对应的立体角。由此,我们可以把通量等描述在由方向构成的立体角上,这么做有利于简化之后对光的各种物理量的描述。

由此派生的一个概念就是投影立体角(projected solid angle),这一概念通常用于描述irradiance。对于给定点 (x)(N(x)) 表示表面法线,给定一个方向集合 (Dsubset S^2) ,投影立体角 (sigma_x^perp) 定义为

[sigma_x^perp(D)=int_D|omegacdot N(x)| dsigma(omega) ]

其中,点积通常也被写为 (cos heta) ,这里的 ( heta) 是指 (omega) 的极角,即 (omega)​ 与法线的夹角。

其名称源于最初定义时使用了投影这一操作。设 (T_M(x)) 为点 (x) 的切空间,即由垂直于法线的向量构成的空间

[T_M(x)={yin R^3|ycdot N(x)=0 } ]

注意:这里所定义的切空间包含了原点,即这是一个线性空间,而非仿射空间。整个切空间将 (S^2) 分为了两个半球,分别为上半球:

[H_+^2(x)={omegain S^2|omegacdot N(x)>0} ]

和下半球:

[H_-^2(x)={omegain S^2|omegacdot N(x)<0} ]

对于任一半球上一个给定的方向集合 (D)​​ ,其投影立体角就是该集合正交投影到切空间后的面积度量。一个最简单的例子:对于一点处的整个上半球表面,其对应的投影立体角就是整个单位圆,故

[sigma_x^perp(H_+^2)=pi ]

The phase space

普遍的transport理论研究的是抽象环境中的粒子运动,由于光的粒子性,基于该理论可以定义一系列和辐射相关的物理量。

我们可以用若干时变参数(参数是时间的函数)描述一个粒子。最基本地,可以用位置和速度两个参数描述一个粒子,其包含6个自由度。由此,可以用一个 (6N) 维向量描述一个包含 (N) 个粒子的系统。而我们可以将系统状态视为一个在 (6N)​ 维相空间(phase space)中的点,这个空间包含了所有可能的系统状态。系统状态随时间的改变,在相空间上反映为一条一维曲线。

假设光不发生偏振和干涉,则每个光子可由位置 (x) ,运动方向 (omega) ,波长 (lambda) 描述。若方向用立体角描述,此模型下,整个相空间也是 (6N)​​ 维。对于不发生相互作用的粒子(如:光子),保留这么高维度的相空间意义不大,此时可以让相空间维度对应于单个粒子的状态。基于这个约定,相空间 (psi) 可以降至 (6) 维,且可表示为

[psi=R^3 imes S^2 imes R^+ ]

此时可以用该空间中的 (N)​​ 个点表示整个系统的状态,每个点的位置(六个维度的坐标)均为时变参数。

辐射度量学中涉及的物理量都可以在相空间中给出度量,度量值可以经简单计算给定区域中光子的数量而得出,也可以由一或多个参数的density导出定义。如最基本的,光子数量 (N_P)​ 就是相空间中给定域内的光子数量的度量。

The trajectory space and photon events

在相空间的基础上显式引入时间维度,考虑将相空间中的所有光子随时间的变化以图的方式描述出来,我们可以得到一组一维曲线,并称这组曲线所在的空间为轨迹空间(trajectory space)

[Psi=R imespsi ]

辐射的各种度量就定义在这些曲线上,沿这些曲线指定一组光子事件(photon events),然后通过多种方式测量事件的分布,即可定义一个度量。

事件:在物理学中,是指时空间和相空间所指定的时空中的一点,即轨迹空间中的一点。

通过指定一个时间面得到该面与光子轨迹的交点,即可定义一个光子事件。如:选取一个时间 (t_0)​​ ,在轨迹空间中,超平面 (t=t_0)​​​​ 与光子轨迹的交点就是该时刻的光子状态,即光子事件。同样,对于给定的 (R^3)​​ 中的平面 (P)​​ ,可以定义光子事件为 (P)​​ 在轨迹空间中与超平面 (R imes P imes S^2 imes R^+)​​​​ 的交集。

一个合理的假设是,轨迹空间包含着数量庞大的事件,因此,事件的密度可以采用连续分布进行建模。也就是说,虽然实际上一个光子的能量是固定的,能量的分布是离散的,但我们可以假设其可以是任意非负实数,能量的取值是连续的。

Radiometric quantities

辐射的度量总是围绕几个重要的物理量展开,而以下的定义是经过简化的,并非完全严格的公理化定义。

Power

辐射量(radiant power)是指单位时间内的能量(energy)

[Phi={dQover dt} ]

其量纲为瓦特 (mathrm{watts[W=Jcdot s^{-1}]})​​ ,描述的是有限表面 (Ssubset R^3)​​ 发出或吸收的能量的速率。

通常并不会直接定义 (Q) ,而是定义轨迹空间中的某个区域 (D(t)) ,该区域随时间变化,而区域内的光子能量即为 (Q(t))​ 。例如:考虑度量区域

[D(t)=[0,t] imes S imes S^2 imes R^+ ]

中发出的能量,其中, (Ssubset R^3)​ 为有限表面,则 (Q(t))​ 表示 (S)​ 在时间 ([0,t])​ 所发出的能量,故

[Phi(t)={dQ(t)over dt} ]

表示的就是单位时间发出的能量。这也是更为直观的形式。但通常我们只关注系统达到稳态时的能量分布,此时相空间并不随时间改变,可忽略参数 (t) ,回到定义的形式。

Irradiance

辐照度(irradiance)是指单位面积的辐射量

[E(x)={dPhi(x)over dA(x)} ]

其量纲为 ([Wcdot m^{-2}]) 。其定义总是依赖于点 (x) 以及确定的法线 (N(x))​ 所确定的平面,而ir词缀其实也暗示着其通常用于描述接收的辐射,且通常是在一个面上的辐射,即来自指定的半球。

Radiance

辐射(radiance)描述的是点 (x) 处,对于给定方向 (omega) ,在微分立体角 (dsigma(omega)) 内,通过微表面 (dA_omega^perp(x)) 的能量

[L(x,omega)={d^2Phi(x,omega)over dA_omega^perp(x) dsigma(omega)} ]

其中, (A_omega^perp)​ 是垂直于 (omega)​​ 的一个假想平面。其量纲为 ([Wcdot m^{-2}cdot sr^{-1}])​ ,其中, (sr)​​​ 是立体角的量纲steradian。在定义中,接收平面是必须垂直于给定方向的,即考量的总是投影面积。

而当度量的是一个实际的平面 (S) 上的radiance时,公式可以更直观地表示为

[L(x,omega)={d^2Phi(x,omega)over|omegacdot N(x)| dA(x) dsigma(omega)} ]

其中, (A)(S) 的面积, (N(x)) 是表面法线,上式实际上包含了求投影的运算,因为

[dA_omega^perp(x)=|omegacdot N(x)| dA(x) ]

而根据投影立体角的定义, (cos) 项可以与微分立体角组合构成微分投影立体角,则有

[L(x,omega)={d^2Phi(x,omega)over dA(x) dsigma_x^perp(omega)} ]

这也是最常使用的式子,因为这里参与运算的是 (S) 的实际面积 (A)

Spectral radiance

将波长纳入考虑即可进一步定义光谱辐射(spectral radiance)

[L_lambda={dLover dlambda} ]

[L_lambda(x,omega,lambda)={d^3Phi(x,omega)over dA(x) dsigma_x^perp(omega) dlambda} ]

其量纲为 ([Wcdot m^{-2}cdot sr^{-1}cdot nm^{-1}])​ 。同理可定义spectral power等。光谱辐射通常作为最基本的物理量,其他量都可以由其推出,如对波长积分可以得到radiance,对投影角积分可以得到irradiance。

Incident and exitant radiance functions

通常我们研究的函数采用如下形式

[L:mathrm{M} imes S^2 ightarrow R ]

即radiance表示为场景中的面和立体角构成的相空间到一维空间的映射,等价于

[L:R^3 imes S^2 ightarrow R ]

虽然物理上,radiance不能为负,但为了保证空间的线性性,我们仍保留其中的负数部分。根据 (omega)​ 的不同,我们把radiance分为incident(入射) radiance和exitant(出射) radiance。incident radiance (L_i(x,omega))​ 描述的是从 (omega)​ 方向到达 (x)​ 点的radiance,exitant radiance (L_o(x,omega))​ 描述的是在 (x)​ 点沿 (omega)​​ 方向发出的radiance,显然有

[L_i(x,omega)=L_o(x,-omega) ]

但实际上,划分为这两类是因为其具有本质区别,前者表示的是光子到达表面前的状态,后者表示的是光子离开表面后的状态。

The bidirectional scattering distribution function

0000

双向散射分布函数(bidirectional scattering distribution function,BSDF)是对表面光线散射性质的数学描述。设场景中某表面上一固定点为 (xinmathrm{M}) ,考察在方向 (omega) 上从 (x) 发出的radiance (L_o(omega_o)) ,这里暂时忽略位置 (x) ,显然 (L_o(omega_o)) 的值取决于在所有方向上总共有多少radiance到达了 (x) 。首先分析来自某个特定的入射方向的贡献,考虑入射方向 (omega_i) ,以 (omega_i) 为轴构建一个极小椎体,这个椎体可以描述为一个微分立体角 (dsigma(omega_i))​ ,来自该椎体的入射光击中表面上的点 (x) 并产生irradiance (dE(omega_i))

[dE(omega_i)=L_i(omega_i) dsigma^perp(omega_i) ]

随后这部分光线会被表面散射到各个方向,设沿方向 (omega_o) 散射的radiance为 (dL_o(omega_o)) ,由于一般情况下光都是可简单叠加的,即满足线性性,因此无论 (dE(omega_i)) 的变化是来自 (L_i) 还是 (dsigma(omega_i))​ ,都有

[dL_o(omega_o)propto dE(omega_i) ]

而BSDF (f_s(omega_i ightarrowomega_o)) 描述的正是这个比例常数,即

[f_s(omega_i ightarrowomega_o)={dL_o(omega_o)over dE(omega_i)}={dL_o(omega_o)over L_i(omega_i) dsigma^perp(omega_i)} ]

用自然语言描述上式: (f_s(omega_i ightarrowomega_o)) 表示来自 (omega_i) 的每一单位irradiance会有多少比例被转化为 (omega_o) 方向上出射的radiance, (omega_i ightarrowomega_o) 形象描述光的传播方向。

The scattering equation

根据BSDF的定义,我们可以把differential exitant radiance表示为

[dL_o(omega_o)=L_i(omega_i)f_s(omega_i ightarrowomega_o) dsigma^perp(omega_i) ]

此时只要对来自所有方向的irradiance对radiance的贡献求积分,就可以得到 (omega_o)​ 方向上的exitant radiance了,即

[L_o(omega_o)=int_{S^2}L_i(omega_i)f_s(omega_i ightarrowomega_o) dsigma^perp(omega_i) ]

这就是(表面)散射方程(scattering equation)。

在有了散射方程之后,对于给定的入射光照,我们可以计算出表面任一点的radiance,基于几何光学对光的唯象表达,这个方程实际上就给出了物体表面外观(即材质)的一个数学表示(尽管它并不能描述所有的光学现象或材质表现)。

The BRDF and BTDF

BSDF并非辐射度量学中的标准概念。通常,散射光会被拆分为反射光(reflected)和透射光(transmitted)两部分,由此也就有了双向反射分布函数(bidirectional reflectance distribution function,BRDF) (f_r) 和双向透射分布函数(bidirectional transmittance distribution function,BTDF) (f_t)

通过限制域即可得到

[f_r:H_i^2 imesH_r^2 ightarrowR ]

其中, (H_i^2)(H_r^2) 分别为入射半球和反射半球,但其实两者表示的是同一个方向集合(上半球 (H_+^2) 或下半球 (H_-^2)​ )。

同理有

[f_t:H_i^2 imesH_t^2 ightarrowR ]

其中, (H_i^2=-H_t^2) ,即两者互补(同样,两者可分别为上半球 (H_+^2) 和下半球 (H_-^2) ,或相反)。

因此,BSDF其实是由两个BRDF和两个BTDF组成的(在两个半球上都各自需要一个BRDF和一个BSDF)。

由于BRDF描述的是实际表面上的性质,其具有一些天然的性质,其中最主要的是对称性(symmetric)和能量守恒(energy conservation)。

对称性即

[f_r(omega_i ightarrowomega_o)=f_r(omega_o ightarrowomega_i),forallomega_i,omega_o ]

能量守恒即

[int_{H_o^2}f_r(omega_i ightarrowomega_o) dsigma^perp(omega_o)le1,forallomega_iinH_i^2 ]

Angular parameterizations of the BSDF

采用单位向量描述的立体角在计算上并不方便,因此需要对角度进行参数化。对于 (omegain S^2) ,其可以表示为一组角向量 (( heta,phi)) ,其中极角(polar angle) ( heta) 是指 (omega) 和法线 (N) 的夹角,方位角(azimuthal angle) (phi) 是指在切空间内 (omega)(x) 处的一个特定方向 (T) 的夹角,即有

[egin{aligned} cos heta=omegacdot N\ cosphi=omegacdot T end{aligned} ]

50PxCF.png

由于立体角是一种面积度量,这里使用微元法分析面积即可自然得到微分立体角的表示。微分立体角可表示为

[dsigma(omega)equiv sin heta d heta dphiequiv d(-cos heta) dphi ]

微分投影立体角也可以表示为多种形式

[egin{aligned} dsigma^perp(omega) &equiv|cos heta|sin heta d heta dphi\ &equiv|cos heta| d(-cos heta) dphi\ &equivsin heta dsin heta dphi\ &equiv{1over2} d(-cos^2 heta) dphi\ &equiv{1over2} dsin^2 heta dphi end{aligned} ]

[int_{S^2} dsigma^perp(omega_i)=int_0^{2pi}int_0^pi|cos heta|sin heta d heta dphi ]

由此,scattering equation可以改写为

[L_o( heta_o,phi_o)=int_0^{2pi}int_0^pi L_i( heta_i,phi_i)f_s( heta_i,phi_i, heta_o,phi_o)|cos heta_i|sin heta d heta_i dphi_i ]

虽然引入了参数化的角度表示,但向量表示仍有其优势

  • 首先 (( heta,phi))​ 是一个局部的方向表示,因为这两个角度都依赖于表面法线
  • 在涉及多个表面点的分析中,采用参数表示并不直观
  • 参数表示引入了三角函数项,而这部分实际上又是由向量点积实现的
  • 参数表示还依赖于切向量 (T) 以规定一个初始的azimuthal angle,而这并没有任何物理意义

Reference

Eric, Robust Monte Carlo Methods For Light Transport Simulation

原文地址:https://www.cnblogs.com/Li-F/p/15426599.html