微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

双向路径追踪,算法解释

如何解决双向路径追踪,算法解释

我正在尝试了解路径跟踪。到目前为止,我只处理了非常基础 - 当光线从半球内随机方向的每个交叉点发射时,然后再次递归,直到光线击中光源。结果,这种方法导致这样一个事实:在小光源的情况下,图像非常嘈杂。

下图显示了噪声水平取决于每个像素的样本(光线)数量

Noise level

我也不确定我所做的一切是否正确,因为据我所知,“蒙特卡罗”方法意味着从每个交点发射几条光线,然后将它们的结果相加并平均。但是这种方法导致光线的数量呈指数增长,并且在 6 次反弹后达到不合适的值,所以我决定最好最初为每个像素运行几条光线(从像素中心随机稍微偏移)方向),但在每个交叉点只生成 1 条射线。我不知道这种方法是否对应于“蒙特卡罗”,但至少这样渲染不会永远持续..

双向路径追踪

我开始寻找减少噪声量的方法,并遇到了双向路径跟踪。但不幸的是,我无法用简单的语言找到对这个算法的详细解释。我只知道光线是由相机和光源产生的,然后检查连接这些路径的端点的可能性。

enter image description here

如你所见,如果相机发出的蓝光和光源发出的白光的交点可以自由连接(连接路径上没有障碍物),那么我们可以假设来自相机可以通过点y1、y0直接到达光源。

但是有很多问题:

  1. 如果光源不是一个点,而是有某种形状,那么就必须在这个形状的表面上随机选择发射光线的点?如果你只取中心 - 那么和点光源没有区别,对吧?
  2. 我是否需要为来自相机的每条路径从光源构建一条路径,还是应该只有一条来自光源的路径,同时从相机为一个像素构建多条路径(样本)?
  3. 对于从相机到光源的路径,反弹/重新反射/折射的次数应该相同吗?还是不行?

但问题并没有就此结束。我听说双向跟踪方法可以让您对焦散进行很好的建模(与常规路径跟踪相比)。但是我完全不明白双向路径跟踪的方法可以以某种方式对此有所帮助。

示例 1

enter image description here

这里最终会建立路径,但是反弹的次数会非常多,所以这里没有焦散,尽管来自相机的光线几乎指向光线路径的同一点来自光源端。

示例 2

enter image description here

这里不会构建路径,因为路径的端点之间存在障碍物,虽然如果点 x3 连接到点 y1 可以构建,但是根据算法(如果我理解一切正确的话),仅连接路径的最后一个点。

问题:

如果在很多情况下无法构建路径或者路径过长,那么这种算法有什么用?也许我误解了什么?我遇到了许多文章和文档,其中以某种方式描述了这个算法,但大多数是用数学描述的(使用各种神奇的术语,如有偏无偏、PDF、BSDF 等),而不是……算法。我在数学和各种数学符号和措辞方面不是那么强,我只是想了解要做什么,如何在代码中正确实现,这些路径如何连接,以什么顺序,等等。这可以用简单的话来解释,伪代码,对吧?如果有人最终能阐明这一切,我将不胜感激。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。