Spherical Harmonics lighting

http://www.research.scea.com/gdc2003/spherical-harmonic-lighting.pdf

 

这个blog只是接触到非常有限的SH的内容,因为里面很多数学的确看起来比较头疼,所以看到够用就停了,理解也比较直白和山寨。

 

GI讨论的问题,从某个角度看来,可以看作是空间一个点它受到的光照,这个光照来自周围360度,也就是个球面。

 

其中一个很大的问题就是怎么保存和表示这个360度的光照信息。

 

spherical harmonics lighting(后面简称为SH)就是解决这个问题。

 

1,投射理解:

SH要做的事情就是让这个表达简单而且使用方便,它有个性质非常牛就它的基函数是标准正交的(orthonormal)。

 

对于在标准正交基函数投射我们可以用vector投射在x,y,z轴上的投射来类似理解,一个vector可以用在x,y,z轴上投射的系数来表示,SphericalHarmonics是定义了一组标准正交基函数,一圈lighting信息在这个基函数上投射出一组系数,然后记录下来,就是表示好了。

 

2,基函数展开理解:

spherical harmonics也是类似傅立叶展开一样,是对一个函数用一组基函数展开的过程。

在需要的情况下,我们可以舍弃后面的项取前面的项来做一个近似,这一点也非常适合GI,因为我们并不要求对indirect lighting非常准确的表达。

 

3,系数求解:

因为它是标准正交的(orthonormal),所以求每一项的系数就变成对在整个球面做积分,积分的内容是这个方向的亮度乘以这个方向上的SH基函数的值,就可以得出系数了。

 

4,系数操作:

多个lighting信息要做相加的时候,就是把系数相加就可以了,参照向量加减法。

使用的时候,orthonormal也可以带来非常多的好处,类似lighting和transfer function的相乘积分可以转化成系数的点乘。。。

 

其他高杆的东东,还有一堆像旋转的,没心思看,用到了再看吧。

 

5,具体使用

 

有一种用法就是做3级展开,一共9个基函数展开,第一级就是一个常量,无视,其他几级的话可以用两个cubemap来表示,每个texel 的rgba都保存东西,刚好是其他几个基函数都可保存。

那么每个texel就保存这个方向上的每个基函数的值,我还有系数,就可以还原每个方向上的光照信息了。

 

 

 

 

 


原文链接: http://blog.csdn.net/ccanan/article/details/4952939

你可能感兴趣的:(Spherical Harmonics lighting)