我目前正在尝试实现Monte Carlo路径跟踪器。我已经进行了一些研究,似乎一种常见的材料处理方法是使用分层模型。像这样:
当光入射到表面时,菲涅尔告诉我们第一层反射了多少光,第二层反射了多少,依此类推。
所以我做了类似但更简单的事情:只有一层高光和一层漫反射。尚无透射率。到目前为止,到目前为止,我对漫反射使用了一个简单的余弦加权brdf,对我的镜面反射使用了Cook-Torrance微面模型。
现在是最困难的部分:一旦射线击中表面该怎么办?通常,我会选择与表面材质相对应的brdf,对入射光方向进行采样,评估brdf,然后除以正确的概率分布函数。
但是在这里,表面撞击实际上对应于多种材料。天真的处理方法是为每个图层命中采样一次。但这显然是造成巨大性能损失的根源,这使我的道路实际上变成了树。
有更好的解决方案吗?
1
您是否可以不“蒙地卡罗”材料层?例如,根据它们的反射率对每一层进行加权,然后根据其随机选择一个。较深的层将需要基于其上方所有层的吸收之和的衰减。
—
PaulHK '17
PaulHK这正是我在路径跟踪器中所做的工作,即俄罗斯轮盘赌在各层之间的每个接口,因此根本没有分支。不幸的是,我的实现尚未完成,因此我没有有关实际性能的信息。我的实现基于Andrea Weidlich和Alexander Wilkie撰写的论文“任意分层的微面曲面”,该论文似乎比Wenzel Jakob的框架(在Stefan的答案中指出)要受限制的多,但能够产生相当好的结果,并且易于实施。
—
克里斯蒂安·帕格