学习笔记--关于Spherical Harmonic
xheartblue <chsdate year="2006" month="2" day="4" islunardate="False" isrocdate="False" w:st="on">2006-2-4</chsdate>
关键字:
Spherical Harmonic 球面调和函数 球面谐波函数 球形调和函数
关联勒让德方程 勒让德多项式 正交多项式 正交函数系
pdf: http://xreal.51.net/Download/SphericalHarmonic.pdf
url: http://xreal.51.net/Game/sphericalharmonic.htm
Spherical Harmonic 在图形学里,准确的说应该是高级光照技术里, 最近恐怕比较流行. 出于赶时髦的原因,我也在看,无奈数学基础太差了. 只好几乎把所有的时间全用在数学上了.从基本的数学分析看到泛函分析. 名词听的多了,渐渐也对Spherical harmonic 是什么玩意有了一点点了解. 了解而已, 不是理解..写出来, 整理整理思路而已. 望还不了解Spherical Harmonic何物而来看本文的人自己能带着鄙视的眼光去理解. 否则如果本人理解错误而带坏了小孩概不负责 特此申明.
Spherical harmonic 翻译成中文应该叫 球面调和函数, 是调和函数的一种. 所谓调和函数是一类函数(好像是废话). 满足Laplace 方程的<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path=" m@4@5 l@4@11@9@11@9@5 xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0 "></f><f eqn="sum @0 1 0 "></f><f eqn="sum 0 0 @1 "></f><f eqn="prod @2 1 2 "></f><f eqn="prod @3 21600 pixelWidth "></f><f eqn="prod @3 21600 pixelHeight "></f><f eqn="sum @0 0 1 "></f><f eqn="prod @6 1 2 "></f><f eqn="prod @7 21600 pixelWidth "></f><f eqn="sum @8 21600 0 "></f><f eqn="prod @7 21600 pixelHeight "></f><f eqn="sum @10 21600 0 "></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 42pt; HEIGHT: 15.75pt" coordsize="21600,21600" type="#_x0000_t75" o:ole=""><imagedata src="sphericalharmonic.files/image001.wmz" o:title=""></imagedata></shape>的函数u称为harmonic function. harmonic function据说有一些很特殊的性质(偶还不了解是什么性质) , 于是有了harmonic analysis 这样的的数学分支.
在极坐标系中把拉普拉斯方程表示成极坐标的形式,然后进行分离变量. (这个过程实在是太乱了,打个公式要半天, 具体见工程数学: 数学物理方程和特殊函数). 我们在求解这个方程的时候,会得到一个只和<shape id="_x0000_i1026" style="WIDTH: 9.75pt; HEIGHT: 14.25pt" coordsize="21600,21600" type="#_x0000_t75" o:ole=""><imagedata src="sphericalharmonic.files/image003.wmz" o:title=""></imagedata></shape>有关的方程<shape id="_x0000_i1027" style="WIDTH: 207.75pt; HEIGHT: 38.25pt" coordsize="21600,21600" type="#_x0000_t75" o:ole=""><imagedata src="sphericalharmonic.files/image005.wmz" o:title=""></imagedata></shape>这个方程称为连带勒让德方程或者关联勒让德方程 – Associated Legendre Equation (恩,看来是个法国进口的方程.洋货啊, 看起来都复杂一些) . 给这个方程加一些条件,可以得到一些解. 其中有一些就叫勒让德多项式. 勒让德多项式是正交的.所谓正交的. 表示这个玩意满足<shape id="_x0000_i1028" style="WIDTH: 183pt; HEIGHT: 20.25pt" coordsize="21600,21600" type="#_x0000_t75" o:ole=""><imagedata src="sphericalharmonic.files/image007.wmz" o:title=""></imagedata></shape>.
从实变函数和泛函分析的课程可以知道, 在L2空间中, 函数可以展开成关于一组完备的正交函数集, 典型的傅立叶级数就是个例子. 并且展开形式为<shape id="_x0000_i1029" style="WIDTH: 57.75pt; HEIGHT: 20.25pt" coordsize="21600,21600" type="#_x0000_t75" o:ole=""><imagedata src="sphericalharmonic.files/image009.wmz" o:title=""></imagedata></shape>其中ci为系数,在傅立叶级数中,这个就是所谓的傅立叶系数, Bi为正交函数中的一个.其中<shape id="_x0000_i1030" style="WIDTH: 63pt; HEIGHT: 21.75pt" coordsize="21600,21600" type="#_x0000_t75" o:ole=""><imagedata src="sphericalharmonic.files/image011.wmz" o:title=""></imagedata></shape>.也就是函数在Bi这个基(向量空间中的基)上的投影, 也就是函数空间中的内积运算. 这样我们可以把任何一个函数都展开成级数.当然这个函数是要满足一定条件的.比如平方可积.
现在我们回到球面上来. 构造正交函数系<shape id="_x0000_i1031" style="WIDTH: 198.75pt; HEIGHT: 36.75pt" coordsize="21600,21600" type="#_x0000_t75" o:ole=""><imagedata src="sphericalharmonic.files/image013.wmz" o:title=""></imagedata></shape>. 这玩意就是前面那个Laplace方程一个解,也就是传说中的spherical harmonic. 那个P呢,就是勒让德多项式了. 可以验证.他是一个正交的函数系. 而且是完备的. 用它.我们可以把球面上任何一个函数展开成以<shape id="_x0000_i1032" style="WIDTH: 198.75pt; HEIGHT: 36.75pt" coordsize="21600,21600" type="#_x0000_t75" o:ole=""><imagedata src="sphericalharmonic.files/image015.wmz" o:title=""></imagedata></shape>为基的级数.. 当然, 在球面上的遮挡关系也是可以这样的函数 , 球面上各个方向的辐射强度也是这个这样的函数, 同样次表面散射的能力也是个这样的函数, 理论上我们可以把这些函数用spherical harmonic 精确的还原出来. 而我们只需要记录那个Ci就可以了… 不过Ci是无穷多个. 出于人道主义,在一般的real-time rendering中,似乎Ci的个数是16 . 这也就是spherical harmonic光照,不能模拟高频场景的一个原因了. 同时Ci的计算是比较复杂的. 这样很容易理解为什么DX9里的那几个demo的预处理跟乌龟一样.
其实Ci的计算除了慢以外, 还很有技巧, 具体见<Advanced.Lighting.and.Materials.With.Shaders>的相关章节, 准确说是第8章.
而关于spherical harmonic则见….. 偶还没有这样的书 .不过<数学物理方程和特殊函数>中,有关于勒让德多项式的详细章节了.同样作为工程数学, 它还教你怎么用这个东西来近似球面上的一些函数,,, 比如电荷分布之类的. 类推到图形学上 …. 呵呵, 不说了. 实在没怎么看明白.
参考书籍和资料
http://mathworld.wolfram.com/SphericalHarmonic.html 关于spherical harmonic的.
<工程数学: 数学物理方程和特殊函数> 高等教育出版社 南京工学院编著 关于Legendre Polynomial的.
<函数论和泛函分析初步> 关于L2空间和L2空间上的傅立叶变换和傅立叶级数
<Advanced Lighting and Materials With Shaders > 专门介绍高级光照的(又是废话,看书名就知道) 有人说这本书不好. 不过我觉得似乎这本书里讲SH是讲的最清楚的. 本着厚道的原则,顶一下.