探讨基于球谐函数的全局光照
球諧光照是基于預計算輻射度傳輸(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。最后便可求得原始光照計算函數的積分近似計算結果。
總結
以上是生活随笔為你收集整理的探讨基于球谐函数的全局光照的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DB2 SQLCODE 异常大全编辑(一
- 下一篇: 机器学习笔记17-LDA算法