主要是Advanced Global Illuminations第四章的内容。
渲染方程
简要地复习一下渲染方程,首先是原版:
L(x→Θ)=Le(x→Θ)+∫Ωxfr(x,Ψ↔Θ)L(x←Ψ)cos(Nx,Ψ)dωΨ
这是个第二类Fredholm积分方程,其中L(x→Θ)表示从位置x向Θ发射的辐射亮度;Le是自发光项;Nx是x处法线;Ωx是以Nx为中心的半球立体角;fr(x,Ψ↔Θ)是BRDF,其形式化定义为:
fr(x,Ψ→Θ)=L(x←Ψ)cos(Nx,Ψ)dωΨdL(x→Θ)
通常,BRDF函数的两个方向参数是对称的,所以也可以写做Ψ←Θ甚至Ψ↔Θ。
令r(x,Ψ)表示从x处向Ψ方向发射射线所获得的最近交点,y=r(x,Ψ),则有:
L(x→Θ)=Le(x→Θ)+∫Ωxfr(x,Ψ↔Θ)L(y→−Ψ)cos(Nx,Ψ)dωΨ
上述积分是在x的半球立体角上进行的,也可以把它改写成在场景中所有表面上的形式:
L(x→Θ)=Le(x→Θ)+∫Afr(x,Ψ↔Θ)L(y→yx)V(x,y)G(x,y)dAy
其中G(x,y)=cos(Nx,Ψ)cos(Ny,−Ψ)/rxy2为场景中任两个表面点间的几何因子。
这些公式都是出射的,也可以写出入射形式:
L(x←Θ)=Le(x←Θ)+∫Ωyfr(y,Ψ↔−Θ)L(y←Ψ)cos(Ny,Ψ)dωΨ
L(x←Θ)=Le(x←y)+∫Afr(y,Ψ↔yz)L(y←yz)V(y,z)G(y,z)dAz
重要性函数
由于无法无限精确地表示场景中所有点朝所有方向的辐射亮度,几乎所有的照明算法都是在计算一些点集朝一些方向的辐射亮度均值。设S=As×Ωs表示希望纳入计算的、局部的表面点集和方向,则:
Φ(S)=∫As∫ΩsL(x→Θ)cos(Nx,Θ)dωΘdAx
若定义:
We(x←Θ)={1,(x,Θ)∈S0,(x,Θ)∈/S
则S上的平均辐射亮度可以被表示为:
Lavg=∫A∫ΩWe(x←Θ)cos(Nx,Θ)dωΘdAx∫A∫ΩL(x→Θ)We(x←Θ)cos(Nx,Θ)dωΘdAx
这个Importance函数的意义是什么呢?给定场景中某个感兴趣的集合S,若将某单个的L(x→Θ)放置在场景的某个表面点上,它会对Φ(S)产生的贡献可以用来衡量x→Θ在S中的“重要程度”。形式化地,可以将W(x←Θ)定义如下:
We(x←Θ)={1,(x,Θ)∈S0,(x,Θ)∈/SW(x←Θ)=We(x←Θ)+∫Ωzfr(z,Ψ↔−Θ)W(z←Ψ)cos(Nr(x,Θ),Ψ)dωΨ
其中z=r(x,Θ)。重要性函数值仅与场景的几何和材质特征有关,传递方式与辐射亮度的传播相似。
由于重要性函数的定义形式和入射版本的渲染方程一模一样,于是可以对照着定义一个出射版(可以理解为某种“重要性发射器”)。令W(x→Θ)=W(r(x,Θ)←−Θ),容易证明:
W(x→Θ)=We(x→Θ)+∫Ωxfr(x,Ψ↔Θ)W(x←Ψ)cos(Nx,Ψ)dωΨ
有了重要性函数,在实际计算辐射通量的时候,间接传播所作的贡献都被重要性函数纳入怀中了,因此有下面两个等价的公式:
Φ(S)=∫A∫ΩxLe(x→Θ)W(x←Θ)cos(Nx,Θ)dωΘdAxΦ(S)=∫A∫ΩxLe(x←Θ)W(x→Θ)cos(Nx,Θ)dωΘdAxΦ(S)=∫A∫ΩxL(x→Θ)We(x←Θ)cos(Nx,Θ)dωΘdAxΦ(S)=∫A∫ΩxL(x←Θ)We(x→Θ)cos(Nx,Θ)dωΘdAx
这样一来,我们就有了两种计算全局照明的思路:从S出发按照渲染方程“寻找”光源,或是从光源出发,计算光源对S的重要性函数。
伴随方程
首先引入两个线形算子:
TL(x→Θ)=∫Ωxfr(x,Ψ↔Θ)L(r(x,Θ)→−Ψ)cos(Nx,Ψ)dωΨQW(x←Θ)=∫Ωr(x,Θ)fr(r(x,Θ),Ψ↔−Θ)W(r(x,Θ)←Ψ)cos(Nr(x,Θ),Ψ)dωΨ
设L→表示出射辐射亮度,L←表示入射辐射亮度,W→,W←类似,则有:
L→=Le→+TL→L←=Le←+QL←W→=We→+TW→W←=We←+QW←
现定义A×Ω上的出射函数和入射函数间的内积为:
⟨F→,G←⟩=∫A∫ΩF(x→Θ)G(x←Θ)cos(Nx,Θ)dωΘdAx
则:
Φ(S)=⟨L→,We←⟩Φ(S)=⟨Le→,W←⟩Φ(S)=⟨L←,We→⟩Φ(S)=⟨Le←,W→⟩
容易验证T=Q∗,即T是Q的伴随算子,于是乎:
L←=Le←+T∗L←W←=We←+T∗W←
全局反射分布
一切L都来自于Le,这一关系由辐射亮度的传输方程给出。但是传输方程给出的式子是递归的,接下来给出一个非递归版本,称为全局反射分布函数(GRDF),记作Gr(x←Θ,y→Ψ)。GRDF描述了场景中任意两处之间的光照传输属性,它满足:
L(y→Ψ)=∫A∫ΩxLe(x→Θ)Gr(x←Θ,y→Ψ)cos(Nx,Θ)dωΘdAx
上式两边微分可得:
Gr(x←Θ,y→Ψ)=Le(x→Θ)cos(Nx,Θ)dωΘdAxd2L(y→Ψ)
事实上,BRDF可以被看作GRDF的一种特例。
有了GRDF过后,辐射通量可以这样计算:
Φ(S)=∫A∫Ωx∫A∫ΩyLe(x→Ω)Gr(x←Θ,y→Ψ)We(y←Ψ)×cos(Nx,Θ)cos(Ny,Ψ)dωΨdAydωΘdAx
GRDF的好处在于,它提供的光照传输描述仅仅依赖于场景几何与材质。尽管重要性函数也具有这一特征,但它依赖于特定的S。话虽如此,由于参数空间维度太高,很难直接计算GRDF,而多采用蒙特卡罗之类的方法来估计。著名的双向路径追踪算法就可以被认为是基于GRDF的。