路径追踪器-多层材料和重要性采样


12

我目前正在尝试实现Monte Carlo路径跟踪器。我已经进行了一些研究,似乎一种常见的材料处理方法是使用分层模型。像这样:

在此处输入图片说明

当光入射到表面时,菲涅尔告诉我们第一层反射了多少光,第二层反射了多少,依此类推。

所以我做了类似但更简单的事情:只有一层高光和一层漫反射。尚无透射率。到目前为止,到目前为止,我对漫反射使用了一个简单的余弦加权brdf,对我的镜面反射使用了Cook-Torrance微面模型。

现在是最困难的部分:一旦射线击中表面该怎么办?通常,我会选择与表面材质相对应的brdf,对入射光方向进行采样,评估brdf,然后除以正确的概率分布函数。

但是在这里,表面撞击实际上对应于多种材料。天真的处理方法是为每个图层命中采样一次。但这显然是造成巨大性能损失的根源,这使我的道路实际上变成了树。

有更好的解决方案吗?


1
您是否可以不“蒙地卡罗”材料层?例如,根据它们的反射率对每一层进行加权,然后根据其随机选择一个。较深的层将需要基于其上方所有层的吸收之和的衰减。
PaulHK '17

PaulHK这正是我在路径跟踪器中所做的工作,即俄罗斯轮盘赌在各层之间的每个接口,因此根本没有分支。不幸的是,我的实现尚未完成,因此我没有有关实际性能的信息。我的实现基于Andrea Weidlich和Alexander Wilkie撰写的论文“任意分层的微面曲面”,该论文似乎比Wenzel Jakob的框架(在Stefan的答案中指出)要受限制的多,但能够产生相当好的结果,并且易于实施。
克里斯蒂安·帕格

Answers:


7

Wenzel Jakob等人在SIGGRAPH 2014上展示了分层材料框架。第6.2节介绍了重要性采样。如果您更喜欢代码而不是方程式,则该方法在Mitsuba渲染器中实现


2
注意,Jakob等人的方法。依赖于以某些专门的傅立叶基础表示法来呈现列表化BSDF数据。有关详细信息,另请参阅相应的技术报告。最新的PBRT第三版中也提供了开源实现。可以使用Python中的layerlab生成BSDF文件。
tizian
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.