我想将完整的蒙特卡罗体积散射添加到我的路径追踪器中,但是我在研究如何做到这一点上很难。让我解释一下我想做的事情:

射线进入材料,然后应用BTDF,然后经过一定距离,发生体积散射事件,此后(在各向同性情况下) ,光线沿球体的任何方向散射。重复此过程,直到射线与另一个BTDF一起离开材料为止。

我的问题如下:


如何选择分散事件之间的距离?直觉告诉我应该有某种散布pdf,它给出一定距离后散布的可能性吗?


pdf对各向同性材料是否为线性函数?
该函数是否有名称或我可以用Google命名?
/>

Beer-Lambert还会在分散事件之间应用吗?


我认为不会。由于Beer-Lambert是对实际散射计算的简化。
再说一次,也许Beer-Lambert是在微观尺度上进行的计算,并且路径跟踪是在宏观尺度上进行的。 />相当于BSDF的体积是多少?看起来我可以使用诸如Henyey-Greenstein之类的相位函数来确定新方向,但是我该用什么衰减呢?
最后,对于蒙特卡洛体积散射,有哪些更好的Google短语?


搜索体积散射或SSS,最终给出有关完整蒙特卡罗模拟的简化(偶极,散射内,散射外,扩散)的论文,方法和博客文章等)。




#1 楼

首先,史蒂夫·马斯纳(Steve Marschner)的这些课程笔记是对参与介质中的蒙特卡洛路径追踪的一个很好的参考。每单位互动长度(散布或吸收)的确定概率。只要它不相互作用,它就会一直畅通无阻地走下去,而且不会损失能量。距离越大,在该距离内某处进行交互的可能性就越大。每单位长度的相互作用概率是您在方程式中看到的系数$ \ sigma $。通常,我们对散射和吸收概率有不同的系数,因此$ \ sigma = \ sigma_s + \ sigma_a $。将射线段切成无穷小间隔,将每个间隔作为可能的独立交互位置,然后沿射线进行积分;您得到了作为距离函数的交互概率的指数分布(比率参数$ \ sigma $)。

因此,直接回答您的问题: br />
您可以根据需要从技术上选择事件之间的距离,只要您正确地权衡路径,即可确定光子在两个相邻事件之间不与介质相互作用的概率。换句话说,介质中的每个路径段都贡献了权重因子$ e ^ {-\ sigma x} $,其中$ x $是段的长度。 (这是假设均匀的介质,但是如果介质不均匀,请参阅上面链接的Marschner注释中的4.2节。)

鉴于此,通常,距离的一个不错的选择是重要性样本它来自指数分布。换句话说,您设置$ x =-(\ ln \ xi)/ \ sigma $,然后从路径权重中忽略$ e ^ {-\ sigma x} $因子。

然后,要考虑吸收,您可以使用俄罗斯轮盘在每个事件中消除路径的一部分\\ sigma_a / \ sigma $。这对于非常大或无限的介质(请考虑大气散射)尤其必要,因为如果不杀死该路径,该路径可能会在任意长时间内反弹。如果您只处理小型且密度不高的媒体,则最好将每个事件的权重考虑为$ 1-\ sigma_a / \ sigma $,而不是使用俄罗斯轮盘。 br />否,如果您按照刚才描述的重要性抽样程序进行操作,则Beer-Lambert已经隐式包含在抽样中,因此您不想将其应用于路径权重。与BSDF等效的体积是散射系数和吸收系数$ \ sigma_s,\ sigma_a $和相位函数的组合。按照惯例,这些系数控制着透射,散射和吸收的总体平衡,而相位函数始终是归一化的。您可以排除整体反照率,并且始终将方向依赖性标准化。

尝试使用“参与介质”(即,体积“介质”-复数“介质”-“参与”轻型运输)和“体积路径追踪” “。


评论


$ \ begingroup $
您将如何采样非单色散射/吸收系数的距离?随机选择一个通道,然后除以1/3(对于RGB或XYZ)?
$ \ endgroup $
–RichieSams
16年6月7日在17:25

$ \ begingroup $
@RichieSams在这种情况下,我看到的建议是为每条光线分配单个波长或颜色通道。因此,您基本上可以分别计算每个通道的散射。例如,在大气散射中,蓝光的散射要比红色强得多,因此需要更多的散射事件,并且蓝色光子将遵循比红色光子更复杂的路径。因此,分别模拟它们很有意义-就像由于折射造成的色散一样。我从来没有真正尝试过这个。
$ \ endgroup $
–内森·里德(Nathan Reed)
16年7月7日在17:46



$ \ begingroup $
嗯,这很有意义。虽然,性能会受到影响……难怪每​​个人都希望评估参与蒙特卡洛的媒体。感谢您提供所有信息!
$ \ endgroup $
–RichieSams
16年6月7日在17:51