04 Real-time Global Illumination(GI)

etherovo / 2023-05-03 / 原文

3D Space

1. Reflective Shadow Map(RSM)

  • 在RTR中,全局光照是想要得到比直接光照多一次bounce的间接光照。一切被直接光照照亮的物体都可以作为one bounce间接光照的光源(indirection light)。所以,全局光照就是direction+indirection。
  • 需要知道次级光源有哪些:shadowmap;需要计算次级光源在shading point的贡献:蒙特卡洛。
  • 可以将shadow map的每一个像素看作一个次级光源。
  • 假设反射物都是diffuse的,则不需要考虑观察方向对反射光观察结果的影响。
  • 只需要存储flux。对于visibility不容易计算,所以不做计算。

  • 给定一个shading point,只需要找到距离比较近的次级光源就可以了。
  • 在世界坐标系下找到相近位置比较复杂,可以在shadowmap中查找,通过采样得到。
  • 在RSM中,除了depth,还保存了世界坐标(计算距离)、法线、flux(光源属性)。
  • 容易实现;但是shadowmap用于找到次级光源其数量与光源数量有关、不计入visibility、假设反射物diffuse、采样率与质量权衡。

2. Light Propagation Volumes(LPV)

  • 步骤




    四五次迭代就会稳定。

  • 问题:把每个格子的光线集中到中间位置就会导致格子内部的的光照出现问题。尤其是当物体几何比格子要小时更严重。而划分小格子会造成计算和存储的问题。

  • 斜角格子不计算传播,因为 下一步会继续传播过去。

3. Voxel Global Illumination(VXGI)





  • 问题在于实时体素化会比较慢。

Screen Space

对屏幕空间/图像空间做后期处理,在直接光照的基础上加入全局光照。

4. Screen Space Ambient Occlusion(SSAO)

  • 让物体的空间关系感觉即立体感更强。

4.1 假设

  • 将间接光照假设为常量,但是考虑遮蔽关系即visibility,此外假设为diffuse反射。

4.2 理论

  • 将间接光照分作平均visibility与一个常数(任意给定)的乘积。
  • 在这里的假设中,间接光照是常数,且diffuse的albedo是常数,即BRDF是aldebo/pi是常数,所以拆分合理。
  • 将cosine加入到visibility中,是将立体角转换为投影立体角。相应的,cosine积分就是单位圆面积,即pi。这样做的目的也许是为了个visibility加权,即与法线方向越是接近的光线被遮蔽的问题越严重。
  • 一种简单的推导

4.3 KA

  • 对于一个shading point,只考虑附近有限范围内的半圆,不考虑远处光照,然后计算KA。
  • SSAO的方法则不同,在shading point周围的一个球内做随机采样,使用shadow map来评比这些点是否在物体内部即被遮挡,来计算KA。
  • 但是KA只需要用到半球,因此只有内部点数过半才考虑AO问题,并采取过半的内部点数来计算KA。
  • 此外,这个是均匀计算visibilit,没有cosine。
  • 但是,对于空间位置关系不直接,反而在深度图上接近的像素,可能会出现不必要的AO现象。
  • 为较少采样,先使用少量sample得到noisy的AO,然后做denoisy,因为全局光照会配合直接光照,所以相比于噪声模糊问题不大。


4.4 Horizon Based Ambient Occlusion(HBAO)

  • 考虑到法线之后,就可以只对半球做采样
  • 此外,考虑法线之后可以加权
  • 此外,只考虑一定范围内的遮挡,不像SSAO完全考虑。

5. Screen Space Directional Occusion

  • 基于屏幕上被直接光照照亮的地方作为简介光照的光源,优化了SSAO对间接光照是常数的假设。
  • 从shading point随机打出光线,如果打到物体则获得间接光照,如果没有打到物体,则只有直接光照。
  • SSAO与SSDO思路相反,AO首先假设具有间接光照然后考察遮挡,认为间接光照来自远处而近处存在遮挡,BO首先检查遮挡然后判断间接光照。认为间接光照只来自近处,这是SSDO的一个问题。

  • 基于shading point的法线找到上半球,然后采样,使用camera出发的shadow map来判断是否能被看到或者说是否能被挡住,然后将不可见的点沿着光线找到表面对应位置的间接光源,综合起来作为间接光照。
  • 但是问题在于,camera的可见性不代表shading point对反射点的可见性。
  • 可见SSDO与SSAO都是做半球计算,所以可见性相近,当然还需要一点额外的贡献计算。
  • 此外,SSDO等SS方法只能取到camera能观察到的screen信息,则如下当物体翻转不可见时,其在地面上的投影就会消失。
  • 此外,只能处理小范围的全局光照,则距离较远之后就没有反射效果了。

6. Screen Space Reflection(SSR)

  • 在屏幕空间内对shadow map对应的壳做光线追踪。求交并shading。
  • 给定一个固定步长,沿着反射方向查询,每次比较深度,直到找到camera的可见点。但是步长的大小需要设置。
  • 为此,对场景深度做MIPMAP,但是每次mipmap都是取最小值,即最小池化。
  • 那么,如果光线不与上层相交,就不会与下层相交,类似AABB的思想。
  • 从较精细的mipmap上移动一格,如果不相交,则扩大步长即level+1,然后再走一格,如果相交则记录交点,并减小level并查询交点所在位置的格子,在减小格子的过程中如果交点所在格子被相交了则继续减小格子并查询,否则重新扩大格子并移动;直到找到对应的表面像素或者超出screen范围。
  • 作为SS,仍然存在无法获得camera看不到的信息的问题。
  • 此外,屏幕之外的事物可无法反射,会出现cutoff,为此可以做衰减来模糊边缘。
  • 仍然假设diffuse reflector。
  • shading计算,与3D相同
  • 因为是对shading point做采样,所以不存在距离平方衰减问题。
  • 因为只是考虑shadow map,所以不需要另外考虑可见性。
  • 对于不同的材质,考虑反射光线的采样范围就已经解决。
  • 对于反射的距离模糊,反射光线的采样角度对应范围会扩大就已经解决
  • 对于反射影响的拉长现象,由反射光线的反射角度变化已经解决
  • 重要性采样:可以使用pdf将采样范围集中在反射方向中。
  • 材质越是diffuse,噪声越大,但是反之又可以做模糊。
  • 时空复用:对于glossy的材质,需要做采样,那么采样次数就是一个开销,但是相邻的shaing point可能会受到相同的reflector影响,那么可以复用。
  • 此外,可以先对屏幕空间做模糊,然后对specular的方向做模糊。但是屏幕空间的深度不同,可能会造成浅景深景的模糊。可以使用联合双边滤波。

来源

Games202