IBL与球谐光照

 

IBL和球谐光照都可以用于计算间接光照。回顾下无外发光物体的渲染方程,brdf系数可以分解为漫反射部分和镜面反射部分,如下:

[公式] [14]

在式14中,因为漫反射部分kd与积分项立体角无关可以提出积分部分,同时IBL对于漫反射通常采用预计算的方式算出点X出射方向 [公式] 的辐照度,通过点X所在表面的法线生成基于立方体贴图的辐照度图。实时计算时,只要根据表面法线n去采样辐照度图即可。

IBL和球谐都可以用于计算间接光照的漫反射,因此仅在漫反射范围,我们可以看看IBL和球谐的区别(仅个人理解,有叙述不准确的地方希望大佬指教,轻喷):

  • 真实感:IBl在计算辐照度时,是通过采样点生成的方向矢量去采样环境贴图,这意味着不同几何体的采样点只要相同方向矢量对应的环境贴图辐射率就会相同,这有可能会破坏场景真实感。而球谐基于Light Probe的方案可以采用插值,范围截断的方式,让光照计算只针对特定范围内的Light Probe进行计算。
  • 旋转:IBL和球谐都可以采用预计算的方式来节省实时渲染的计算量。在动态场景中,可能会涉及到几何体旋转(例如刚体运动)。此时因为IBL辐照图的生成依赖采样点方向,所以只能适应静态场景。而球谐系数支持旋转,可以针对旋转矩阵R预计算出匹配到球谐投影后的旋转矩阵 [公式] ,具体方法请参考[3]。对于场景中的一个几何体,如果做的是刚体运动,可以简单的针对光照的球谐系数进行旋转。而对于几何体的非刚体运动,可以通过采用基于多lobe的zonal harmonics去拟合传输分量,再针对拟合后的zh系数进行旋转。在文章[4]中给出了通过采用球谐旋转特性来完成Deformable PRT计算的推导,同时因为采用lobe拟合传输函数会造成误差,文中也给出了基于单lobe和multi lobe拟合时如何求最小误差的方案。
  • 存储:IBL针对漫反射生成的是辐照图,而球谐是基于场景顶点存储球谐系数。在单球谐场景,球谐存储的计算量相当于球谐阶的平方(3阶球谐只需存储9个常量),相比生成6 * 64* 64的小场景IBL辐照图,计算量大大减小。而在密集分布的几何体点集场景中,可以通过多Light Probe插值和PCA来降低多Light Probe带来的存储量。

posted on 2021-12-06 22:06  星吊  阅读(488)  评论(0)    收藏  举报

导航