球諧光照——球諧函數(shù)
早在1877年,Norman Macleod Ferrers就專門寫了一本書來介紹球諧函數(shù),后面物理學(xué)家把實數(shù)球諧函數(shù)擴展到復(fù)平面上,在復(fù)變函數(shù)論中作為“特殊函數(shù)”來研究,它在物理以及計算化學(xué)上有重要的應(yīng)用,我們主要討論它在計算機圖形渲染上的應(yīng)用。
球諧函數(shù)是拉普拉斯方程的分離rr變量后,角度部分通解的正交項,那本篇文章就從拉普拉斯方程開始介紹,直至找到我們想要的球諧函數(shù)。球諧函數(shù)有復(fù)數(shù)形式和實數(shù)形式,我們只關(guān)心它的實數(shù)形式。
球諧函數(shù)有兩條重要的性質(zhì),正交完備性和旋轉(zhuǎn)不變性。球諧函數(shù)構(gòu)成的函數(shù)組,作為正交基,對信號進行投影和重建,例如[7]介紹的輻射度環(huán)境貼圖,通過9個系數(shù)就可以模擬一張環(huán)境貼圖的漫反射信號,無論是存儲還是計算,都有顯著的優(yōu)勢。當(dāng)然,本篇文章希望從數(shù)學(xué)的角度,來介紹球諧函數(shù),也受限于個人的數(shù)學(xué)能力,會忽略了一些復(fù)雜的推導(dǎo)過程。
文章目錄:
球諧始源球諧性質(zhì)附錄參考球諧始源
球諧函數(shù)是拉普拉斯方程的分離rr變量后,角度部分通解的正交項。這部分將從拉普拉斯方程開始逐項推導(dǎo),得到最終我們想要知道的球諧函數(shù)。內(nèi)容主要參考“姚端正,梁家寶. 數(shù)學(xué)物理方法-第4版”和“顧樵. 數(shù)學(xué)物理方法”兩本書。
球面坐標可以表示為
(1){x=rsin?θcos?φy=rsin?θsin?φz=rcos?θ\left\{ \begin{matrix} x=r\sin \theta \cos \varphi \\ y=r\sin \theta \sin \varphi \\ z=r\cos \theta \\ \end{matrix} \right. \tag{1}\\
三維空間下的拉普拉斯(Laplace)方程可以表示為
(2)?2=?2?x2+?2?y2+?2?z2=0{{\nabla }^{\text{2}}}\text{=}\frac{{{\partial }^{2}}}{\partial {{x}^{2}}}+\frac{{{\partial }^{2}}}{\partial {{y}^{2}}}+\frac{{{\partial }^{2}}}{\partial {{z}^{2}}}=0 \tag{2}\\
把球面坐標代入拉普拉斯方程(參見“Laplacian in Spherical Coordinates”),可以得到
(3)1r2??r(r2?f?r)+1r2sin?θ??θ(sin?θ?f?θ)+1r2sin2θ?2f?φ2=0\frac{1}{{{r}^{2}}}\frac{\partial }{\partial r}\left( {{r}^{2}}\frac{\partial f}{\partial r} \right)+\frac{1}{{{r}^{2}}\sin \theta }\frac{\partial }{\partial \theta }\left( \sin \theta \frac{\partial f}{\partial \theta } \right)+\frac{1}{{{r}^{2}}{{\sin }^{2}}\theta }\frac{{{\partial }^{2}}f}{\partial {{\varphi }^{2}}}=0 \tag{3}\\
我們的目標就是求解拉普拉斯方程的解。首先,把表示距離的變數(shù)rr跟表示方向的變數(shù)θ\theta和φ\varphi分離,即
(4)f(r,θ,φ)=R(r)Y(θ,φ)f\left( r,\theta ,\varphi \right)=R\left( r \right)Y\left( \theta ,\varphi \right) \tag{4}\\
Y(θ,φ)Y\left( \theta ,\varphi \right)表示角度部分,把等式(4)代入等式(3)可以得到
Yr2??r(r2?R?r)+Rr2sin?θ??θ(sin?θ?Y?θ)+Rr2sin2θ?2Y?φ2=0\frac{Y}{{{r}^{2}}}\frac{\partial }{\partial r}\left( {{r}^{2}}\frac{\partial R}{\partial r} \right)+\frac{R}{{{r}^{2}}\sin \theta }\frac{\partial }{\partial \theta }\left( \sin \theta \frac{\partial Y}{\partial \theta } \right)+\frac{R}{{{r}^{2}}{{\sin }^{2}}\theta }\frac{{{\partial }^{2}}Y}{\partial {{\varphi }^{2}}}=0\\
等式兩邊乘以r2/RY{{r}^{2}}/RY,并移項,可得
1R??r(r2?R?r)=?1Ysin?θ??θ(sin?θ?Y?θ)?1Ysin2θ?2Y?φ2\frac{1}{R}\frac{\partial }{\partial r}\left( {{r}^{2}}\frac{\partial R}{\partial r} \right)=-\frac{1}{Y\sin \theta }\frac{\partial }{\partial \theta }\left( \sin \theta \frac{\partial Y}{\partial \theta } \right)-\frac{1}{Y{{\sin }^{2}}\theta }\frac{{{\partial }^{2}}Y}{\partial {{\varphi }^{2}}}\\
左邊是rr的函數(shù),跟θ\theta和φ\varphi無關(guān);右邊是θ\theta和φ\varphi的函數(shù),跟rr無關(guān)。兩邊相等,顯然是不可能的。除非兩邊實際上是同一個常數(shù),通常把這個參數(shù)記為l(l+1)l\left( l+1 \right)。即
1R??r(r2?R?r)=?1Ysin?θ??θ(sin?θ?Y?θ)?1Ysin2θ?2Y?φ2=l(l+1)\frac{1}{R}\frac{\partial }{\partial r}\left( {{r}^{2}}\frac{\partial R}{\partial r} \right)=-\frac{1}{Y\sin \theta }\frac{\partial }{\partial \theta }\left( \sin \theta \frac{\partial Y}{\partial \theta } \right)-\frac{1}{Y{{\sin }^{2}}\theta }\frac{{{\partial }^{2}}Y}{\partial {{\varphi }^{2}}}=l\left( l+1 \right)\\
這就分解為兩個方程
??r(r2?R?r)?l(l+1)R=0\frac{\partial }{\partial r}\left( {{r}^{2}}\frac{\partial R}{\partial r} \right)-l\left( l+1 \right)R=0\\
(5)1sin?θ??θ(sin?θ?Y?θ)+1sin2θ?2Y?φ2+l(l+1)Y=0\frac{1}{\sin \theta }\frac{\partial }{\partial \theta }\left( \sin \theta \frac{\partial Y}{\partial \theta } \right)+\frac{1}{{{\sin }^{2}}\theta }\frac{{{\partial }^{2}}Y}{\partial {{\varphi }^{2}}}+l\left( l+1 \right)Y=0 \tag{5}\\
當(dāng)然,我們只關(guān)心角度部分的解,即方程(5)的解,這個方程也稱為球函數(shù)方程。進一步采用分離變數(shù)法,以
Y(θ,φ)=Θ(θ)Φ(φ)Y\left( \theta ,\varphi \right)=\Theta \left( \theta \right)\Phi \left( \varphi \right)\\
代入球函數(shù)方程,得
Φsin?θ??θ(sin?θ?Θ?θ)+Θsin2θ?2Φ?φ2+l(l+1)ΘΦ=0\frac{\Phi }{\sin \theta }\frac{\partial }{\partial \theta }\left( \sin \theta \frac{\partial \Theta }{\partial \theta } \right)+\frac{\Theta }{{{\sin }^{2}}\theta }\frac{{{\partial }^{2}}\Phi }{\partial {{\varphi }^{2}}}+l\left( l+1 \right)\Theta \Phi =0\\
在方程兩邊乘以sin2θ/ΦΘ{{\sin }^{2}}\theta /\Phi \Theta并移項,即可得
sin?θΘ??θ(sin?θ?Θ?θ)+l(l+1)sin2θ=?1Φ?2Φ?φ2\frac{\sin \theta }{\Theta }\frac{\partial }{\partial \theta }\left( \sin \theta \frac{\partial \Theta }{\partial \theta } \right)+l\left( l+1 \right){{\sin }^{2}}\theta =-\frac{1}{\Phi }\frac{{{\partial }^{2}}\Phi }{\partial {{\varphi }^{2}}}\\
左邊是θ\theta的函數(shù),跟φ\varphi無關(guān);右邊是φ\varphi 的函數(shù),跟θ\theta 無關(guān)。兩邊相等顯然是不可能的,除非兩邊實際上是同一個常數(shù),這個常數(shù)記作λ\lambda,
sin?θΘ??θ(sin?θ?Θ?θ)+l(l+1)sin2θ=?1Φ?2Φ?φ2=λ\frac{\sin \theta }{\Theta }\frac{\partial }{\partial \theta }\left( \sin \theta \frac{\partial \Theta }{\partial \theta } \right)+l\left( l+1 \right){{\sin }^{2}}\theta =-\frac{1}{\Phi }\frac{{{\partial }^{2}}\Phi }{\partial {{\varphi }^{2}}}=\lambda\\
這就又分解為兩個常微分方程
(7)?2Φ?φ2+λΦ=0\frac{{{\partial }^{2}}\Phi }{\partial {{\varphi }^{2}}}+\lambda \Phi =0 \tag{7}\\
(8)sin?θ??θ(sin?θ?Θ?θ)+[l(l+1)sin2θ?λ]Θ=0\sin \theta \frac{\partial }{\partial \theta }\left( \sin \theta \frac{\partial \Theta }{\partial \theta } \right)+\left[ l\left( l+1 \right){{\sin }^{2}}\theta -\lambda \right]\Theta =0 \tag{8}\\
對于常微分方程(7),它有一個隱含的“自然的周期條件”(Φ(φ+2π)=Φ(φ)\Phi \left( \varphi +2\pi \right)=\Phi \left( \varphi \right)),兩者構(gòu)成本征值問題。即
(9)λ=m2,(m=0,±1,±2,?)\lambda ={{m}^{2}},\left( m=0,\pm 1,\pm 2,\cdots \right) \tag{9}\\
它的周期解用復(fù)數(shù)形式,可以表示為
(10)Φ(φ)=eimφ,m=0,±1,±2,?\Phi \left( \varphi \right)={{e}^{im\varphi }},m=0,\pm 1,\pm 2,\cdots \tag{10}\\
嚴格來說,這里忽略了常數(shù)項,且是兩個cos和sin函數(shù)的混合,或者是兩個正負虛數(shù)的混合,但不影響最終的通解。復(fù)數(shù)形式在復(fù)變函數(shù)論里面,有一個如下所示的轉(zhuǎn)換關(guān)系,它們都是復(fù)平面上坐標的不同表現(xiàn)形式。由于本篇文章并不是為了嚴格的數(shù)學(xué)理論推導(dǎo),而是為了梳理球諧函數(shù)在計算機上從理論到應(yīng)用這條線,最終我們采用的是實數(shù)形式的球諧函數(shù),所以看看就可以了。
cos?mφ+isin?mφ=eimφ\cos m\varphi +i\sin m\varphi ={{e}^{im\varphi }}\\
再看常微分方程(8),它可以改寫為
1sin?θ??θ(sin?θ?Θ?θ)+[l(l+1)?m2sin2θ]Θ=0\frac{1}{\sin \theta }\frac{\partial }{\partial \theta }\left( \sin \theta \frac{\partial \Theta }{\partial \theta } \right)+\left[ l\left( l+1 \right)-\frac{{{m}^{2}}}{{{\sin }^{2}}\theta } \right]\Theta =0\\
設(shè)x=cos?θx=\cos \theta,則
?Θ?θ=?Θ?x?x?θ=?sin?θ?Θ?x\frac{\partial \Theta }{\partial \theta }=\frac{\partial \Theta }{\partial x}\frac{\partial x}{\partial \theta }=-\sin \theta \frac{\partial \Theta }{\partial x}\\
代入上式,化簡可得
(11)(1?x2)?2Θ?x2?2x?Θ?x+[l(l+1)?m21?x2]Θ=0\left( 1-{{x}^{2}} \right)\frac{{{\partial }^{2}}\Theta }{\partial {{x}^{2}}}-2x\frac{\partial \Theta }{\partial x}+\left[ l\left( l+1 \right)-\frac{{{m}^{2}}}{1-{{x}^{2}}} \right]\Theta =0 \tag{11}\\
這個方程就是l次連帶勒讓德方程,也稱為締合勒讓德方程,其中,m=0m=0的特例,即
(12)(1?x2)?2Θ?x2?2x?Θ?x+l(l+1)Θ=0\left( 1-{{x}^{2}} \right)\frac{{{\partial }^{2}}\Theta }{\partial {{x}^{2}}}-2x\frac{\partial \Theta }{\partial x}+l\left( l+1 \right)\Theta =0 \tag{12}\\
叫作l次勒讓德方程。
后面只考慮連帶勒讓德方程,它的解就稱為連帶勒讓德函數(shù),只有當(dāng)λ=l(l+1)\lambda =l\left( l+1 \right),l=0,1,?l=0,1,\cdots 時才有有界周期解,用Plm(x)P_{l}^{m}\left( x \right)表示,即
(13)Θ(θ)=Plm(cos?θ){m=0,±1,?,±l}\Theta \left( \theta \right)=P_{l}^{m}\left( \cos \theta \right)\left\{ m=0,\pm 1,\cdots ,\pm l \right\} \tag{13}\\
經(jīng)過數(shù)學(xué)家論證,連帶勒讓德函數(shù)表示為
Pml(x)=(?1)m(1?x2)m22ll!dl+mdxl+m(x2?1)l
P_{l}^{m}\left( x \right)=\frac{{{\left( -1 \right)}^{m}}{{\left( 1-{{x}^{2}} \right)}^{\frac{m}{2}}}}{{{2}^{l}}l!}\frac{{a5yegbt^{l+m}}}{d{{x}^{l+m}}}{{\left( {{x}^{2}}-1 \right)}^{l}} \tag{14}\\這叫稱為l次m階連帶勒讓德函數(shù),“次”的英文是“degree”,“階”的英文是“order”。當(dāng)l">m>l。連帶勒讓德函數(shù)里面有一個m+l次導(dǎo)數(shù)計算,在計算機上這個很難處理,但是有遞歸關(guān)系[3],即
\left\{ \begin{aligned} & \left( l-m \right)P_{l}^{m}\left( x \right)=x\left( 2l-1 \right)P_{l-1}^{m}\left( x \right)-\left( l+m-1 \right)P_{l-2}^{m}\left( x \right) \\ & P_{m}^{m}\left( x \right)={{\left( -1 \right)}^{m}}\left( 2m-1 \right)!!{{\left( 1-{{x}^{2}} \right)}^{m/2}} \\ & P_{m+1}^{m}\left( x \right)=x\left( 2m+1 \right)P_{m}^{m}\left( x \right) \\ \end{aligned} \right. \tag{15}\\
兩個!!表示雙階乘,即\left( 2m-1 \right)!!=1\cdot 3\cdot 5\cdots \left( 2m-1 \right)。連帶勒讓德函數(shù)的遞歸關(guān)系,保證了計算機實現(xiàn)的基礎(chǔ)。
此外,再給一個l次m階連帶勒讓德函數(shù)的關(guān)系等式
P_{l}^{m}\left( x \right)={{\left( -1 \right)}^{m}}\frac{\left( l+m \right)!}{\left( l-m \right)!}P_{l}^{-m}\left( x \right) \tag{16}\\
回到球函數(shù)方程(5)的求解,它的Y\left( \theta ,\varphi \right)通解的復(fù)數(shù)形式表示為
Y\left( \theta ,\varphi \right)=\sum\limits_{l=0}^{\infty }{\sum\limits_{k=-l}^{l}{P_{l}^{k}\left( \cos \theta \right){{e}^{im\varphi }}}},m=0,\pm 1,\pm 2,\cdots \tag{17}\\
嚴格來說,由于\Phi \left( \varphi \right)忽略了常數(shù)項,這里也是忽略常數(shù)項的情況。一般的l次m階球諧函數(shù){{Y}_{lm}}\left( \theta ,\varphi \right)的復(fù)數(shù)形式可以表示為
{{Y}_{lm}}\left( \theta ,\varphi \right)={{P}_{lm}}\left( \cos \theta \right){{e}^{im\varphi }},m=0,\pm 1,\pm 2,\cdots \tag{18}\\
l表示球諧函數(shù)的次數(shù),m表示球諧函數(shù)的階數(shù)球諧函數(shù)的模長可以表示為
{{\left( N_{l}^{m} \right)}^{2}}={{\iint\limits_{S}{{{Y}_{lm}}\left( x \right)\left[ {{Y}_{lm}}\left( x \right) \right]}}^{*}}\sin \theta d\theta d\varphi =\frac{2}{2l+1}\frac{\left( l+\left| m \right| \right)!}{\left( l-\left| m \right| \right)!}2\pi\\
歸一化的球諧函數(shù)Y_{l}^{m}\left( \theta ,\varphi \right)的復(fù)數(shù)形式可以表示為
Y_{l}^{m}\left( \theta ,\varphi \right)=K_{l}^{m}{{Y}_{lm}}\left( \theta ,\varphi \right) \tag{19}\\
其中
K_{l}^{m}=\frac{1}{N_{l}^{m}}=\sqrt{\frac{2l+1}{4\pi }\frac{\left( l-\left| m \right| \right)!}{\left( l+\left| m \right| \right)!}} \tag{20}\\
注意區(qū)分兩種數(shù)學(xué)表示的含義,{{Y}_{lm}}\left( \theta ,\varphi \right)表示一般形式的球諧函數(shù),Y_{l}^{m}\left( \theta ,\varphi \right)表示歸一化的球諧函數(shù)。
當(dāng)m>0時采用實數(shù)cos部分,當(dāng)m<0時采用虛數(shù)sin部分,則歸一化的球諧函數(shù)的實數(shù)形式可以表示為
0 \\ \sqrt{2}K_{l}^{m}\sin \left( -m\varphi \right)P_{l}^{-m}\left( \cos \theta \right) & m<0>Y_{l}^{m}\left( \theta ,\varphi \right)=\left\{ \begin{matrix} \sqrt{2}K_{l}^{m}\cos \left( m\varphi \right)P_{l}^{m}\left( \cos \theta \right) & m>0 \\ \sqrt{2}K_{l}^{m}\sin \left( -m\varphi \right)P_{l}^{-m}\left( \cos \theta \right) & m<0 \\ K_{l}^{0}P_{l}^{m}\left( \cos \theta \right) & m=0 \\ \end{matrix} \right. \tag{21}
根據(jù)上述計算公式,可以得到前面4次的球諧函數(shù),為

參見[6],已經(jīng)推導(dǎo)出前6次的球諧函數(shù)。
球諧函數(shù)可視化,前面幾次的三維圖像如圖1所示

至此,你應(yīng)該理解兩條重要結(jié)論:
球諧函數(shù)是拉普拉斯方程分離r變量后,角度部分通解的正交項(后面介紹正交性)。如何計算球諧函數(shù),可以參見等式(15)(20)(21)。球諧性質(zhì)
接著,討論歸一化的球諧函數(shù)的性質(zhì),它具備兩條重要的性質(zhì)構(gòu)成了它應(yīng)用的基石:
正交完備性旋轉(zhuǎn)不變性正交完備性
對于任意兩個歸一化的球諧函數(shù)在球面上的積分有
\iint\limits_{S}{Y_{l}^{m}\left( \theta ,\varphi \right)Y_{k}^{n}\left( \theta ,\varphi \right)\sin \theta d\theta d\varphi }=\left\{ \begin{matrix} 0 & m\ne n,or,l\ne k \\ 1 & m=n,l=k \\ \end{matrix} \right. \tag{21}\\
這就表示由球諧函數(shù)構(gòu)成的函數(shù)組\left\{ Y_{l}^{m}\left( \theta ,\varphi \right) \right\}是正交歸一化的。
以某一正交歸一函數(shù)組為基,把一個給定的函數(shù)用這些函數(shù)的線性組合來表示,這就是一種重要的展開,這種用正交函數(shù)組展開為級數(shù)的一個顯著的例子就是傅里葉變換。
任意一個球面函數(shù)f\left( \theta ,\varphi \right)可以用正交歸一的球函數(shù)Y_{l}^{m}\left( \theta ,\varphi \right)進行展開,這種展開類似于傅里葉展開,稱為廣義傅里葉展開
f\left( \theta ,\varphi \right)=\sum\limits_{l=0}^{\infty }{\sum\limits_{m=-l}^{l}{C_{l}^{m}Y_{l}^{m}\left( \theta ,\varphi \right)}} \tag{22}\\
其中,廣義傅里葉系數(shù)C_{l}^{m}為
C_{l}^{m}=\int_{0}^{2\pi }{\int_{0}^{\pi }{f\left( \theta ,\varphi \right)Y_{l}^{m}\left( \theta ,\varphi \right)\sin \theta d\theta d\varphi }} \tag{23}\\
當(dāng)次數(shù)l\to \infty 的時候,展開的級數(shù)和會平均收斂于f\left(\theta ,\varphi \right)。換句話說,當(dāng)次數(shù)l越大,那么級數(shù)和就會越趨近于被展開的函數(shù)f\left(\theta ,\varphi \right),就稱\left\{ Y_{l}^{m}\left( \theta ,\varphi \right) \right\}為完備函數(shù)組。平均收斂,并不代表收斂,只是表示趨近于的含義。
從計算機的角度來說,如等式(22)所示的函數(shù)展開,n的取值不可能是無窮大,往往取一個給定系數(shù),則可以確定球諧函數(shù)組,例如n=2,那么球諧函數(shù)組就是
\left\{ Y_{l}^{m}\left( \theta ,\varphi \right) \right\}=\left\{ Y_{0}^{0},Y_{1}^{-1},Y_{1}^{0},Y_{1}^{1} \right\}\\
任意給定n,得到的球諧函數(shù)組的個數(shù)為
S=1+\text{3}+5+\cdots 2n-1={{n}^{2}}\\
那么,廣義傅里葉系數(shù)相當(dāng)于這樣一個排列
C_{0}^{0},C_{1}^{-1},C_{1}^{0},C_{1}^{1},C_{2}^{-2},C_{2}^{-1},\cdots\\
類似的球諧函數(shù)也可以構(gòu)成這樣一個類似的排列,若我們用一個普通的系數(shù){{c}_{k}}來表示上面的廣義傅里葉系數(shù),用一個函數(shù){{y}_{k}}\left( \theta ,\varphi \right)來表示球諧函數(shù),那么等式(22)可以換成另外一種形式
f\left( \theta ,\varphi \right)=\sum\limits_{k=0}^{{{n}^{2}}-1}{{{c}_{k}}{{y}_{k}}\left( \theta ,\varphi \right)} \tag{24}\\
這種形式的展開與等式(22)是完全一樣的,它只是把球諧函數(shù)的次數(shù)展開,用一個系數(shù)來表示,但是它隱藏了一個條件:取的系數(shù)個數(shù)必需是{{n}^{2}}。
回過來,球諧函數(shù)組相當(dāng)于一組正交基,將函數(shù)f\left( \theta ,\varphi \right)表示為這組正交基的線性組合,生成線性組合系數(shù)的過程就稱為投影(Projection),例如一個函數(shù)可以表示為
f\left( \theta ,\varphi \right)\approx aY_{0}^{0}+bY_{1}^{-1}+cY_{1}^{0}+dY_{1}^{1}\\
生成系數(shù)\left\{ a,b,c,d \right\}的過程,就是投影,等式(23)就確定了投影的方法。相反,利用這組系數(shù)和正交基組合,得到原函數(shù)的過程,就稱為重建(Reconstruction)。
投影的過程就是計算函數(shù)積分,計算消耗較大,可以采用離線處理來生成廣義傅里葉系數(shù);在實時渲染時,就要簡單的線性組合,就可以重建原始函數(shù)。當(dāng)然,由于是有限個系數(shù),就必然存在誤差。
我們再來看下連帶勒讓德函數(shù),如圖2所示,隨著次數(shù)的增加,函數(shù)的振動頻率會越快。對于函數(shù)的展開而言,振動頻率越大的基底,它就只能表示越高頻的信息,往往一個函數(shù)里面的高頻信息量是較少的。

類似的,球諧函數(shù)也具備這種隨著次數(shù)增加,振動頻率增加的的特性。它就使得n的取值不需要很大時,就可以得到很好的重建效果,當(dāng)然只能還原出低頻信息。根據(jù)Robin[3]得到的數(shù)據(jù),如圖3所示,當(dāng)n > 6時,就能還原出整體效果,但是邊緣棱角這些高頻信息是無法還原出來的。

由球諧函數(shù)構(gòu)成的函數(shù)組構(gòu)成正交歸一的基底,對球面上的函數(shù)進行投影和重建,也就是廣義傅里葉展開,數(shù)學(xué)上的完備性,保證了展開結(jié)果會趨近于被展開的函數(shù)。
旋轉(zhuǎn)不變性
第一個問題是:什么叫旋轉(zhuǎn)不變性。
任意一個球面上的函數(shù)f\left( \theta ,\varphi \right)可以用球諧函數(shù)組作為基底展開,需要根據(jù)等式(23)計算廣義傅里葉系數(shù)C_{l}^{m}。如果我們對原函數(shù)進行旋轉(zhuǎn)操作的話,設(shè)旋轉(zhuǎn)變換表示為R\left( \theta ,\varphi \right),我們就得到了一個新的函數(shù)f\left( R\left( \theta ,\varphi \right) \right)。對新函數(shù)進行展開的話,我們需要重新計算廣義傅里葉系數(shù),設(shè)為B_{l}^{m},這就有點為難了。在圖形渲染中,廣義傅里葉系數(shù)的生成是離線實現(xiàn)的,它的消耗很大,這就表示,一旦光源發(fā)生了旋轉(zhuǎn)后,由于原函數(shù)的改變導(dǎo)致提前生成的系數(shù)失效。旋轉(zhuǎn)不變性,表示原函數(shù)發(fā)生了旋轉(zhuǎn),只需要對生成的廣義傅里葉系數(shù)進行變換,就能保證變換后的系數(shù)能等價還原出新函數(shù)。在圖形渲染上的表現(xiàn)就是,當(dāng)光源發(fā)生旋轉(zhuǎn)后,我們只要同步的計算出變換后的廣義傅里葉系數(shù),就能保證畫面的光照效果不會抖動跳變。旋轉(zhuǎn)不變性,并不是表示源函數(shù)發(fā)生旋轉(zhuǎn)后,對重建結(jié)果沒有影響,而是表示通過對系數(shù)與匹配的旋轉(zhuǎn)進行變換后,能等價的還原出旋轉(zhuǎn)后的函數(shù)。
舉個[6]實驗的例子,如圖4所示,球諧函數(shù)表示的光照發(fā)生旋轉(zhuǎn)后,仍然能等價重建新的變換函數(shù),但是采用Ambient Cube的方法效果就出現(xiàn)了異常。

第二個問題是:怎么對生成的系數(shù)進行變換。
針對這個問題,這里寫些自己的理解,不做深入的研究。
對于l次球諧函數(shù),就會有2l + 1個系數(shù),表示為
{{C}_{l}}=\left\{ C_{l}^{-l},C_{l}^{-l+1},\cdots ,C_{l}^{l-1},C_{l}^{l} \right\} \tag{25}\\
設(shè)變換矩陣為R_{SH}^{l},它是一個(2l + 1)*(2l + 1)的矩陣,那么系數(shù)的變換就可以表示為
B_{l}^{m}=\sum\limits_{k=-l}^{k=l}{M_{l}^{m,k}C_{l}^{k}} \tag{26}\\
或者用向量與矩陣的乘積形式,表示為
{{B}_{l}}={{C}_{l}}\cdot R_{SH}^{l} \tag{27}\\
那么,經(jīng)過旋轉(zhuǎn)變換后的函數(shù)的展開就可以表示為
f\left( R\left( \theta ,\varphi \right) \right)=\sum\limits_{l=0}^{\infty }{\sum\limits_{m=-l}^{l}{B_{l}^{m}Y_{l}^{m}\left( \theta ,\varphi \right)}} \tag{28}\\
唯一的區(qū)別就是,系數(shù)由{{C}_{l}}變成了{{B}_{l}}。
想表達的一點是,系數(shù)的變換是基于球諧函數(shù)的次數(shù),即第3次球諧函數(shù)的系數(shù){{B}_{3}},只能由第3次球諧函數(shù)的系數(shù){{C}_{3}}變換而來。
若取前3次的球諧函數(shù)構(gòu)成正交基,函數(shù)組共有0,1,2次三類球諧函數(shù),若采用等式(24)的形式,則3個子矩陣需要整合成一個完整的變換矩陣,對于前3次球諧函數(shù)的例子,就組成一個9x9的變換矩陣,它的形狀如下所示。

考慮低維的情況[3]。旋轉(zhuǎn)可以用旋轉(zhuǎn)矩陣、歐拉角、四元數(shù)等方式表示,任意一個旋轉(zhuǎn)矩陣R可以用{{Z}_{\alpha }}{{Y}_{\beta }}{{Z}_{\gamma }}型的歐拉角表示,它們間的變換關(guān)系[5]表示為
\left( \begin{matrix} {{R}_{0,0}} & {{R}_{0,1}} & {{R}_{0,2}} \\ {{R}_{1,0}} & {{R}_{1,1}} & {{R}_{1,2}} \\ {{R}_{2,0}} & {{R}_{2,1}} & {{R}_{2,2}} \\ \end{matrix} \right)=\left( \begin{matrix} {{c}_{\alpha }}{{c}_{\beta }}{{c}_{\gamma }}-{{s}_{\alpha }}{{s}_{\gamma }} & {{c}_{\alpha }}{{s}_{\gamma }}+{{s}_{\alpha }}{{c}_{\beta }}{{c}_{\gamma }} & -{{s}_{\beta }}{{c}_{\gamma }} \\ -{{s}_{\alpha }}{{c}_{\gamma }}-{{c}_{\alpha }}{{c}_{\beta }}{{s}_{\gamma }} & {{c}_{\alpha }}{{c}_{\gamma }}-{{s}_{\alpha }}{{c}_{\beta }}{{s}_{\gamma }} & {{s}_{\beta }}{{s}_{\gamma }} \\ {{c}_{\alpha }}{{s}_{\beta }} & {{s}_{\alpha }}{{s}_{\beta }} & {{c}_{\beta }} \\ \end{matrix} \right) \tag{29}\\
其中,c表示cos,s表示sin。有了這個變換關(guān)系后,就很容易計算出歐拉角\alpha ,\beta ,\gamma,表示為
\begin{aligned} & \sin \beta =\sqrt{1-R_{2,2}^{2}} \\ & \left\{ \begin{aligned} & \alpha \text{=atan2f}\left( {{R}_{2,1}}/\sin \beta ,{{R}_{2,0}}/\sin \beta \right) \\ & \beta =\text{atan2f}\left( \sin \beta ,{{R}_{2,2}} \right) \\ & \gamma =\text{atan2f}\left( {{R}_{1,2}}/\sin \beta ,-{{R}_{0,2}}/\sin \beta \right) \\ \end{aligned} \right. \\ \end{aligned}\\
對于,{{R}_{2,2}}=1的退化情況,歐拉角表示為
\left\{ \begin{aligned} & \alpha \text{=atan2f}\left( {{R}_{0,1}},{{R}_{0,0}} \right) \\ & \beta =0 \\ & \gamma =0 \\ \end{aligned} \right.\\
那么,相應(yīng)l次的球諧系數(shù)的變換矩陣可以表示為
R_{SH}^{l}\left( \alpha ,\beta ,\gamma \right)={{Z}_{\gamma }}{{Y}_{-90}}{{Z}_{\beta }}{{Y}_{+90}}{{Z}_{\alpha }}\\
對于第0次的球諧變換矩陣為
R_{SH}^{0}\left( \alpha ,\beta ,\gamma \right)=\left( 1 \right) \tag{30}\\
其它維度的矩陣推導(dǎo)比較麻煩,就推導(dǎo)了第1次的球諧變換矩陣,它可以表示為
R_{SH}^{1}\left( \alpha ,\beta ,\gamma \right)=\left( \begin{matrix} {{c}_{\alpha }}{{c}_{\gamma }}-{{s}_{\alpha }}{{c}_{\beta }}{{s}_{\gamma }} & -{{s}_{\beta }}{{s}_{\gamma }} & -{{s}_{\alpha }}{{c}_{\gamma }}-{{c}_{\alpha }}{{c}_{\beta }}{{s}_{\gamma }} \\ -{{s}_{\alpha }}{{s}_{\beta }} & {{c}_{\beta }} & -{{c}_{\alpha }}{{s}_{\beta }} \\ {{c}_{\alpha }}{{s}_{\gamma }}+{{s}_{\alpha }}{{c}_{\beta }}{{c}_{\gamma }} & {{s}_{\beta }}{{c}_{\gamma }} & {{c}_{\alpha }}{{c}_{\beta }}{{c}_{\gamma }}-{{s}_{\alpha }}{{s}_{\gamma }} \\ \end{matrix} \right)=\left( \begin{matrix} {{R}_{1,1}} & -{{R}_{1,2}} & {{R}_{1,0}} \\ -{{R}_{2,1}} & {{R}_{2,2}} & {{R}_{2,0}} \\ {{R}_{0,1}} & -{{R}_{0,2}} & {{R}_{0,0}} \\ \end{matrix} \right)\\
變換矩陣R_{SH}^{l}的計算可以參見附錄D3D的實現(xiàn),實現(xiàn)了前6次的球諧系數(shù)的旋轉(zhuǎn),對于圖形渲染來說,已經(jīng)夠用了。
對于高維矩陣的構(gòu)造方法非常的復(fù)雜,采用的是魏格納d矩陣(Wigner d-matrices),可以參見文獻[4]的討論,網(wǎng)上也有這個算法的高效實現(xiàn),有興趣可以研究研究,參見SHTns。
附錄
根據(jù)等式(15)的遞歸關(guān)系,就可以很容易計算出連帶勒讓德函數(shù)[3]。
根據(jù)等式(20)(21),可以計算出球諧函數(shù)[3]。
在D3D中實現(xiàn)的球諧系數(shù)的旋轉(zhuǎn)D3DXSHRotate的實現(xiàn)為:
參考
[1] 姚端正, 梁家寶. 數(shù)學(xué)物理方法-第4版..
[2] 顧樵. 數(shù)學(xué)物理方法.
[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.
掃描二維碼推送至手機訪問。
版權(quán)聲明:本文由財神資訊-領(lǐng)先的體育資訊互動媒體轉(zhuǎn)載發(fā)布,如需刪除請聯(lián)系。