The website uses cookies. By using this site, you agree to our use of cookies as described in the Privacy Policy.
I Agree

球谐光照与PRT学习笔记(一):引入

计算机图形学话题下的优秀答主

球谐光照(Spherical Harmonic Lighting)和PRT(Precomputed Radiance Transfer)这一套东西也是我在鹅厂实习疯狂摸鱼看论文学的。因为没有给在研项目的代码权限,我们实习生就先被晾在一边看论文和写代码了=,=现在先暂时溜回学校搞毕设去了,但是在那搞了一轮学到的SH lighting这套东西还是挺让我眼前一亮的,学完感觉值得总结一下。

向我一样新手入门最好是从[Green 2003]《Spherical harmonic lighting: The gritty details》 这篇文献入手,这篇文献长达40+页,对于老司机来说是啰嗦得不行的,但是作为萌新入门教材就很棒了。但在亲自实现的时候会发现[Green 2003]这篇文献在某些地方还是不算非常细致,所以笔者会以《gritty details》为主体,加一些自己的补充讲一下球谐光照和PRT。内容不少,应该会不止一篇文章,敬请关注。

第一篇几乎都是引入和铺垫性质的内容。


什么是球谐光照?什么是PRT?

那其实顾名思义,球谐光照(Spherical Harmonic Lighting)就是基于球面调和(SH, Spherical Harmonics)这个数学工具的一种光照/着色算法。球谐光照也是一种用让我们捕捉(capture)光照、随后进行重新光照(relight)、实时展现全局光照(Global Illumination)风格的区域光源(area light sources)与软阴影的一种技术。这种技术最初是在Siggraph 2002的论文[2]里面由Sloan, Kautz, Snyder提出的。

如果你可以理解一维函数的傅立叶变换(Fourier Transform),那么其实你也很容易理解在图形学领域里面SH的意义,因为在限定在图形学的语境下,SH就是一种定义在球面上的广义二维傅立叶变换,这可以把离散的球面函数参数化。(顺手分享一个挺好的傅立叶展开可视化网站:

Understanding Fourier Approximations & Oscillators​bgrawi.com

一般来说,球谐光照可以用有限制带宽的Spherical Harmonics来模拟低频的环境光照明,反射光和高光比较高频,用低阶球谐函数来编码的话精度是不够用的。Unity里面的Light Probe据说也是有使用到三阶SH来捕捉光照,所以我觉得Light Probe就有点像是使用Spherical Harmonics来编码的光场(light field)捕捉器

图:前三阶球谐基可视化

[3]Stupid Spherical Harmonic Tricks也介绍了非常多关于Spherical Harmonics的来源与应用:作为拉普拉斯方程的解,SH被用来解决了很多物理上的关于势能(potential)的问题,例如热传递方程、重力场、电磁场等,甚至量子化学和量子力学里面也用SH来对原子中的电子及量子角动量进行建模。不过后来把SH这套数学工具引入CG后,也产生了不少应用:用于模拟体积散射效应(volumetric scattering effects)[4],没有全局阴影的环境反射(environmental reflection)[5],非漫反射的离线光照传输(light transport)模拟[6],BRDF的表示[7],image re-lighting[8],有一定限制的灯光的Image Based Rendering[9],对出射光源的建模[10]等。

图:我这种菜鸡其实并不懂量子力学= =但是量子力学在描述量子轨道角动量和出现概率似乎是用到了球谐函数2333

.

PRT也顺便提提吧,毕竟PRT是SH在图形学里面一个比较重要的应用。PRT全称是Precomputed Radiance Transfer,大致意思是“把场景物体间复杂的光线交互进行预计算和综合”,如果拿Diffuse SH Lighting来举例的话,光线多次bounces/inter-reflection、AO等复杂的“传输”都可以概括成一组球谐系数向量,然后后面跟光照的球谐系数向量进行交互就可以进行着色。至于具体怎么做,这个就用到了Spherical Harmonics的神奇性质了,这里先不展开。


渲染方程

第一篇因为是引入就先不讲那么多了,最后稍微回顾一下渲染方程(The Rendering Equation)吧。最简单的光照模型之一就是漫反射模型(diffuse surface reflection model)了,它也被称作是“点积光照”(dot product lighting),因为光照的强度是要乘个系数的,这系数就是表面法线 [公式] 和入射光向量 [公式] 的点积,也就是:

[公式]

这是渲染方程(The Rendering Equation)[41]的简化,而渲染方程是基于物理建模推算出来的一种“黄金准则”,可以看看[Kajiya 1986]。但问题是,渲染方程并不是那么好解的,最起码在“实时”这个限定条件下是一个很硬核的问题。想想对于表面上的每一个点,四面八方入射的光线都会对他有光照亮度的贡献,单个点的最终出射光强要计算出来就需要很多的光线采样,这么一来几乎难以又精确又实时。求解渲染方程是一个半球面(hemi-sphere)上的积分:

[公式]

其中:

[公式] 是从当前着色位置 [公式] ,方向 [公式] 出射的光线强度

[公式] 是在位置 [公式] ,方向 [公式] 出射的自发光(下标e就是emission的意思吧- -)

[公式] 是在位置 [公式]处的BRDF(BRDF可以看作是出射光radiance和入射光irradiance的比值)

[公式] 是 沿着 [公式] 入射的、从不同于 [公式] 的另一个位置 [公式] 发射的光线

[公式] 是几何项(geometry term),一般就是 [公式] ,也就是cosine-term

[公式] 是可见性测试函数,如果 [公式] 可以“看见” [公式] 则返回1,否则返回0(也就是光线不被遮挡才能有贡献啊)

图:众多入射光都会对出射光产生共贡献

上面的渲染方程只是一个比较简化的版本,但是这里要提一下的就是所谓的“传输函数”(transfer function),按我理解这个传输函数指的就是Precomputed Radiance Transfer的那个Transfer,也就是渲染方程右侧的积分号里面除了入射光以外的项。在Diffuse光照模型里面,transfer function可以直接当作是cosine-weighted visibility[12]。于是我们把“传输部分”和“光照部分”分开操作,分开预计算,最后利用Spherical Harmonics的一个牛逼特性进行快速积分。细节这一篇先不讲了。因为《gritty details》在提到transfer function的时候还没有解释,看得我挺难受的,所以这里先提一下。

下一篇也是铺垫,讲蒙特卡洛积分=v=


引用

[1]Green R. Spherical harmonic lighting: The gritty details[C]// Game Developers Conference. 2003.

[2]Sloan P P, Kautz J, Snyder J. Precomputed radiance transfer for real-time rendering in dynamic, low-frequency lighting environments[C]// Conference on Computer Graphics & Interactive Techniques. ACM, 2002:527-536.

[3]Sloan P P. Stupid Spherical Harmonics (SH) Tricks[C]// 2010.

[4]KAJIYA, J, von HERZEN, B. Ray Tracing Volume Densities, SIGGRAPH 1984.

[5]CABRAL, B, MAX, N, SPRINGMEYER, R. Bidirectional Reflection Functions from Surface Bump Maps, SIGGRAPH 1987.

[6]SILLION, F, ARVO, J, WESTIN, S, GREENBERG, D. A Global Illumination Solution for General Reflectance Distributions, SIGGRAPH 1991.

[7]WESTIN, S, ARVO, J, TORRANCE, K. Predicting Reflectance Functions from Complex Surfaces”, SIGGRAPH 1992.

[8]NIMEROFF,J, SIMONCELLI, E, DORSEY, J. Efficient Re-rendering of Natural Environments, EUGROGRAPHICS Workshop on Rendering, 1994.

[9]WONG, T, HENG, P, OR, S, NG, W. Image-Based Rendering with Controllable Illumination, Eurographics Workshop on Rendering, 1997.

[10]DOBASHI, Y, KANEDA, K, NAKATANI, H, YAMASHITA, H. A Quick Rendering Method Using Basis Functions for Interactive Lighting Design, EUROGRAPHICS 1995.

[11] Kajiya J T. The rendering equation[J]. Acm Computer Graphics, 1986, 20(4):143-150.

[12] http://jankautz.com/courses/ShadowCourse/09-RadianceTransfer.pdf

Measure
Measure
Summary | 1 Annotation
这系数就是表面法线 和入射光向量 的点积
2021/01/25 03:22