PBRT学习笔记4 -- 表面模型和渲染方程

Surface Model and Rendering Equation

Surface Model

当光照射到表面时,表面会散射光线,并将其中一部分反射回环境中,这种反射有两个主要的效应:反射光的光谱分布和它的方向分布

光谱分布决定了哪些颜色的光会被表面吸收,例如柠檬表皮主要吸收蓝色波长的光,因此在白光照射下,无论从哪个方向看颜色都是偏黄的;而方向分布决定了表面会向那些方向反射光,例如镜子中一点反射出来的光几乎完全取决于观察方向,在镜子上的一个固定点,随着视角的变化,反射到镜子中的物体也随之变化。

半透明表面的反射则更为复杂,因为我们还需要考虑光线散射到次表面,再由次表面反射回来的光。

有两个模型都用于描述光的反射机制:BRDF 和 BSSRDF。BRDF 忽略次表面的光传输,使渲染算法的实现更加高效;相反的,BSSRDF 能够用于模拟更多的半透明材质,但是开销更大。

The BRDF and the BTDF

双向反射分布函数(Bidirectional reflection distribution function,BRDF)提供了一种描述表面反射的形式,如下图所示,我们关心有多少 radiance L i ( p , ω i ) L_i(p,\omega_i) Li(p,ωi)从光线入射方向 ω i \omega_i ωi进入点 p,又有多少 radiance L o ( p , ω o ) L_o(p,\omega_o) Lo(p,ωo)从方向 ω o \omega_o ωo离开了 p 点,照射到了观察者眼中。
在这里插入图片描述
如果考虑微分立体角 d ω i \mathrm{d}\omega_i dωi上射来的 radiance,则可以将这个立体角带来的微分 irradiance 写作:

d E ( p , ω i ) = L i ( p , ω i ) cos ⁡ θ i   d ω i \begin{equation} \mathrm{d}E(p,\omega_i)=L_i(p,\omega_i)\cos\theta_i\,\mathrm{d}\omega_i \end{equation} dE(p,ωi)=Li(p,ωi)cosθidωi

这个微分 irradiance 将引起反射到 ω o \omega_o ωo方向上的 radiance 的微小改变,基于几何光学的线性假设,反射的微分 radiance 与获得的微分 irradiance 成正比: d L o ( p , ω o ) ∝ d E ( p , ω i ) \mathrm{d}L_o(p,\omega_o)\propto\mathrm{d}E(p,\omega_i) dLo(p,ωo)dE(p,ωi)

随后,我们就可以将这个比例系数定义为是这个表面 p 点的 BRDF f r f_r fr,有:

f r ( p , ω o , ω i ) = d L o ( p , ω o ) d E ( p , ω i ) = d L o ( p , ω o ) L i ( p , ω i ) cos ⁡ θ i   d ω i \begin{equation} f_r(p,\omega_o,\omega_i)=\frac{\mathrm{d}L_o(p, \omega_o)}{\mathrm{d}E(p,\omega_i)}=\frac{\mathrm{d}L_o(p, \omega_o)}{L_i(p, \omega_i)\cos\theta_i\,\mathrm{d}\omega_i} \end{equation} fr(p,ωo,ωi)=dE(p,ωi)dLo(p,ωo)=Li(p,ωi)cosθidωidLo(p,ωo)

由于 f r ( p , ω i , ω o ) f_r(p,\omega_i,\omega_o) fr(p,ωi,ωo)是一个关于入射角和出射角的函数,因此在每一个点上,它都是一个四维的函数( ω \omega ω需要使用 θ \theta θ ϕ \phi ϕ两个值表示)

基于物理的 BRDF 有两个重要性质:

  1. 交换性(Reciprocity):对于任意 ω i \omega_i ωi ω o \omega_o ωo,都有 f r ( p , ω i , ω o ) = f r ( p , ω o , ω i ) f_r(p,\omega_i,\omega_o)=f_r(p,\omega_o,\omega_i) fr(p,ωi,ωo)=fr(p,ωo,ωi)
  2. 能量守恒(Energy conservation):反射光的总能量小于或等于入射光的能量。对于所有 ω o \omega_o ωo都有, ∫ H 2 ( n ) f r ( p , ω o , ω ′ ) cos ⁡ θ ′   d ω ′ ≤ 1 \int_{H^2(\bold{n})}f_r(p,\omega_o,\omega')\cos\theta'\,\mathrm{d}\omega'\leq1 H2(n)fr(p,ωo,ω)cosθdω1

关于 BRDF 有两个有用的量。

第一,半球定向反射率(hemispherical-directional reflectance),用 ρ h d ( ω o ) \rho_{hd}(\omega_o) ρhd(ωo)表示,它是一个关于出射方向的二维函数,它表示了出射方向$\omega_o $在各个方向的 radiance 都为一个常数的情况下的反射率总量,写作:

ρ h d ( ω o ) = ∫ H 2 ( n ) f r ( p , ω o , ω i ) ∣ cos ⁡ θ i ∣   d ω i \begin{equation} \rho_{hd}(\omega_o)= \int_{H^2(\bold{n})}f_r(p,\omega_o,\omega_i)|\cos\theta_i|\,\mathrm{d}\omega_i \end{equation} ρhd(ωo)=H2(n)fr(p,ωo,ωi)cosθidωi

第二,半球面-半球面反射率(hemispherical-hemispherical reflectance),用 ρ h h \rho_{hh} ρhh表示,它表示当所有方向的 radiance 相同时,表面对光线的反射率(对应被吸收的部分),写作:

ρ h h = 1 π ∫ H 2 ( n ) ∫ H 2 ( n ) f r ( p , ω o , ω i ) ∣ cos ⁡ θ o cos ⁡ θ i ∣   d ω o   d ω i \begin{equation} \rho_{hh}=\frac1\pi\int_{H^2(\bold{n})}\int_{H^2(\bold{n})} f_r(p,\omega_o,\omega_i)|\cos\theta_o\cos\theta_i|\,\mathrm{d}\omega_o\,\mathrm{d}\omega_i \end{equation} ρhh=π1H2(n)H2(n)fr(p,ωo,ωi)cosθocosθidωodωi

而一个表面的双向透射率分布函数(bidirectional transmittance distribution function, BTDF)则描述了透射光的分布,它可以用 BRDF 类似的方法定义,BTDF 写作 f t ( p , ω o , ω i ) f_t(p,\omega_o,\omega_i) ft(p,ωo,ωi),其中 ω i \omega_i ωi ω o \omega_o ωo在点 p 两个不同的半球上,值得注意的是,BTDF 不满足交换性。

The BSDF

当我们同时考虑 BRDF 和 BTDF 时,我们可以将其写作 f ( p , ω o , ω i ) f(p,\omega_o,\omega_i) f(p,ωo,ωi),这个函数被称为双向散射分布函数(bidirectional scattering distribution function, BSDF),使用 BSDF 的概念,我们可以得到:

d L o ( p , ω o ) = f ( p , ω o , ω i ) L i ( p , ω i ) ∣ cos ⁡ θ i ∣   d ω i \begin{equation}\mathrm{d}L_o(p, \omega_o)= f(p,\omega_o,\omega_i) L_i(p, \omega_i) |\cos\theta_i| \,\mathrm{d}\omega_i \end{equation} dLo(p,ωo)=f(p,ωo,ωi)Li(p,ωi)cosθidωi

由此,我们可以在入射方向的球面上对这个方程进行积分,计算出由于来自各个方向的入射 radiacne 带来的出射 radiance:

L o ( p , ω o ) = ∫ S 2 f ( p , ω o , ω i ) L i ( p , ω i ) ∣ cos ⁡ θ i ∣   d ω i \begin{equation} L_o(p,\omega_o)=\int_{S^2}f(p,\omega_o,\omega_i)L_i(p,\omega_i)|\cos\theta_i|\,\mathrm{d}\omega_i \end{equation} Lo(p,ωo)=S2f(p,ωo,ωi)Li(p,ωi)cosθidωi

这是渲染中的一个基本等式,它描述了基于表面的散射特性,光在一点上的入射分布如何转化为出射分布,它被称为 scattering equation,对应的仅积分半球 BRDF 的方程被称为 reflection equation。

The BSSRDF

双向散射表面反射分布函数(bidirectional scattering surface reflectance distribution function, BSSRDF)用于描述具有次表面光传输的材料,写作 S ( p o , ω o , p i , ω i ) S(p_o,\omega_o,p_i,\omega_i) S(po,ωo,pi,ωi),它表示的是出射点 p o p_o po向出射方向 ω o \omega_o ωo的微分 radiance 与入射点$p_i 从入射方向 从入射方向 从入射方向\omega_i$得到的微分 flux 之间的比值:

S ( p o , ω o , p i , ω i ) = d L o ( p o , ω o ) d Φ ( p i , ω i ) \begin{equation} S(p_o,\omega_o,p_i,\omega_i)=\frac{\mathrm{d}L_o(p_o, \omega_o)}{\mathrm{d}\Phi(p_i,\omega_i)} \end{equation} S(po,ωo,pi,ωi)=dΦ(pi,ωi)dLo(po,ωo)

如下图所示,BSSRDF 是对 BSDF 的更一般表示,它在 BSDF 的基础上还考虑了对出射点周围的所有点进行积分。
在这里插入图片描述

BSSRDF 的渲染方程如下:

L o ( p , ω o ) = ∫ A ∫ H 2 ( n ) S ( p o , ω o , p i , ω i ) L i ( p i , ω i ) ∣ cos ⁡ θ i ∣   d ω i   d A \begin{equation} L_o(p,\omega_o)=\int_A\int_{{H^2(\bold{n})}}S(p_o,\omega_o,p_i,\omega_i)L_i(p_i,\omega_i)|\cos\theta_i|\,\mathrm{d}\omega_i\,\mathrm{d}A \end{equation} Lo(p,ωo)=AH2(n)S(po,ωo,pi,ωi)Li(pi,ωi)cosθidωidA

BSSRDF 的渲染方程相比 BSDF 的更加复杂,值得注意的是 BSSRDF 只需积分表面半球而不是整个球面。

表面下的光传输与参与介质中的体积光传输的原理相同。

Radiometric Integrals(辐射积分)

在 BRDF 中,我们看到要对 radiance(或 irradiance)进行积分运算,这其中存在一些技巧,可以让我们更方便的计算这些积分。

假如我们需要计算一个表面上点 p 的 irradiance,可以将其表示为积分形式:

E ( p , n ) = ∫ Ω L i ( p , ω ) ∣ cos ⁡ θ ∣   d ω \begin{equation} E(p,\bold{n})=\int_{\Omega}L_i(p, \omega)|\cos\theta|{}\,\mathrm{d}\omega \end{equation} E(p,n)=ΩLi(p,ω)cosθdω

其中 L i ( p , ω ) L_i(p, \omega) Li(p,ω)是入射的radiance函数, cos ⁡ θ \cos\theta cosθ是为了描述 d A ⊥ \mathrm{d}A^\perp dA存在的, θ \theta θ ω \omega ω n \bold{n} n的夹角,irradiance的积分限一般是 n \bold{n} n 对应的单位半球上的立体角方向。
在这里插入图片描述

Integrals over Projected Solid Angle(投影立体角积分)

有时,为了避免积分中的余弦因子,我们还会将立体角投影到其对应的单位圆盘上,从而积分投影的立体角,它们之间的关系有 d ω ⊥ = ∣ cos ⁡ θ ∣ d ω \mathrm{d}\omega^{\perp}=|\cos\theta|\mathrm{d}\omega dω=cosθdω,因此可以将 irradiance 的积分写作:

E ( p , n ) = ∫ H 2 ( n ) L i ( p , ω )   d ω ⊥ \begin{equation} E(p,\bold{n})=\int_{H^2(\bold{n})}L_i(p, \omega){}\,\mathrm{d}\omega^{\perp} \end{equation} E(p,n)=H2(n)Li(p,ω)dω

如下图所示:
在这里插入图片描述

Integrals over Spherical Coordinates(球坐标积分)

为求得立体角上的积分,我们通常会用球坐标的极角和方位角 ( θ , ϕ ) (\theta,\phi) (θ,ϕ)来表示立体角,为实现这一点,我们先找到微分立体角和微分球坐标的关系 d ω = sin ⁡ θ   d θ   d ϕ \mathrm{d}\omega=\sin\theta\,\mathrm{d}\theta\,\mathrm{d}\phi dω=sinθdθdϕ

由此可以将 irradiance 的积分写作:

E ( p , n ) = ∫ 0 2 π ∫ 0 π / 2 L i ( p , θ , ϕ ) cos ⁡ θ sin ⁡ θ   d θ   d ϕ \begin{equation} E(p,\bold{n})=\int_{0}^{2\pi}\int_{0}^{\pi/2} L_i(p,\theta,\phi)\cos\theta\sin\theta{}\,\mathrm{d}\theta\,\mathrm{d}\phi \end{equation} E(p,n)=02π0π/2Li(p,θ,ϕ)cosθsinθdθdϕ

如下图所示:
在这里插入图片描述
当各个方向 radiance 都相同时,有 E = π L i E=\pi{}L_i E=πLi

Integrals over Area

最后一个有用的变换是把方向积分变成面积积分,假设我们在考虑 irradiance 的积分时,明确知道光源来自于某一片区域 A A A(也许是一个四边形区域),同时知道光源发出的 radiance,这时若我们仍通过立体角 ω \omega ω进行积分,很有可能一大片区域的立体角 ω \omega ω都无法打到光源,使用蒙特卡洛积分采样 ω \omega ω会使效率非常低,这让我们想到了可以对光源进行采样,由此,我们需要建立对区域 A A A的积分公式。

在如下图所示的情况下,我们可以计算出微分立体角与微分区域面积之间的关系为: d ω = d A cos ⁡ θ r 2 \mathrm{d}\omega=\frac{\mathrm{d}A\cos\theta}{r^2} dω=r2dAcosθ
在这里插入图片描述
由此将原积分问题写作:

E ( p , n ) = ∫ A L cos ⁡ θ i cos ⁡ θ o   d A r 2 \begin{equation} E(p,\bold{n})=\int_{A}L\cos\theta_i\frac{\cos\theta_o\,\mathrm{d}A}{r^2} \end{equation} E(p,n)=ALcosθir2cosθodA

其中, θ i \theta_i θi是方位角与 p 点法线的夹角, θ o \theta_o θo是方位角与区域 A A A法线的夹角。

此外,如果光源是不规则形状的,我们则可以积分包含光源的一整块区域 A A A,如下图所示。
在这里插入图片描述
这种方式就是闫令琪老师在Games101中讲Path tracing时使用的积分转换

Rendering Equation(渲染方程)

Basic Form

Rendering Equation 依赖于我们在选择使用 radiometry 来描述光时所做的基本假设(线性,无偏振,能量守恒等),并且场景中的辐射分布处于平衡状态,在宏观上,我们有能量守恒定理 Φ o − Φ i = Φ e − Φ a \Phi_o-\Phi_i=\Phi_e-\Phi_a ΦoΦi=ΦeΦa

假设表面的出射 radiance 为 L o L_o Lo,那么它一定等于表面自己发射的 radiance 和散射的 radiance 的总和,使用 scattering equation 下,rendering equation 为:

L o ( p , ω o ) = L e ( p , ω o ) + ∫ S 2 f ( p , ω o , ω i ) L i ( p , ω i ) ∣ cos ⁡ θ i ∣   d ω i \begin{equation} L_o(p,\omega_o)=L_e(p,\omega_o)+\int_{S^2}f(p,\omega_o,\omega_i)L_i(p,\omega_i)|\cos\theta_i|\,\mathrm{d}\omega_i \end{equation} Lo(p,ωo)=Le(p,ωo)+S2f(p,ωo,ωi)Li(p,ωi)cosθidωi

此公式最早由 Kajiya 提出,因此也被称为 Kajiya Rendering Equation,有时在其他材料中,渲染方程也会被称为光传输方程(Light Transport Equation, LTE)。

若我们考虑几何体之间没有介质(media),那积分中的 L i ( p , ω i ) L_i(p,\omega_i) Li(p,ωi)一定是某个点 p ′ p' p的出射 radiance,如下图所示。设 ray-casting function 为 p ′ = t ( p , ω ) p'=t(p,\omega) p=t(p,ω),我们即可把入射 radiance 写作出射 radiance 形式 L i ( p , ω i ) = L o ( t ( p , ω ) , − ω ) L_i(p,\omega_i)=L_o(t(p,\omega),-\omega) Li(p,ωi)=Lo(t(p,ω),ω)
在这里插入图片描述

Lambertian 材质的 BRDF

Lambertian 材质,即常说的漫反射材质,打到它表面的光线会均匀分布在法线所对应的半球上,因此它的 BRDF 是一个常数, f r = ρ π f_r=\frac{\rho}{\pi} fr=πρ。其中, ρ \rho ρ是漫反射系数,一维情况下,它的取值范围是 0 到 1,1 代表此材质不会导致颜色衰减,能反射所有能量,0 代表此材质将所有颜色全部吸收,不反射任何光线。若定义了一个漫反射物体的颜色,那这个颜色就是它的漫反射系数 ρ \rho ρ

推导

Lambertian 材质的 BRDF 处处相等,因此可以设 f r = c f_r=c fr=c,由于表面反照率为 ρ \rho ρ,因此 ∫ f r cos ⁡ ω i   d ω i = ρ \int{f_r}\cos\omega_i\,\mathrm{d}\omega_i=\rho frcosωidωi=ρ,设极角为 θ \theta θ,方位角为 ϕ \phi ϕ,改写成极坐标形式 ∫ 0 2 π ∫ 0 π 2 c ⋅ sin ⁡ θ   d θ   d ϕ = ρ \int^{2\pi}_0\int^{\frac{\pi}2}_0c\cdot{\sin\theta}\,\mathrm{d}\theta\,\mathrm{d}\phi=\rho 02π02πcsinθdθdϕ=ρ,由此算得 f r = c = ρ π f_r=c=\frac\rho\pi fr=c=πρ

实时渲染中的 Rendering Equation

而在实时渲染中,一般会将渲染方程进行改写,一般考虑实时渲染 RTR 下的渲染方程如下:

L o ( p , ω o ) = ∫ Ω + L i ( p , ω i ) f r ( p , ω i , ω o ) cos ⁡ θ i V ( p , ω i ) d ω i L_o(p,\omega_o)=\int_{\Omega^+}L_i(p,\omega_i)f_r(p,\omega_i,\omega_o)\cos\theta_iV(p,\omega_i)d\omega_i Lo(p,ωo)=Ω+Li(p,ωi)fr(p,ωi,ωo)cosθiV(p,ωi)dωi

其中不同点在于,渲染方程单独考虑 V ( p , ω i ) V(p,\omega_i) V(p,ωi)Visibility 项,而且通常会将 f r ( p , ω i , ω o ) cos ⁡ θ i f_r(p,\omega_i,\omega_o)\cos\theta_i fr(p,ωi,ωo)cosθi项合并看做 BRDF。

The Surface Form

除了立体角形式,rendering equation 也可以写作对表面进行积分的形式,考虑空间中三个点 p , p ′ , p ′ ′ p,p',p'' p,p,p′′,如下图所示。 p ′ p' p点的 BSDF 可以写作 f ( p ′ ′ → p ′ → p ) = f ( p ′ , ω o , ω i ) f(p''\to{}p'\to{p})=f(p',\omega_o,\omega_i) f(p′′pp)=f(p,ωo,ωi),其中 ω i = p ′ ′ − p ′ ^ \omega_i=\widehat{p''-p' } ωi=p′′p ω o = p − p ′ ^ \omega_o=\widehat{p-p'} ωo=pp ,这有时被称为 BSDF 的三点形式(three point form)。
在这里插入图片描述

使用上文Interals over Area的知识,可以知道微分区域面积之间的关系为: d ω = d A cos ⁡ θ r 2 \mathrm{d}\omega=\frac{\mathrm{d}A\cos\theta}{r^2} dω=r2dAcosθ。将这个变换项和一个可见性函数 V V V组合起来,即可得到一个单一的集合耦合项(geometric coupling term) G ( p ↔ p ′ ) G(p\leftrightarrow{p'}) G(pp)

G ( p ↔ p ′ ) = V ( p ↔ p ′ ) ∣ cos ⁡ θ ∣ ∣ cos ⁡ θ ′ ∣ ∣ ∣ p − p ′ ∣ ∣ 2 \begin{equation} G(p\leftrightarrow{p'})=V(p\leftrightarrow{p'})\frac{|\cos\theta||\cos\theta'|}{||p-p'||^2} \end{equation} G(pp)=V(pp)∣∣pp2cosθ∣∣cosθ

代入原方程可以得到表面形式的渲染方程:

L ( p ′ → p ) = L e ( p ′ → p ) + ∫ A f ( p ′ ′ → p ′ → p ) L ( p ′ ′ → p ′ ) G ( p ′ ′ ↔ p ′ )   d A ( p ′ ′ ) \begin{equation} L(p'\to{p})=L_e(p'\to{p})+\int_{A}f(p''\to{}p'\to{p})L(p''\to{p'})G(p''\leftrightarrow{p'})\,\mathrm{d}A(p'') \end{equation} L(pp)=Le(pp)+Af(p′′pp)L(p′′p)G(p′′p)dA(p′′)

PS

本文主要是对PBRT内容的翻译总结,欢迎交流学习~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值