天天看點

探讨基于球諧函數的全局光照

球諧光照是基于預計算輻射度傳輸(precompute radiance transfer, PRT)理論實作的一種實時渲染級技術。預計算輻射度傳輸技術能夠實時重制在區域面光源照射下的全局照明效果。

這種技術通過在允許運作前對場景中光線的互相作用進行預計算,計算場景中每個物體表面點的光照資訊,然後用球諧函數(spherical harmonic lighting)對這些預計算的光照資訊資料進行編碼,在運作時讀取資料進行解碼,重制光照效果。

球諧光照使用新的光照方程來代替傳統的光照方程,并将這些新方程中的相關資訊使用球諧函數投影到頻域,存儲成一系列的系數。在運作渲染過程中,利用這些預先存儲的系數資訊對原始的光照方程進行還原,并對,待渲染的場景進行着色計算。這個計算過程是對無限積分進行有限近似的過程。

半球空間的光照方程

這個光照模型不過是真實的實體光照模型的簡化。因為真實的實體光照模型的計算公式相當複雜,要完全實時計算是很困難的。是以要采用一個簡化的模型。如下式所示:

探讨基于球諧函數的全局光照

上面公式表面,某個半球空間的出射輻射度值等于入射輻射度的立體角微分在半球上的積分。而入射輻射度值利用輻射度傳輸算法或者光線追蹤算法産生。

在現階段的硬體體系中,很難高效快速地求解積分,而是使用蒙特卡洛積分進行近似。

蒙特卡洛方法這裡就不再贅述,之前的章節介紹過。

下面來介紹下正交對偶基函數和球諧光照

球諧光照的核心就是球面亮度信号編碼和重建。信号在滿足一定條件下,可以分解為一系列正弦諧波的和,這就是傅裡葉級數。經過全局光照計算後,物體表面上的點會得到一個球面的亮度信号,但是不可能為每一個點都儲存一個環境貼圖,是以需要對這個定義在球面的亮度信号進行編碼。而在實時重制時,利用編碼快速重建原球面亮度信号,進而計算光照效果。

從傅裡葉變換的知識可得到,一個原始信号波可以由一系列帶有縮放因子的簡諧波疊加而成,這些簡諧波的波函數稱為基函數。要想利用這些簡諧波重建原始信号波,就需要知道每個基函數的縮放因子。而重建原始信号波,隻需要将各個基函數經過它們的縮放因子運算處理後,再求和即可。

假定有一個原始函數O(x),自變量x屬于D,選取了N個基函數,O(x)的近似函數定義為O’(x)。每個基函數Bi(x)的系數為Ci,這樣就得到:

探讨基于球諧函數的全局光照

系數Ci怎麼求出來呢?是使用原函數O(x)和Bi(x)的對偶函數Bi’(x)的卷積積分得到,如下:

探讨基于球諧函數的全局光照

那麼基函數的對偶函數需要滿足下面的條件,才能稱為對偶函數:

探讨基于球諧函數的全局光照

有多種基函數可以用來重建信号波,如傅裡葉級數中的餘弦信号等,但在球諧光照中使用的是正交基函數。正交基函數有兩個重要的屬性,首先是正交性,當給定兩個不同的基函數Bi(x)和Bj(x),且i!=j,這個兩個基函數乘機的積分為0,如下所示:

探讨基于球諧函數的全局光照

正交基函數的另一個屬性是規範化特性,即基函數Bi(x)和自身的乘機的積分為1,如下所示:

探讨基于球諧函數的全局光照

采用規範化正交基函數有兩個優點:

1,這這種正交基函數上進行投影函數(function projection)較為友善;

2,這些正交基函數的乘機積分可高效地進行計算。

第一個優點,規範化正交基函數的對偶函數是自身,是以求7-39中的系數Ci,不需要再另外求對偶函數,直接用基函數代入即可。

當需要計算多個近似函數的乘機積分時,充分利用第二個優點可大幅度提高計算效率。例如有兩個函數O1(x),O2(x),它們的近似函數分别為O1’(x)和O2’(x),它們各自系數為Cai和Cbi,兩者近似函數乘機積分為:

探讨基于球諧函數的全局光照

因為規範化正交基函數,當給定兩個不同的基函數Bi(x)和j(x)且有i!=j時,這兩個函數的乘機的積分為0,

而隻剩下i=j,

探讨基于球諧函數的全局光照

又因為正交基函數i=j時,乘機積分的值為1。

是以最後簡化為:

探讨基于球諧函數的全局光照

對于渲染應用,通常會采用實數值的球諧函數,虛數部不使用,基于球面坐标系下的實數球諧函數的定義如下:

探讨基于球諧函數的全局光照

有了正交基函數,便可以把原始的分布在球面空間上的函數進行球諧投影(spherical harmonics projection)。

球諧投影即把原始函數改用球諧基函數進行近似代替。假設原始函數為g(s),s是關于球面坐标系的天頂角theta和方位角fi

的函數。

作為基函數的球諧函數Yl,m(theta,fi)可改寫成Yl,m(s)。投影後的近似函數為g’(s)。

根據規範化正交基函數的對偶性質,正交基函數的對偶函數便是它自身,是以這時權重系數Cl,m為:

探讨基于球諧函數的全局光照

結合7-38公式,得到投影後的近似函數g’(s):

探讨基于球諧函數的全局光照

這裡Yl,m是正交的球諧基函數。

上面的式子就是重建原始信号波的過程,把事先計算的各項權重系數與對應球諧函數相乘,然後對這些乘機進行累加,即為近似的原始信号。

上面的式子兩個求和符号寫起來不友善,是以改寫成下面的式子:

探讨基于球諧函數的全局光照
探讨基于球諧函數的全局光照

使用蒙特卡洛積分,球面上的機率密度函數為1/4pi。

是以Ci等于:

探讨基于球諧函數的全局光照

綜上,一個lmax階的球諧函數需要lmax平方個系數和基函數進行近似。

理論上需要無窮項的基函數才能完美地重建原始信号波,但這是不可能的,是以隻能用近似的“限制帶寬”的方法,即lmax得取值不能過大,隻取有限得低頻(即使l取值較小的)基函數,而将高頻(l取值較大的)基函數忽略掉。

這也決定了基于球諧函數重建的信号波會丢失很多高頻信号,即亮度信号的細節會發生變化。

到此為止,已經有了這一系列的系數Ci的計算方式,又有一系列標明的基函數,是以可以對球面上的光照函數進行投影和還原了。

回顧下式子:

探讨基于球諧函數的全局光照

上式是原始光照方程式。

其中fr分量,對漫反射來說,在各個方向上反射光線均相同,用一個常數k表示;

此時簡化為:

探讨基于球諧函數的全局光照

又考慮不遮擋的情況,是以V函數為1,遮擋的為0,這裡考慮不遮擋的情況,是以取值為1。

那麼隻剩下L和G函數,把它們用球協函數表示,在根據式7-43和7-44得到,最終變成各自基函數系數

探讨基于球諧函數的全局光照

探讨基于球諧函數的全局光照

的乘機之和:

探讨基于球諧函數的全局光照

是以,通過使用有限個基函數及其系數值,能逼近出無限積分才能達到的效果。這就是球協光照的核心思想。

再次叙述球協光照的算法:

為了得到原始的光照計算函數light(s)的積分結果,s是球面。

選用若幹組基函數Bi(s)和這些基函數對應的系數Ci,

将各組基函數和權重系數相乘,然後累加乘機值,這個累積值就近似等于原始函數light(s)的積分結果。

其中Bi(s)是球協函數,而Ci為帶求系數。求Ci的方法是:采樣若幹Si,得到每一個自變量Si對應的原始計算函數和基函數乘積,再累加可得Ci。最後便可求得原始光照計算函數的積分近似計算結果。

PBR

繼續閱讀