我正在尝试通过在Python 3中实现功能来学习射线跟踪。我知道它总是比C ++慢,而且我知道使用GPU射线跟踪也可以提高速度,但是对于这个问题,我我不是在寻找加速的一般方法,而是在减少所需样本数的方法,这对于将来我可能会使用的任何语言都是有用的。


我有一个我想继续研究的部分构想,但是首先,我想让专家了解一下这是否是一种预先存在的技术,因此我不再重复已经完成的工作。

我已经搜索了“采样立体角”和“ voronoi球采样”,但看不到任何先前工作的迹象。如果有一个我想到的名字,我会描述一下我的想法。

示例图片



平面上的三个球体的图像(实际上是一个非常大的球体)。一种是自发光的,一种是反射的,一种是哑光的(地板也是如此)。采样是自适应的,因此快速达到稳定颜色的像素不会占用太多时间。我限制了每个像素的样本总数,以避免渲染持续太长时间。即使允许运行一整夜,生成的图像也非常粗糙,对较小的图像进行实验表明,此尺寸的图像(1366 x 768)将需要数周的时间才能与我目前的方法融合。沿颜色边界

我希望能够将样本集中在需要的地方,并根据先前针对相同交点或像素的样本进行自适应处理。这将给样本的分布带来未知的偏差,这意味着对样本进行平均将得出不准确的结果。相反,我想考虑单位半球表面上以相交点为中心(用于对入射在无光表面上的点入射的光进行采样)或小圆表面(用于在周围进行采样)上的voronoi细胞的大小像素)。

假设该voronoi细胞内的所有点都接收与voronoi细胞中心相同颜色的光线。现在,可以通过根据每个voronoi细胞的面积加权来获得平均颜色的估计值。在两个voronoi细胞之间的边界上选择颜色差异最大的新样本可导致估计的改进,而无需对整个半球进行采样。样品最终应更密集地集中在较高颜色渐变的区域。一旦它们的边界附近有几个点,则平坦的区域最终将被忽略。我所描述的简化方法大致等效于大量均匀分布的样本。为了完成这项工作,我需要能够通过voronoi单元区域和所需的分布(哑光表面的法线周围或像素中心附近的高斯分布)偏向平均值。

因此,在测试这个想法之前,我还有更多的思考要做,但是我想先检查一下是否已经完成或被排除为不可行。

评论

您的想法听起来有点像锥体追踪和重要性抽样,您可以阅读一下(:

这听起来有点像这篇论文:graphics.cornell.edu/pubs/2004/Don04.pdf它是具有自适应概率密度函数的有效重要性抽样。我的直觉是它可以工作,但您需要小心避免遗漏,因此会忽略一些小的功能(例如,小的远距离照明灯)。

这是关于自适应重要性抽样的另一篇论文:citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.23.2520

这不是一回事,但是对高梯度区域的关注使我想起了梯度域路径跟踪。但是,在攻击像这样的复杂技术之前,我将从分层采样和重要性采样之类的更基础的东西开始,以降低方差。

这是分层和低差异抽样的参考。

#1 楼

听起来您正在尝试对半球表面进行自适应细分。

确实已经尝试过了,尽管可能不是您想的那样。通常,对于半球积分,人们在半球上使用一些分布良好的预定义采样密度,而忽略了自适应细分。


但是您可能会遗漏了这一点。

做这些事情的整个想法是对积分进行更好的估算。但这不是您关心的半球不可或缺的部分。您要在像素上积分以获得AA,在光圈上获得景深,在光上获得柔和阴影,在半球上获得GI,随着时间的推移获得运动模糊,在波长之上获得色散。 , 等等。您正在整合所有这些。这是一个荒谬的高维空间,数十年的发展表明,您需要更仔细地探索它,而不必更快地探索它。也就是说,您从广度而不是深度获得更好的结果。

所有的内容都非常抽象。

重点是:您不想在半球上进行大量采样样本。您想用一个样本在半球上采样,然后继续。这称为路径跟踪。它与射线追踪的不同之处在于,射线树的最大宽度为1(或2)。

关键的见解是,如果您的随机样本在所有维度上分布均匀,则其他光线会“填充”您丢失的树的其余部分。

举一个直观的例子:假设您正在执行4倍AA。因此,您通过一个像素发射四束光线。他们可能命中了非常相似的点(创建了相似的反射半球)。然后,它们各自精确地发射一条递归射线。但是,由于四个半球几乎位于同一位置,因此递归射线(kindof)对所有半球都有效。因此,这四个路径中的每一个都会获得其他三个路径的一些好处。

这有点像波澜不惊的数学运算,但是由于每个路径实际上都是彼此独立的,并且您获得的颜色是对整个场景照明的无偏估计,因此将它们平均在一起是无偏的。实际上,它收敛得更快。

显然,如果可以对半球的积分进行廉价估算,则可以使用它-这是预积分(圆锥跟踪等),重要性采样(下一步事件估计,光采样)或更好的路径(BDPT,光子映射),但对于一种简单的方法,使用路径跟踪而不是随机射线跟踪通常总是更好。


matt-> matte(或mat,在紧要关头)。这是一个法语借词,不是一个人的名字,我不在乎美国词典怎么说。

评论


$ \ begingroup $
我的目标是使区域拼写差异与作者预期的一样,并且仅在标签中进行标准化(在重要的地方)。但是,对于我自己的帖子,我对可接受的本地拼写感兴趣,因此从现在开始我将使用遮罩-谢谢:)
$ \ endgroup $
–trichoplax
2015年9月2日,下午6:17