处理路径追踪中的点光源和精确反射



在尝试实现蒙特卡罗路径追踪时,我在光采样过程中遇到了障碍。

通常,程序如下:

  • 从照相机(或前一点(开始追踪光线,直到到达表面点。
  • 到达表面点后,在场景中的光源上随机生成一个点。
  • 计算几何项,描述该光是否可以到达表面上的当前点(该项为 0 或 1(。
  • 如果此几何项为 1,则通过乘以衰减因子(光的距离(和材料的 BRDF 来计算该光的贡献。

我省略了一些关于如何随机选择的细节,但暂时不要介意(例如,请参阅"分布光线追踪中的灯具采样"(。

在我看来,问题在于BRDF和光源中的光分布都不是实际功能,而是测量值。
例如,对于每个入射角度,完美反射镜的BRDF是反射方向上的狄拉克三角洲"函数"(即在一个点上支撑的度量,在该点的质量为1(。同样,点光源(与区域光源相对(由狄拉克增量建模,而不是密度函数。

明确区分似乎很重要,因为它允许适当的重要性抽样。例如,在对 BRDF 进行采样时,可以:

  • 对所有出射方向均匀采样,并按相应的反射分布"函数"进行缩放,
  • 直接根据 BRDF 进行采样,之后不按比例缩放。

介于两者之间的任何事情也是可能的,而且很重要,因为对于复杂的BRDF来说,完美的重要性采样是不可能的。
现在,在 BRDF 实际上是狄拉克增量的情况下,我们看到根据 BRDF 进行采样变得极其重要:随机采样,我们必须以概率 1 消除贡献(因为 BRDF 在单个点上得到支持,我们在均匀采样方向时有概率 0 可以选择(, 但是,如果我们确实幸运地获得了反射方向(质量所在的方向(,那么我们必须将贡献缩放到无限大!如果我们根据 BRDF 采样,我们总是生成反射方向,并且不必缩放任何东西(特别是不要遇到任何无穷大(。

那么我的问题是:在它们都是一般措施而不仅仅是函数的情况下,你如何将 BRDF "乘以"光的贡献?在考虑 BRDF 的重要性采样和场景中灯光分布时,如何在此步骤中正确"重要性采样"?(光的采样程序应同时考虑光分布和BRDF,以避免无穷大。

理想情况下,人们需要永远不会产生无穷大、无穷大等的采样程序,这些无穷大应该只是不良采样机制的产物(如上所述(。因此,对于后续的四个方案,计算的贡献应始终是有限的:

  • 带区域光源的连续 BRDF(例如朗伯漫射材料(
  • 带点光源的连续 BRDF
  • 带区域灯的离散 BRDF(例如完美镜子(
  • 带点光源的离散式 BRDF

当然,理想情况下,这将适用于BRDF和灯光的任何措施,但似乎能够正确处理上述4种情况是大部分工作所在。

如果您有一个从完全镜面反射路径到点光源的狄拉克三角洲,您仍然可以评估三角洲的总积分贡献。 (如果你的BRDF不是纯粹的镜面反射狄拉克三角洲,你可以而且可能应该用普通的光线追踪来处理它......

请注意,此"增量路径"的作用与普通射线路径不同。 具体来说,普通光线的颜色代表亮度(单位:流明/球面度/m^2(,它相对于距离是不变的,并且 - BRDF采样 - 仅乘以反射和透射系数。

然而,"δ射线"的颜色代表照度(单位:流明/m^2(,它相对于距离不是不变的(它下降为1/r ^2(。 此外,与亮度不同,增量路径将受到沿路径的镜面反射器和折射器的曲率的影响。

要考虑曲面镜面的近轴行为,您需要评估射线源相对于另一端视角的导数。 这应该可以用一个 2x2 的雅可比矩阵来表示,该矩阵在每次反射时乘以代表表面局部曲率的雅可比矩阵。 您的距离计算也会修改此矩阵 - 例如,当您接近焦点时,考虑一个完美的镜头可能会产生随距离增加的照度。 这也表明您需要处理可能的奇点,其中焦散聚焦点光源......

由于帧缓冲区的分辨率有限,因此渲染增量通常(在焦散奇点之外(应产生有限(尽管可能相当高(的亮度。 为简单起见,假设每个样本只贡献一个像素:上面的单位建议您必须将"增量路径"的照度除以像素的立体角,以使其与普通光线的亮度相当。 (请注意,立体角会因像素而异 - 对于标准相机,您必须包括cos(theta)因素(

您应该能够执行类似操作,以终止非镜面反射曲面上的纯镜面反射路径。 我猜想"三角射线"的统计数据也可能与传统射线不同; 您需要弄清楚它们如何准确适应您的蒙特卡罗框架。

最新更新