探讨基于球谐函数的全局光照

球谐光照是基于预计算辐射度传输(precompute radiance transfer, PRT)理论实现的一种实时渲染级技术。预计算辐射度传输技术能够实时重现在区域面光源照射下的全局照明效果。
这种技术通过在允许运行前对场景中光线的相互作用进行预计算,计算场景中每个物体表面点的光照信息,然后用球谐函数(spherical harmonic lighting)对这些预计算的光照信息数据进行编码,在运行时读取数据进行解码,重现光照效果。

球谐光照使用新的光照方程来代替传统的光照方程,并将这些新方程中的相关信息使用球谐函数投影到频域,存储成一系列的系数。在运行渲染过程中,利用这些预先存储的系数信息对原始的光照方程进行还原,并对,待渲染的场景进行着色计算。这个计算过程是对无限积分进行有限近似的过程

半球空间的光照方程
这个光照模型不过是真实的物理光照模型的简化。因为真实的物理光照模型的计算公式相当复杂,要完全实时计算是很困难的。所以要采用一个简化的模型。如下式所示:
在这里插入图片描述
上面公式表面,某个半球空间的出射辐射度值等于入射辐射度的立体角微分在半球上的积分。而入射辐射度值利用辐射度传输算法或者光线追踪算法产生。

在现阶段的硬件体系中,很难高效快速地求解积分,而是使用蒙特卡洛积分进行近似。

蒙特卡洛方法这里就不再赘述,之前的章节介绍过。

下面来介绍下正交对偶基函数和球谐光照

球谐光照的核心就是球面亮度信号编码和重建。信号在满足一定条件下,可以分解为一系列正弦谐波的和,这就是傅里叶级数。经过全局光照计算后,物体表面上的点会得到一个球面的亮度信号,但是不可能为每一个点都保存一个环境贴图,因此需要对这个定义在球面的亮度信号进行编码。而在实时重现时,利用编码快速重建原球面亮度信号,进而计算光照效果。

从傅里叶变换的知识可得到,一个原始信号波可以由一系列带有缩放因子的简谐波叠加而成,这些简谐波的波函数称为基函数。要想利用这些简谐波重建原始信号波,就需要知道每个基函数的缩放因子。而重建原始信号波,只需要将各个基函数经过它们的缩放因子运算处理后,再求和即可。

假定有一个原始函数O(x),自变量x属于D,选取了N个基函数,O(x)的近似函数定义为O’(x)。每个基函数Bi(x)的系数为Ci,这样就得到:
在这里插入图片描述
系数Ci怎么求出来呢?是使用原函数O(x)和Bi(x)的对偶函数Bi’(x)的卷积积分得到,如下:
在这里插入图片描述
那么基函数的对偶函数需要满足下面的条件,才能称为对偶函数:
在这里插入图片描述

有多种基函数可以用来重建信号波,如傅里叶级数中的余弦信号等,但在球谐光照中使用的是正交基函数。正交基函数有两个重要的属性,首先是正交性,当给定两个不同的基函数Bi(x)和Bj(x),且i!=j,这个两个基函数乘机的积分为0,如下所示:
在这里插入图片描述
正交基函数的另一个属性是规范化特性,即基函数Bi(x)和自身的乘机的积分为1,如下所示:
在这里插入图片描述
采用规范化正交基函数有两个优点:
1,这这种正交基函数上进行投影函数(function projection)较为方便;
2,这些正交基函数的乘机积分可高效地进行计算。
第一个优点,规范化正交基函数的对偶函数是自身,所以求7-39中的系数Ci,不需要再另外求对偶函数,直接用基函数代入即可。

当需要计算多个近似函数的乘机积分时,充分利用第二个优点可大幅度提高计算效率。例如有两个函数O1(x),O2(x),它们的近似函数分别为O1’(x)和O2’(x),它们各自系数为Cai和Cbi,两者近似函数乘机积分为:
在这里插入图片描述
因为规范化正交基函数,当给定两个不同的基函数Bi(x)和j(x)且有i!=j时,这两个函数的乘机的积分为0,
而只剩下i=j,
在这里插入图片描述
又因为正交基函数i=j时,乘机积分的值为1。
所以最后简化为:
在这里插入图片描述

对于渲染应用,通常会采用实数值的球谐函数,虚数部不使用,基于球面坐标系下的实数球谐函数的定义如下:
在这里插入图片描述
有了正交基函数,便可以把原始的分布在球面空间上的函数进行球谐投影(spherical harmonics projection)。
球谐投影即把原始函数改用球谐基函数进行近似代替。假设原始函数为g(s),s是关于球面坐标系的天顶角theta和方位角fi
的函数。
作为基函数的球谐函数Yl,m(theta,fi)可改写成Yl,m(s)。投影后的近似函数为g’(s)。
根据规范化正交基函数的对偶性质,正交基函数的对偶函数便是它自身,因此这时加权系数Cl,m为:
在这里插入图片描述
结合7-38公式,得到投影后的近似函数g’(s):
在这里插入图片描述
这里Yl,m是正交的球谐基函数。
上面的式子就是重建原始信号波的过程,把事先计算的各项加权系数与对应球谐函数相乘,然后对这些乘机进行累加,即为近似的原始信号。
上面的式子两个求和符号写起来不方便,所以改写成下面的式子:
在这里插入图片描述
在这里插入图片描述
使用蒙特卡洛积分,球面上的概率密度函数为1/4pi。
所以Ci等于:
在这里插入图片描述

综上,一个lmax阶的球谐函数需要lmax平方个系数和基函数进行近似。
理论上需要无穷项的基函数才能完美地重建原始信号波,但这是不可能的,所以只能用近似的“限制带宽”的方法,即lmax得取值不能过大,只取有限得低频(即使l取值较小的)基函数,而将高频(l取值较大的)基函数忽略掉。
这也决定了基于球谐函数重建的信号波会丢失很多高频信号,即亮度信号的细节会发生变化。

到此为止,已经有了这一系列的系数Ci的计算方式,又有一系列选定的基函数,因此可以对球面上的光照函数进行投影和还原了。

回顾下式子:
在这里插入图片描述
上式是原始光照方程式。
其中fr分量,对漫反射来说,在各个方向上反射光线均相同,用一个常数k表示;
此时简化为:

在这里插入图片描述
又考虑不遮挡的情况,所以V函数为1,遮挡的为0,这里考虑不遮挡的情况,所以取值为1。

那么只剩下L和G函数,把它们用球协函数表示,在根据式7-43和7-44得到,最终变成各自基函数系数在这里插入图片描述在这里插入图片描述
的乘机之和:
在这里插入图片描述
所以,通过使用有限个基函数及其系数值,能逼近出无限积分才能达到的效果。这就是球协光照的核心思想。

再次叙述球协光照的算法:
为了得到原始的光照计算函数light(s)的积分结果,s是球面。
选用若干组基函数Bi(s)和这些基函数对应的系数Ci,
将各组基函数和加权系数相乘,然后累加乘机值,这个累积值就近似等于原始函数light(s)的积分结果。
其中Bi(s)是球协函数,而Ci为带求系数。求Ci的方法是:采样若干Si,得到每一个自变量Si对应的原始计算函数和基函数乘积,再累加可得Ci。最后便可求得原始光照计算函数的积分近似计算结果。

发布了610 篇原创文章 · 获赞 96 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/wodownload2/article/details/104206155