Environment Lighting2
Shadow from environment lighting:工业界一般采用环境光中较为明显的阴影作为主要阴影,也就是一个阴影或者两个三个左右,由于每一个着色点都要考虑着色和阴影,所以不能直接使用采样的方法,这里使用效率更好的方法PRT。
傅里叶级数展开:一个函数可以由非常多的sin和cos函数表示,这些cos又叫做基函数。
product integral:这个式子是一种卷积计算,也是filtering,得到结果的频率由式子中最低频率的部分决定
Basis Functions:可以表示出其他函数的一系列函数。其中Bi(x)就是基函数。
Spherical Harmonics:定义在球面上的一系列二维的基函数,这些基函数可以看作是球面上的点,这些点可以用θ和φ表示。图形表示出Spherical Harmonics,每一层的频率都不一样。
Spherical Harmonics的各项可以用数学式表达。一个二维函数的基函数系数可以用product integral立马算出来
Prefilter:Prefilter+一次查询等于没有filter加上多次查询求平均
在render Equation中,L和BRDF和cos项,其中cos和BRDF看作一体,也就是光源L和BRDF项的积分,同时也是product integral,由于光有高频率和低频率,但BRDF在diffuse时的频率很低,所以在diffuse时render Equation的频率只由BRDF决定,也就是一个低通滤波器。
diffuse时的BRDF投影到Spherical Harmonics,基本可以用前三阶表示。
由于在diffuse时render Equation的频率只由BRDF决定,光照的高频就没有用,所以可以用前三阶的Spherical Harmonics来近似光照,也能得到非常好的效果。这也是Spherical Harmonics的应用。
在计算环境光下的阴影时,如果通过直接计算积分的方式,会非常费力,所以这时使用其他方法来计算
Precomputed Radiance Transfer:把L(i)作为lighting项,后面作为light transport项,整体上分为两项。其中光照是二维,由于看的方向是固定的,所以BRDF也是二维的, V(i)也是二维的。L(i)用基函数近似表示。
在diffuse的情况下,BRDF是常数,可直接提取到积分外,这时积分内就剩下光照和visibility项,visibility项和cos也就是light transport,然后用基函数近似光照,把求和符号拿到积分限外,li作为常数也拿到积分外,积分内就是基函数乘以light transport,这种情况也就是light transport投影到基函数上,得到的结果就是常数,所以这里可以进行预计算,在它们都是不变的情况下,即场景不变visibility项不变,光照也不变。此时的积分结果就是一个数,最终的结果也就是一个点乘了。所以PRT的代价也就是如果场景变化了,就需要重新计算。PRT的使用情况也就是diffuse和场景中物体不变。对于光照,可以预计算不同的光照,比如室内光照和室外光照,只需要改变对应基函数的系数就可以了,但时如果光照发生旋转,就要用Spherical Harmonics来算出旋转后的结果。
光照在发生旋转后,由SH基函数近似的光照,其基函数会发生变化,SH基函数会由同阶的基函数线性组合成,所以可以非常迅速的完成光照的旋转操作。
之前是把lighting投影到SH上,现在把lighting and light transport都投影到SH上
得到下图的结果
之前的PRT是在diffuse的情况下,如果在Glossy下,BRDF是四维的,不再是常数。此时把lighting and light transport投影到SH上,light transport会有问题,得到的结果是一个关于视角方向的函数Ti(o),此时把Ti(o)再投影到SH上,得到的基函数前面的系数是一个二维矩阵。然后着色结果的前面的系数部分就是向量乘矩阵。