蒙特卡罗路径追踪算法的这一部分的目的是什么?

时间:2011-12-07 04:47:18

标签: math graphics 3d raytracing

在使用大量蒙特卡罗样本进行路径追踪的所有简单算法中,跟踪算法的路径部分随机选择返回当前表面的发射值并继续追踪来自该表面半球的另一条射线(对于幻灯片中的示例here)。像这样:

TracePath(p, d) returns (r,g,b) [and calls itself recursively]:
    Trace ray (p, d) to find nearest intersection p’
    Select with probability (say) 50%:
        Emitted:
            return 2 * (Le_red, Le_green, Le_blue) // 2 = 1/(50%)
        Reflected: 
             generate ray in random direction d’
             return 2 * fr(d ->d’) * (n dot d’) * TracePath(p’, d’)
  1. 这只是一种使用俄罗斯轮盘赌终止路径同时保持不偏不倚的方式吗?当然,将所有射线路​​径的发射和反射特性统计在一起并使用俄罗斯轮盘来决定是否继续跟踪更有意义。

  2. 这是一个后续问题:为什么我所看到的这些算法中的一些(如“基于物理的渲染技术”一书)只计算一次发射,而不是考虑所有的发射属性在一个对象?渲染方程基本上是

    L_o = L_e + integral of (light exiting other surfaces in to the hemisphere of this surface)

    这似乎计算了这个L_o和所有其他L_o的积分中的自发属性,所以算法应该遵循。

3 个答案:

答案 0 :(得分:4)

实际上,单次发射与反射计算有点过于简单化。为了回答第一个问题,硬币翻转用于终止光线,但它会导致更大的偏差。第二个问题有点复杂......

Shirley, Wang and Zimmerman TOG 94的摘要中,作者简要总结了蒙特卡罗抽样的益处和复杂性:

  

在分布射线追踪器中,直接照明的关键部分   计算是阴影射线测试的采样策略。蒙特   卡罗与重要性抽样的整合用于实现这一点   计算。重要性抽样涉及设计   特定于被积函数的概率密度函数   生成数值求积的采样点。可能性   提供了密度函数,有助于直接照明   从各种简单形状的灯具计算。一种方法   在一组灯具上定义概率密度函数是   提出允许进行直接照明计算   无论灯具数量多少,都可以使用一个样品。

如果我们开始剖析那个摘要,这里有一些重点:

  1. 灯光不是点:在现实生活中,我们几乎从不处理点光源(例如,单个LED)。
  2. 阴影通常很柔和:这是非点光源的结果。在现实生活中看到一个真正锋芒毕露的阴影是非常罕见的。
  3. 噪音(特别是明亮的采样伪影)不成比例地分散注意力:人类对事物的外观有很多直觉。查看OP链接演示文稿中的幻灯片5(桌面上的玻璃球)。注意阴影中的亮点。
  4. 当渲染更多视觉真实感时,必须根据曲面bidirectional reflectance distribution function对两组反射的可见光线和光照计算光线进行采样和加权。

    请注意,这是一种引导式采样方法,与原始问题的“随机方向生成光线”方法明显不同,因为它是:

    1. 更准确:链接PDF中的图片与PDF处理有点不同。图10是原始图像的合理表示 - 请注意,您有时会看到缺少明亮的斑点伪影(如原始演示文稿的图5所示)。

    2. 明显更快:正如原始演示文稿所述,未经指导的蒙特卡罗采样可能需要很长时间才能收敛。更多采样光线=更多计算=更多时间。

答案 1 :(得分:1)

阅读幻灯片后(感谢您发帖),我会尽我所能修改答案。

  1. 这只是一种使用俄罗斯轮盘来终止路径的方式 而保持不偏不倚?当然,计算更有意义 所有射线路​​径的发射和反射特性 并使用俄罗斯轮盘赌决定是否继续追踪 或不。
  2. 可能不同地处理发射和反射的属性,因为反射路径以发射路径不同的方式(至少对于光谱表面)依赖于入射路径。算法是否采用贝叶斯方法并使用关于入射角的先验信息作为预测反射角的先验信息?或者这是Feynman整合所有路径以提出概率?如果不深入研究理论的细节,就很难说清楚。

    我之前的黑体评论非常不正确。我看到幻灯片谈论(R,G,B)组件;黑体发射率集成在所有波长上。

    1. 这是一个后续问题:为什么我会使用其中的一些算法 看(就像书中的'基于物理的渲染技术') 只计算一次排放,而不是考虑所有的 对象的自发属性?渲染方程是 基本上

      L_o = L_e +积分(光从其他表面进入 这个表面的半球)

    2. 表面的单个发射率将假设波长或方向上没有函数关系。我不知道渲染照片般逼真的图像有多重要。

      发布的内容肯定令人印象深刻。我想知道如果考虑到你所考虑的复杂性,他们会有多么不同?

      感谢您发贴一个不错的问题 - 我正在投票。我考虑过这种问题已经有很长一段时间了。我希望我能提供更多帮助。

答案 2 :(得分:1)

  1. 是的,这是俄罗斯轮盘的一个非常基本的实现,但通常终止的概率会考虑光强度(即较少的光意味着该值对最终总和贡献较少,因此使用更高的终止概率)。 / LI>