参考文章:https://zhuanlan.zhihu.com/p/351289217
球谐函数可以类比泰勒展开,傅里叶级数。都是通过一组不同阶的基函数线性组合而成,只不过傅里叶级数的基函数是三角函数,而球谐函数的基函数是球函数。即正交基为球函数,极坐标即球函数系数。
同样就像傅里叶变换拟合曲线一样,球谐函数拟合3d物体时,所用阶数越高,拟合越贴切,但是也有可能出现过拟合的情况。
若将函数所表示的距离变成颜色上的数值差异,就可以用球谐函数来拟合颜色信息。
参考文章:
漫反射光照函数
L ( p , w o ) = ∫ Ω L ( p , ω i ) n ⋅ ω i d w i L(p,w_o)=\int_{\Omega}L(p,\omega_i)n\cdot\omega_idw_i L(p,wo)=∫ΩL(p,ωi)n⋅ωidwi
进行替换
{ l i g h t ( w ) = L ( p , w ) t ( w ) = n ⋅ w \left.\left\{\begin{aligned}&light(w)=L(p,w)\\&t(w)=n\cdot w\end{aligned}\right.\right. {
light(w)=L(p,w)t(w)=n⋅w
进行球谐函数展开
{ l i g h t ( w ) = ∑ i = 0 L i Y i ( w ) t ( w ) = ∑ i = 0 t i Y i ( w ) \left.\left\{\begin{aligned}&light(w)=\sum_{i=0}L_iY_i(w)\\&t(w)=\sum_{i=0}t_iY_i(w)\end{aligned}\right.\right. ⎩
⎨
⎧light(w)=i=0∑LiYi(w)t(w)=i=0∑tiYi(w)
带回光照函数模型化简
L ( p , w o ) = ∑ i = 0 L i t i L(p,w_o)=\sum_{i=0}L_it_i L(p,wo)=i=0∑Liti
此时形式简单,但是实际上计算时,需要预计算 t i t_i ti,即对每一组法线方向都要计算一组球谐函数得到其系数,实际开销较大。于是利用球谐函数旋转不变性的性质继续推导得到
L ( n ) = ∑ l = 0 ∞ ∑ m = − l l 4 π 2 l + 1 L l m t l Y l m ( n ) L(n)=\sum_{l=0}^\infty\sum_{m=-l}^l\sqrt{\frac{4\pi}{2l+1}}L_l^mt_lY_l^m(n) L(n)=l=0∑∞m=−l∑l2l+14πLlmtlYlm(n)
此时只需要通过顶点着色器传入的法向量n计算出球谐函数 Y l m ( n ) Y_l^m(n) Ylm(n),再与常数相乘,不需按原来要对每个t都单独通过积分求解。
更多【学习-3DGS学习(三)—— 球谐函数】相关视频教程:www.yxfzedu.com