原文链接:https://blog.uwa4d.com/archives/Study_Haar.html
上一期惟学无际我们给大家介绍了一篇 基于球面调和基函数(Spherical Hamonices,简称 SH )的动态全局光照明算法。它的思路是:将光线在物体间复杂的传输过程看作一个传输函数,预先模拟计算好并用 SH 基函数来近似表示。同时,在实时光照计算时,将入射的环境光用 SH 基函数近似,这样光照渲染结果可以用两者的 SH 基函数的点积进行计算。该算法通过预计算模拟,使得实时计算的复杂度大大降低,从而能够支持实时动态光源的全局光照明渲染。但是,该算法有一个缺陷,即只能获得低频的渲染效果。因此,基于 SH 的 PRT 只能渲染类似于 AO(Ambient Occlusion)的软阴影,无法渲染有明显轮廓边界的真实阴影。
今天介绍的这篇文章是 Ren Ng 等人在2003年发表于 Siggraph 会议上的经典论文 《All-Frequency Shadows Using Non-linear Wavelet LightingApproximation》,目前该篇文章的引用次数已经超过400次。在这篇论文中,作者提出了一个采用非线性小波变换来代替线性 SH 变换的 PRT 算法。实验结果证明,相较于前人的 SH 函数,本文作者在使用相同数量的小波函数时,能够更好地捕捉到全局光照明的高频信息。因此,该算法能够渲染出更加真实的全局光照明效果,比如具有明显边缘的实时阴影。
首先我们来看看这篇论文的效果图,如上图所示。其中,左图是基于 SH 的 PRT 渲染结果,右边是基于小波的 PRT 渲染结果。两幅图采用了相同数量的基函数项:左图采用100个 SH 基函数,右图采用100个小波基函数。中间的六个方形纹理则是环境光贴图。比较左右两图的阴影渲染效果则可以发现,右图的阴影边缘较为清晰,而左图的比较模糊。因此,在使用相同数量基函数的情况下,小波变换比 SH 变换能够捕捉到更高频的光照信息,渲染结果更加贴近真实情况。接下来,我们将详细介绍这篇论文算法的主要内容。
所有的渲染问题,其实都是在解决渲染方程的计算问题。这篇论文也不例外,因此我们首先来介绍渲染方程。考虑物体表面某一点 x,其法线方向为 n,则该点从 ωo 方向反射出的光 P( x, ωo ) 可表示为:
其中,L 为入射光强,V 为可见性函数,fr 为BRDF函数,n 为法线方向,ω 为入射光方向。
论文算法可以应用于两种情况:1)视点变化,材质限定为Diffuse;2)视点不变,材质任意。接下来我们分别介绍这两种情况下的解决方案。
1.1 视点可变且材质限定为Diffuse
当材质限定为Diffuse时,传输函数可以表示成为:
1.2 视点不变且材质任意
当材质为任意时,传输函数可表示成为:
其中,由于视点固定,所以 ωo 只跟 x 相关。
渲染方程中的积分式可以看成入射光强 L 与其他项关于入射光方向 ω 的卷积。离散化后就变成对应项相乘之后求和。于是,对于每一点 xi ,其光照计算可表示成为:
如果用矩阵以及向量形式表示,则可简化为:P= T · L 。其示意图如下图所示。
1.3 预计算
在预计算阶段,论文作者采用了两种方法。第一种方法是每次对传输矩阵 T 的一列进行模拟计算,也就是对入射光向量 L 的每一个方向 ω 做计算,计算方式是光线跟踪。因此,T 中每一列向量表示的是环境光贴图每一个像素照射场景的结果。该方法比较简单,并且支持各种全局光照效果,但是它只支持固定视点的情况。
第二种方法是每次对传输矩阵T 的一行进行模拟计算。这种方法只计算直接光照的部分。因此,传输矩阵的每一行表示的是物体表面某一点 x 的可见性立方体贴图外加BRDF和Cosine项的权重,如下图所示。
上方图片为场景中某些顶点的预计算结果。其中,第一张图是场景底部面片某一点的预计算结果,第二张图是植物下方某点的预计算结果,第三张图是植物叶子上某点的预计算结果。该方式可以用光栅化图形硬件来实现。论文作者对每一个点 x ,首先渲染一个高分辨率的半立方体可见性贴图。然后计算BRDF和Cosine项的权重值,并且进行降采样到环境贴图一样的分辨率。
1.4 实时渲染
在实时渲染时,论文作者首先将环境光贴图通过2D Haar小波变换计算出相应的系数向量 L 。然后,选用了一部分入射光进行计算。其主要目的是通过删减能量比较小的入射光来减少计算量。论文作者采用了三种过滤方法。第一种是直接用Haar小波系数的大小进行过滤,第二种是用传输矩阵的对应列计算出一个权重,第三种是用光源的面积大小来过滤。然后,计算 L 与 T 的乘积得到最后的渲染结果。整个计算过程是在 CPU 端进行,因为小波变换后的系数向量和矩阵是非常大的稀疏向量和矩阵,而当时的 GPU 无法支持通用的稀疏矩阵乘法运算。
论文作者分别用 SH 基函数以及小波基函数对环境光贴图进行模拟,并且比较了两者在采用不同数量基函数时的结果与原始环境贴图差别,如下图所示。
其中,左右两幅图是分别对两张不同的环境光贴图的模拟结果。在左右两图中,左边一列是分别用100、4096以及10000个SH基函数项对环境光贴图的模拟结果,右边一列上两幅图是分别用100和4096个小波基函数项对环境光贴图的模拟结果,第三幅是原始环境光贴图。对比 SH 和小波的模拟结果可以看到,对于比较简单的环境光贴图,小波基函数只需要100项即可捕获高频信息,而 SH 需要4096项才能达到相似的结果。对于复杂的环境光贴图,小波基函数只需4096项即可还原出原始贴图,而 SH 即使采用10000项依然无法很好地还原原始贴图。
小波变换之所以能够用非常少的项就能捕捉全频光照信息的原因是,经过小波变换后,大部分项的系数变成了零或接近于零,如下图所示。
经过实验发现,小波变换之后非零项所占的比例只有0.1%~1%。小波变换相当于对全频信息进行了压缩。因此,采用相同数量项时,小波变换能捕获的光照信息要比 SH 更多。但是,小波变换也有它的局限性。它并不具备 SH 的旋转不变性,因此在传输函数中法线方向 n 被看作位置变量 x 的函数。这意味着基于小波变换的 PRT 无法实时渲染物体经过旋转后的结果。而SH则没有此限制。这也是基于小波变换的 PRT 在随后的研究中发展受限的主要原因之一。
论文作者对比了采用不同数量项的 SH 基函数和小波基函数对环境光贴图近似结果与原始图的 L2 误差,如下图所示。
可以看到,随着项数的增加,SH 和小波的近似误差都在减少。但是小波收敛的更快,到1000 时已经比 SH 在10000项时的误差还要小了。
论文作者渲染了采用更多的场景进行实验,下表统计了不同场景中对环境光贴图进行采样的分辨率、稀疏矩阵中非零项的比例以及内存占用量。
更多的渲染结果如下图所示,上排是 SH 渲染结果,下排是 Haar 小波渲染结果。从左到右采用的基函数项逐渐增加。可以见到 Haar 小波在采用相同数量基函数项的情况下,比 SH 渲染出的阴影结果具有更多的高频细节。
本篇论文提出了使用Haar小波函数来作为PRT的基函数,从而实时渲染出能够保留全频信息的全局光照明效果。与球面调和基函数相比,Haar小波基函数同样具有标准正交性,同时,它的高压缩比特性可以让其以非常少的参数就可以保留住渲染效果的高频信息,进而达到全频光照明的渲染效果。虽然Haar小波由于自身特点限制在后续的全局光照明渲染中并没有得到广泛的应用,但其在推进全局光照明的实时渲染研究领域,有着不可磨灭的贡献。
论文参考视频:
视频网址:https://v.qq.com/x/page/n0384trr1va.html
作者介绍:
Ren Ng,目前就职于UC Berkeley
个人主页:https://www2.eecs.berkeley.edu/Faculty/Homepages/yirenng.html
Ravi Ramamoorthi,著名计算机图形学学者,目前为UCSD教授。计算机图形学界大牛,发表论文数量可谓著作等身(Publications 好几页翻不完)
个人主页:https://cseweb.ucsd.edu/~ravir/
Pat Hanrahan,著名计算机图形学学者,目前为斯坦福大学教授。计算机图形学界大牛,曾经在Pixar工作,为RenderMan Shading Language开发者之一
个人主页:https://graphics.stanford.edu/~hanrahan/
下载连接:
https://graphics.stanford.edu/papers/allfreq/allfreq.pdf
这是侑虎科技第213篇原创文章,欢迎转发分享,未经作者授权请勿转载。如果您也有任何独到的见解或者全新的发现也欢迎联系我们,一起探讨。(QQ群465082844)
为学无际是UWA在2017年推出的全新研究型专栏,我们将为大家推荐极具实际价值的学术论文,并梳理其中的研究背景、实现原理和执行方法等。内容专注于游戏、VR和AR相关的计算机图形学领域。正所谓问渠哪得清如许,为有源头活水来 ,希望大家在研发的过程中不仅知其然,还能知其所以然。