【问题标题】:References for depth of field implementation in a raytracer?光线追踪器中景深实现的参考?
【发布时间】:2012-12-03 23:11:52
【问题描述】:

我有一个基本的光线追踪器,我想实现景深。请你 推荐我可以使用的资源、书籍和代码?

谢谢

【问题讨论】:

    标签: game-physics raytracing


    【解决方案1】:

    我从这个页面上的一点点信息中弄清楚了:http://cg.skeelogy.com/depth-of-field-using-raytracing/,特别是底部附近的图表。我想我的做法与它的显示方式略有不同,但概念很简单。

    我可以解释正在发生的事情以及如何实现它的一般概念(我会尽量简洁)。光线从任何给定点向所有方向反射(一般而言),因此它实际上不是在渲染点和您的眼睛之间传播的单条光线,而是离开渲染点并向眼睛扩展的光锥。您的眼睛/相机的镜头会倾向于弯曲这些光线,从而使锥体停止膨胀并再次开始收缩。为了使事物完全聚焦,锥体应该收缩到视网膜/框架上的一个点,但这仅适用于距镜头的一个特定距离:参考页面中的“焦平面”指示的距离(尽管我认为它应该是一个以眼睛为中心的球体,而不是一个平面)。

    对于焦平面前面的任何物体,光锥会更弯曲:它会聚焦到视网膜/框架前面的一个点,然后再次开始扩大,所以当它到达框架时,它不再是一个点,而是一个圆。类似地,对于焦平面后面的点,锥体弯曲较少,并且在到达框架时还没有收敛到一个点。在这两种情况下,效果是一个点是场景最终在多个像素上涂抹。

    为了实现,你可以把这个想法转变为头脑:你可以将几个附近的点渲染到一个像素,而不是把场景中的每个点渲染成几个像素,这当然是真正发生的事情,因为来自相邻点的“被抹去”的光圈最终会重叠,因此每个都对一个像素有贡献。

    以下是我的实现方式:

    首先,定义一个光圈:以您的眼睛为中心并平行于视网膜/框架的平面区域。光圈越大,景深效果越明显。孔径通常只是圆形,在这种情况下,它很容易由其半径定义。其他形状可以产生不同的照明效果。

    同时定义一个“焦距”。我不认为这实际上是正确的术语,但它是与眼睛完美聚焦的距离。

    渲染每个像素:

    1. 首先从眼睛通过像素投射出一条正常的光线到场景中。但是,您不想将其与场景中的对象相交,而是只想找到射线上与眼睛的距离等于所选焦距的点。将此点称为像素的焦点。
    2. 现在在光圈上随机选择一个起点。对于圆形光圈,这很容易,您可以选择随机极角和随机半径(不大于光圈的半径)。您希望在整个光圈上均匀分布,不要试图将其偏向中心或其他任何地方。
    3. 从光圈上的选定点通过焦点投射光线。请注意,它不一定会通过相同的像素,没关系。
    4. 以通常的方式渲染此射线(例如,路径追踪,或仅查找最近的交点等)。
    5. 重复步骤 2、3 和 4 若干次,每次在光圈上使用不同的随机起点,但始终通过焦点投射。将所有光线的渲染颜色值相加,并将其用作该像素的值(如往常一样,必要时除以恒定衰减因子)。

    每个像素使用的光线越多,质量当然就越好。我一直在使用每像素大约 150 条光线来获得体面但不是很好的质量。你可以用更少的一口(比如 50 或 60 条光线)看到效果,但更少的光线往往会在图像中产生颗粒感,尤其是对于非常失焦的东西。您需要的光线数量还取决于光圈大小:较小的光圈不需要那么多光线,但您不会获得那么多的模糊效果。

    显然,这样做会大大增加工作量,实际上是将其乘以每个像素的光线数量,因此,如果您在光线追踪器中还有任何优化要做,现在是做这件事的好时机.如果您碰巧有多个处理器可用,那么好消息是,一旦您找到一个像素的焦点,这就是令人尴尬的并行。

    多一点解释

    下面的图片应该让您了解正在发生的事情,以及为什么它与眼睛或相机中实际发生的事情相同。它显示了正在渲染的两个像素,一个像素用红色表示,另一个用蓝色表示。从眼睛通过每个像素延伸到焦点“平面”的虚线是您在开始时投射的光线,以确定像素的焦点。半透明锥体表示可以随机选择渲染每个像素的完整光线集(像素 1 的红色锥体,像素 2 的蓝色锥体)。请注意,由于所有光线都通过焦点,因此每个锥体都会在焦点处会聚到一个点。

    圆锥体的重叠区域表示场景中的点,这些点最终可能会同时渲染到像素 1 和像素 2:换句话说,被抹去。由于每个锥体都是焦“平面”上的一个点,因此这里的锥体之间没有重叠,所以这个距离处的点只渲染到一个像素:它们完全聚焦。同时,您离焦“平面”越远(向前或向后),锥体展开得越多,因此在任何给定点重叠的锥体就越多。因此,非常接近或非常远的点往往会被渲染到大量不同的像素,因此它们会非常失焦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      相关资源
      最近更新 更多