局部照明与全局照明
- 局部照明
只考虑从物体表面到眼睛的直射光。
- 全局照明
全局照明考虑了直接照明和间接照明(根据应用配置可以有多次反射)。
全局照明技术
光能传递
光能传递是一种模拟从光源开始的光漫反射传播的方法。这种方法的基础来自于“能量”,它从根本上与观察方向无关。因此,它对于静态场景是可预先计算的。
光线追踪
光线追踪是遵循从眼睛到光源的所有光线,这非常适合模拟镜面反射和透明度。
光能传递
光能传递的特点是:
- 漫反射表面的全局照明
- 独立于视图
- 柔和的阴影,Color Bleeding
比如一面墙原来是白色,由于房间里物体的原因,使得墙面反射物体的那一部分变成物体的原色,这种现象叫做Color bleeding
- 表面面片(patch)之间的能量传输(使用区域光源)
能量传输是指光源所持有的能量如何传输到另一个物体。
光能传递算法
- 场景中的表面被分为多个patch。
- 根据每对patch,计算一个形状因子,描述有多少能量从patch A 到达patch B。
- 计算所有直接照射patch的光照。
- 将光线从所有被照射的patch上,反射到所有它们能够照亮的patch上,为具有更高形状因子(form factors)的patch输送更多光线。
- 重复此步骤将使总光线分布在整个场景中。
那么,什么是形状因子(Form factor)?
Form factor(Fij)是“离开表面 j 并到达表面 i 的光能的分数”。
然后我们来看一个光能传递方程,对于每一个patch i:
- E_i = 来自光源的能量(发射率)。除光源外,每个patch的能量为零。
- p_i = 反射率系数
- H_i = patch i 每单位时间内每单位面积的入射能量
当我们假设场景中有 n 个表面patch时:
因此,我们可以从上面的两个方程得到最终的方程:
我们可以使用线性系统求解这个方程。
但是使用像高斯消元法这样的线性系统在实际应用中使用起来成本太高,因为它需要 O(n3) 运行时间。
相反,我们可以利用像“Gauss-Seidel”方法这样的近似。(矩阵是对角占优的 -> 它总是收敛的)
计算准确的Form factor很困难,我们可以在这里采用相同的近似值。
半球形状因子(Hemi-sphere form factors)
我们考虑从半球上的区域投影到地面上的某个区域。
我们可以将投影面积与半球面积之比视为近似形状因子。
半立方体形状因子(Hemi-cube form factor)
还有一种方法可以使用半立方体代替半球体:
缺点
- 漏光。由于插值,明亮区域的相邻区域可能看起来会比之前更明亮。
- 半立方体混叠。
- 网格离散化(因为网格是以“面片patch”为单位处理的。为了更好的细节展示,应该添加更多的面片)
- 需要额外的镜面反射通道来捕获镜面高光。
网格离散化的解决方案
我们可以使用自适应网格划分来解决这个问题。
(A) 简单面片三角剖分
(B) 自适应patch生成——阴影细节较高的地方会生成更多的patch。