复指数与高斯函数乘积的傅里叶变换_球谐光照——球谐函数
早在1877年,Norman Macleod Ferrers就專門寫了一本書來介紹球諧函數,后面物理學家把實數球諧函數擴展到復平面上,在復變函數論中作為“特殊函數”來研究,它在物理以及計算化學上有重要的應用,我們主要討論它在計算機圖形渲染上的應用。
球諧函數是拉普拉斯方程的分離
變量后,角度部分通解的正交項,那本篇文章就從拉普拉斯方程開始介紹,直至找到我們想要的球諧函數。球諧函數有復數形式和實數形式,我們只關心它的實數形式。球諧函數有兩條重要的性質,正交完備性和旋轉不變性。球諧函數構成的函數組,作為正交基,對信號進行投影和重建,例如[7]介紹的輻射度環境貼圖,通過9個系數就可以模擬一張環境貼圖的漫反射信號,無論是存儲還是計算,都有顯著的優勢。當然,本篇文章希望從數學的角度,來介紹球諧函數,也受限于個人的數學能力,會忽略了一些復雜的推導過程。
文章目錄:
- 球諧始源
- 球諧性質
- 附錄
- 參考
球諧始源
球諧函數是拉普拉斯方程的分離
變量后,角度部分通解的正交項。這部分將從拉普拉斯方程開始逐項推導,得到最終我們想要知道的球諧函數。內容主要參考“姚端正,梁家寶. 數學物理方法-第4版”和“顧樵. 數學物理方法”兩本書。球面坐標可以表示為
三維空間下的拉普拉斯(Laplace)方程可以表示為
把球面坐標代入拉普拉斯方程(參見“Laplacian in Spherical Coordinates”),可以得到
我們的目標就是求解拉普拉斯方程的解。首先,把表示距離的變數
跟表示方向的變數和分離,即表示角度部分,把等式(4)代入等式(3)可以得到等式兩邊乘以
,并移項,可得左邊是
的函數,跟和無關;右邊是和的函數,跟無關。兩邊相等,顯然是不可能的。除非兩邊實際上是同一個常數,通常把這個參數記為。即這就分解為兩個方程
當然,我們只關心角度部分的解,即方程(5)的解,這個方程也稱為球函數方程。進一步采用分離變數法,以
代入球函數方程,得
在方程兩邊乘以
并移項,即可得左邊是
的函數,跟無關;右邊是的函數,跟無關。兩邊相等顯然是不可能的,除非兩邊實際上是同一個常數,這個常數記作,這就又分解為兩個常微分方程
對于常微分方程(7),它有一個隱含的“自然的周期條件”(
),兩者構成本征值問題。即它的周期解用復數形式,可以表示為
嚴格來說,這里忽略了常數項,且是兩個cos和sin函數的混合,或者是兩個正負虛數的混合,但不影響最終的通解。復數形式在復變函數論里面,有一個如下所示的轉換關系,它們都是復平面上坐標的不同表現形式。由于本篇文章并不是為了嚴格的數學理論推導,而是為了梳理球諧函數在計算機上從理論到應用這條線,最終我們采用的是實數形式的球諧函數,所以看看就可以了。
再看常微分方程(8),它可以改寫為
設
,則代入上式,化簡可得
這個方程就是l次連帶勒讓德方程,也稱為締合勒讓德方程,其中,
的特例,即叫作l次勒讓德方程。
后面只考慮連帶勒讓德方程,它的解就稱為連帶勒讓德函數,只有當
,時才有有界周期解,用表示,即經過數學家論證,連帶勒讓德函數表示為
這叫稱為l次m階連帶勒讓德函數,“次”的英文是“degree”,“階”的英文是“order”。當
。連帶勒讓德函數里面有一個次導數計算,在計算機上這個很難處理,但是有遞歸關系[3],即兩個!!表示雙階乘,即。連帶勒讓德函數的遞歸關系,保證了計算機實現的基礎。
此外,再給一個l次m階連帶勒讓德函數的關系等式
回到球函數方程(5)的求解,它的
通解的復數形式表示為嚴格來說,由于忽略了常數項,這里也是忽略常數項的情況。一般的l次m階球諧函數
的復數形式可以表示為表示球諧函數的次數,表示球諧函數的階數球諧函數的模長可以表示為
歸一化的球諧函數
的復數形式可以表示為其中
注意區分兩種數學表示的含義,
表示一般形式的球諧函數,表示歸一化的球諧函數。當m>0時采用實數cos部分,當m<0時采用虛數sin部分,則歸一化的球諧函數的實數形式可以表示為
根據上述計算公式,可以得到前面4次的球諧函數,為
前4次球諧函數參見[6],已經推導出前6次的球諧函數。
球諧函數可視化,前面幾次的三維圖像如圖1所示
圖1. 前4次的球諧函數三維圖像至此,你應該理解兩條重要結論:
球諧性質
接著,討論歸一化的球諧函數的性質,它具備兩條重要的性質構成了它應用的基石:
- 正交完備性
- 旋轉不變性
正交完備性
對于任意兩個歸一化的球諧函數在球面上的積分有
這就表示由球諧函數構成的函數組
是正交歸一化的。以某一正交歸一函數組為基,把一個給定的函數用這些函數的線性組合來表示,這就是一種重要的展開,這種用正交函數組展開為級數的一個顯著的例子就是傅里葉變換。
任意一個球面函數
可以用正交歸一的球函數進行展開,這種展開類似于傅里葉展開,稱為廣義傅里葉展開其中,廣義傅里葉系數
為當次數
的時候,展開的級數和會平均收斂于。換句話說,當次數越大,那么級數和就會越趨近于被展開的函數,就稱為完備函數組。平均收斂,并不代表收斂,只是表示趨近于的含義。從計算機的角度來說,如等式(22)所示的函數展開,
的取值不可能是無窮大,往往取一個給定系數,則可以確定球諧函數組,例如,那么球諧函數組就是任意給定
,得到的球諧函數組的個數為那么,廣義傅里葉系數相當于這樣一個排列
類似的球諧函數也可以構成這樣一個類似的排列,若我們用一個普通的系數
來表示上面的廣義傅里葉系數,用一個函數來表示球諧函數,那么等式(22)可以換成另外一種形式這種形式的展開與等式(22)是完全一樣的,它只是把球諧函數的次數展開,用一個系數來表示,但是它隱藏了一個條件:取的系數個數必需是
。回過來,球諧函數組相當于一組正交基,將函數
表示為這組正交基的線性組合,生成線性組合系數的過程就稱為投影(Projection),例如一個函數可以表示為生成系數
的過程,就是投影,等式(23)就確定了投影的方法。相反,利用這組系數和正交基組合,得到原函數的過程,就稱為重建(Reconstruction)。投影的過程就是計算函數積分,計算消耗較大,可以采用離線處理來生成廣義傅里葉系數;在實時渲染時,就要簡單的線性組合,就可以重建原始函數。當然,由于是有限個系數,就必然存在誤差。
我們再來看下連帶勒讓德函數,如圖2所示,隨著次數的增加,函數的振動頻率會越快。對于函數的展開而言,振動頻率越大的基底,它就只能表示越高頻的信息,往往一個函數里面的高頻信息量是較少的。
圖2. 連帶勒讓德函數曲線圖,次數越大,振頻越快類似的,球諧函數也具備這種隨著次數增加,振動頻率增加的的特性。它就使得n的取值不需要很大時,就可以得到很好的重建效果,當然只能還原出低頻信息。根據Robin[3]得到的數據,如圖3所示,當n > 6時,就能還原出整體效果,但是邊緣棱角這些高頻信息是無法還原出來的。
圖3. 不同n取值下球諧函數的重建效果由球諧函數構成的函數組構成正交歸一的基底,對球面上的函數進行投影和重建,也就是廣義傅里葉展開,數學上的完備性,保證了展開結果會趨近于被展開的函數。
旋轉不變性
第一個問題是:什么叫旋轉不變性。
任意一個球面上的函數
可以用球諧函數組作為基底展開,需要根據等式(23)計算廣義傅里葉系數。如果我們對原函數進行旋轉操作的話,設旋轉變換表示為,我們就得到了一個新的函數。對新函數進行展開的話,我們需要重新計算廣義傅里葉系數,設為,這就有點為難了。在圖形渲染中,廣義傅里葉系數的生成是離線實現的,它的消耗很大,這就表示,一旦光源發生了旋轉后,由于原函數的改變導致提前生成的系數失效。旋轉不變性,表示原函數發生了旋轉,只需要對生成的廣義傅里葉系數進行變換,就能保證變換后的系數能等價還原出新函數。在圖形渲染上的表現就是,當光源發生旋轉后,我們只要同步的計算出變換后的廣義傅里葉系數,就能保證畫面的光照效果不會抖動跳變。旋轉不變性,并不是表示源函數發生旋轉后,對重建結果沒有影響,而是表示通過對系數與匹配的旋轉進行變換后,能等價的還原出旋轉后的函數。舉個[6]實驗的例子,如圖4所示,球諧函數表示的光照發生旋轉后,仍然能等價重建新的變換函數,但是采用Ambient Cube的方法效果就出現了異常。
圖4. SH表示球諧基底,HL2表示Ambient Cube基底第二個問題是:怎么對生成的系數進行變換。
針對這個問題,這里寫些自己的理解,不做深入的研究。
對于l次球諧函數,就會有2l + 1個系數,表示為
設變換矩陣為
,它是一個(2l + 1)*(2l + 1)的矩陣,那么系數的變換就可以表示為或者用向量與矩陣的乘積形式,表示為
那么,經過旋轉變換后的函數的展開就可以表示為
唯一的區別就是,系數由
變成了。想表達的一點是,系數的變換是基于球諧函數的次數,即第3次球諧函數的系數
,只能由第3次球諧函數的系數變換而來。若取前3次的球諧函數構成正交基,函數組共有0,1,2次三類球諧函數,若采用等式(24)的形式,則3個子矩陣需要整合成一個完整的變換矩陣,對于前3次球諧函數的例子,就組成一個9x9的變換矩陣,它的形狀如下所示。
9x9的球諧系數變換矩陣考慮低維的情況[3]。旋轉可以用旋轉矩陣、歐拉角、四元數等方式表示,任意一個旋轉矩陣
可以用型的歐拉角表示,它們間的變換關系[5]表示為其中,c表示cos,s表示sin。有了這個變換關系后,就很容易計算出歐拉角
,表示為對于,
的退化情況,歐拉角表示為那么,相應l次的球諧系數的變換矩陣可以表示為
對于第0次的球諧變換矩陣為
其它維度的矩陣推導比較麻煩,就推導了第1次的球諧變換矩陣,它可以表示為
變換矩陣
的計算可以參見附錄D3D的實現,實現了前6次的球諧系數的旋轉,對于圖形渲染來說,已經夠用了。對于高維矩陣的構造方法非常的復雜,采用的是魏格納d矩陣(Wigner d-matrices),可以參見文獻[4]的討論,網上也有這個算法的高效實現,有興趣可以研究研究,參見SHTns。
附錄
根據等式(15)的遞歸關系,就可以很容易計算出連帶勒讓德函數[3]。
double根據等式(20)(21),可以計算出球諧函數[3]。
double在D3D中實現的球諧系數的旋轉D3DXSHRotate的實現為:
FLOAT參考
[1] 姚端正, 梁家寶. 數學物理方法-第4版..
[2] 顧樵. 數學物理方法.
[3] Robin Green. "Spherical harmonic lighting: The gritty details." Archives of the Game Developers Conference. Vol. 56. 2003.
[4] Joseph Ivanic, and Klaus Ruedenberg. "Rotation matrices for real spherical harmonics. Direct determination by recursion." The Journal of Physical Chemistry 100.15, 6342-6347, 1996.
[5] Wikipea. Euler angles
[6] Peter-Pike Sloan. "Stupid spherical harmonics (sh) tricks." Game developers conference. Vol. 9. 2008.
[7] Ravi Ramamoorthi, and Pat Hanrahan. "An efficient representation for irradiance environment maps." Proceedings of the 28th annual conference on Computer graphics and interactive techniques. 2001.
總結
以上是生活随笔為你收集整理的复指数与高斯函数乘积的傅里叶变换_球谐光照——球谐函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html input file name
- 下一篇: C# MVC使用阿里云对象存储加快图片加