全局光照积分函数拟合

  • By losuffi
  • 周三 18 十一月 2020

傅里叶级数推导与函数投影到正交基函数的类推

在进行全局光照球谐积分时,会遇到使用勒让德正交基函数对光照函数进行逼近的情形。其中对勒让德基函数的系数的计算即为原函数的投影。此文对其投影的数学处理方式进行分析记录

1. 傅里叶级数

​ 在描述光照函数逼近使用勒让德基函数时,会将之与更为熟悉的傅里叶级数进行类比。宏观上来说,两者的工作内容是类似的,都是将原函数进行分解,用其基函数进行线性叠加对原函数进行近似。因此由傅里叶为例进行分析,后面再类推到其他正交基函数的投影计算。

​ 傅里叶公式为:

$$f(x) = A_0 + \sum\limits_{n=1}^\infty[a_n\cos(n\omega t) +b_n\sin(n\omega t)] \tag{1} $$

a. 正交性

​ 将原始函数分解为了两组三角函数。三角函数是具备正交性的,即有:

$$ \begin{align*} \int_{-\pi}^{\pi}\cos{nx\,dx} &=0\qquad(n=1,2,3,...) \tag{2.1} \\ \int_{-\pi}^{\pi}\sin{nx\,dx} &=0\qquad(n=1,2,3,...) \tag{2.2} \\ \int_{-\pi}^{\pi}\sin{kx\cdot \cos{nx}\, dx} &=0\qquad(k,n=1,2,3,...;k \neq n) \tag{2.3} \\ \int_{-\pi}^{\pi}\cos{kx\cdot \cos{nx}\, dx} &=0\qquad(k,n=1,2,3,...;k \neq n) \tag{2.4} \\ \int_{-\pi}^{\pi}\sin{kx\cdot \sin{nx}\, dx} &=0\qquad(k,n=1,2,3,...;k \neq n) \tag{2.5} \\ \end{align*} $$

​ 下面以\((2.4)\)为例,求其定积分,验证其正交正确性

$$ \begin{align*} \cos{kx\cdot}\cos{nx} &= \frac{1}{2}[\cos{(k+n)x} + \cos{(k-n)x}] \\ \sin{kx\cdot}\sin{nx} &= \frac{1}{2}[\cos{(k+n)x} - \cos{(k-n)x}] \\ \sin{kx\cdot}\cos{nx} &= \frac{1}{2}[\sin{(k+n)x} + \sin{(k-n)x}] \\ \\ when \qquad k\neq n:\\ \int_{-\pi}^{\pi}\cos{kx\cdot}\cos{nx\;dx} &= \frac{1}{2}\int_{-\pi}^{\pi}[\cos{(k+n)x} + \cos{(k-n)x}]dx\\ &=\frac{1}{2}[\frac{\sin{(k+n)x}}{k+n} +\frac{\sin{(k-n)x}}{k-n}]|_{-\pi}^{\pi}\\ &=\frac{1}{2}[0+0]=0 \end{align*} $$

其他等式也可逐一验证

b. 系数推导

​ 大体思路为:将\((1)\) 等号的左右两边分别积分,利用三角函数的正交性,将其积分为0,去掉杂项,而后解出其系数

\((1)\)\([-\pi,\pi]\)积分,得:

$$ \begin{split} \int_{-\pi}^{\pi} &= \int_{-\pi}^{\pi}A_0 + \int_{-\pi}^{\pi}{\sum\limits_{n=1}^{\infty}[a_n\cos{n\omega t} + b_n\sin{n\omega t}]}\\ &=\int_{-\pi}^{\pi}A_0 +0=A_0|_{-\pi}^{\pi}\\ &=(\pi-(-\pi))A_0\\ &=2\pi A_0 \end{split} $$

解得:\(A_0 = \frac{1}{2\pi}\int_{-\pi}^{\pi}f(t)\)

​ 求\(a_n\) 项和\(b_n\) 项,方法是相同的,现在\((1)\)等号两边,分别乘上\(\cos{k\omega t}\) 项后,再积分

$$ \begin{align} \int_{-\pi}^{\pi}f(t)\cdot\cos{k\omega t}\,dt &= A_0\int_{-\pi}^{\pi}\cos{k\omega t}\,dt+\sum_{n=1}^{\infty}[a_n\int_{-\pi}^{\pi}\cos{n\omega t}\cdot\cos{k\omega t}\;dt] +b_n\int_{-\pi}^{\pi}\sin{n\omega t}\cdot \cos{k\omega t\;dt}] \tag{3}\\ \end{align} $$

​ 根据三角函数的正交性,仅有\(k=n\)\(\cos{k\omega t\cdot\cos{n\omega t}\;dt}\)积分项不为0,其余项均为0,所以有

$$ \begin{align} \int_{-\pi}^{\pi}\cos(k\omega t)\cdot f(t) &= a_n\sum_{n=1}^{\infty}\int_{-\pi}^{\pi}\cos(k\omega t)\cdot \cos(n\omega t)dt\\ &=a_n\int_{-\pi}^{\pi}\cos^2(n\omega t)dt\\ &=\frac{a_n}{2}\int_{-\pi}^{\pi}(1+\cos{2n\omega t})dt \quad(半角公式)\\ &=\frac{a_n}{2}(\int_{-\pi}^{\pi}1dt+\int_{-\pi}^{\pi}cos2n\omega t\;dt)\\ &=\frac{a_n}{2}\cdot 2\pi \\ &=a_n\pi \end{align} $$

因此解得:

\(a_n=\frac{1}{\pi}\int_{-\pi}^{\pi}\cos(n\omega t)\cdot f(t)dt \quad (k=n)\)

同理可以乘入\(\sin(k\omega t)\)求出\(b_n\)

2.球谐函数拟合

​ 光照函数拟合等式为:\(L(t) = \sum\limits_{i=0}^{\infty}c_iB_i\)

​ 其中\(B_i\) 为基函数,\(c_i\)为对应基函数的系数。其中基函数是已知的,而我们主要是需要求出对应的\(c_i\),在渲染中,通常使用的是线性基函数中的勒让德基正交多项式。勒让德正交多项式有两个参数\(l\)\(m\),将多项式族分解为函数带,其中\(l\)是函数带的索引,是一个从\([0,\infty]\) 的值,而每一个函数带上的\(m\)取值为:\([0,l]\)

tags: 算法