如何在路径跟踪器中实现景深?我已经阅读了这篇文章,该文章解释了一切背后的理论,并且根据以前使用DSLR的经验,我已经很好地理解了这种效果需要达到什么目的,但是我对如何编码一切感到有些困惑,尽管我了解大多数所涉及的计算(阅读上面链接的文章之后)。

我了解如何计算焦点,焦距和二次射线。但是我对如何将所有这些组合在一起以创建所需的“模糊”感到困惑。我在网上找不到很多东西,所以我希望这里的人可以用一些代码来解释这一点。

有人可以告诉我他们的实现吗?



评论

关于景深的相关问题(不是重复项,因为它专注于近似值而不是路径跟踪,但可以提供一些见识)。

有关用于跟踪镜头的镜头模型的相关问题。几乎是重复的,所以我建议您通过解释您已经理解的内容来使问题更具体,这样我们就可以看到在哪里引入了任何混淆。

我了解如何计算焦点,焦距和二次射线。但是我对如何将所有这些组合在一起以创建所需的“模糊”感到困惑。我在网上找不到很多东西,所以我希望这里的人可以用一些代码来解释这一点。

#1 楼

缺少的步骤

如果您已经了解了如何生成辅助射线,那么您已经掌握了困难的部分。现在您需要做的就是找到该次要射线产生的颜色。这与在基本射线跟踪中使用主射线寻找颜色的过程完全相同。

重复此操作之后大量的次要光线,所有这些颜色的平均值就是您分配给相关像素的颜色(您不使用主光线-其唯一目的是生成次要光线)。这是与基本光线跟踪的唯一区别。

为什么起作用

我试图理解这一点时的个人困难是我试图了解光是如何从光线中获取的。镜头上的不同点回到眼睛/相机。要了解的是,这只是一个透镜的近似值,而光线根本不需要考虑眼睛/相机。

透镜是由圆盘近似的。
/>
如果您直接朝某个点(焦点)看,所有这些不同的辅助光线都会向您显示从该光盘的不同点看到的内容。


对于焦点处的对象,所有这些不同的视点将在该对象上看到相同的点,并且该对象看起来将清晰地定义。
对于焦点后面的对象,所有这些不同的视点将看到略有不同的位置在物体上,其中一些会错过物体并看到物体的侧面。对象的边缘将与其侧面的任何颜色混合在一起。
对于焦点前面的对象,同样,不同的视点将在对象上看到稍微不同的位置,从而使边缘模糊。

如果一次光线在焦距处击中一个对象,但是有一个距离较近但又不太接近的物体,那么几乎是,那么一些次要光线将在到达焦点之前击中较近的对象。这将使较近的对象具有模糊的边缘,即使焦点本身清晰聚焦,也会在焦点处部分遮挡该对象。

所有这些都是所希望的。在这种解释的水平上,这模拟了真实镜头的效果,而完全不必考虑折射。

评论


$ \ begingroup $
我在一些DOF教程中听说过术语“抖动矩阵”。我不知道它的用途以及在景深中如何发挥作用。您能解释一下抖动矩阵是什么吗,如果我在这里需要的话?
$ \ endgroup $
– Arjan Singh
16 Dec 3'在15:55

$ \ begingroup $
对于自由度,您只需要能够随机选择光盘上的点。如果您只是随机地随机选择这些,则该方法将起作用。相反,如果您使用更高级的方法来选择随机点,则可以用更少的点数获得相同质量的图像(加快渲染图像的过程)。 “抖动矩阵”是一种选择具有不同随机分布的点的方法,您不需要它来进行景深工作-这只是您以后可以添加的一种改进。它也适用于需要随机点的任何其他情况。
$ \ endgroup $
–trichoplax
16 Dec 3'在16:31

$ \ begingroup $
我特意遵守了进行深度研究的基本要求,以避免过多的信息使答案混乱。如果您在使用不同的随机分布时遇到任何困难,可以提出一个单独的问题。
$ \ endgroup $
–trichoplax
16年3月3日在16:32

$ \ begingroup $
您认为您可以解释次级射线吗?
$ \ endgroup $
–艾伦·沃尔夫(Alan Wolfe)
16年3月3日在16:54

$ \ begingroup $
@AlanWolfe很好。提出该问题的原因是,由于景深的一般描述包含太多信息,仅一个狭窄的主题需要单独解决。我已经编辑标题以尝试更好地描述问题。标题总是会是一个简短的近似词,但是搜索引擎也会考虑它的身体,因此仍然应该找到它。
$ \ endgroup $
–trichoplax
16 Dec 4'在0:57