Game physics 光线跟踪器中景深实现的参考资料?

Game physics 光线跟踪器中景深实现的参考资料?,game-physics,raytracing,Game Physics,Raytracing,我有一个基本的光线跟踪器,我想实现景深。你能帮我吗 向我推荐我可以使用的资源、书籍和代码 谢谢我从本页的一点信息中找到了答案:,特别是底部的图表。我想我做的有点不同于它的显示方式,但概念非常简单 我可以解释正在发生的事情以及如何实现它的总体思路(我会尽量简洁)。光线从任何给定点向各个方向反射(一般来说),因此它实际上不是一条光线穿过渲染点和眼睛之间,而是一个离开渲染点并向眼睛扩展的圆锥体。你的眼睛/相机的镜头会倾向于弯曲这些光线,使圆锥体停止膨胀并再次开始收缩。为了使物体完全对焦,圆锥体应该收缩

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


谢谢

我从本页的一点信息中找到了答案:,特别是底部的图表。我想我做的有点不同于它的显示方式,但概念非常简单

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

对于焦平面前方的任何物体,光锥将更加弯曲:它将聚焦到视网膜/帧前方的一个点,然后再次开始扩张,因此当它到达帧时,它不再是一个点,而是一个圆。类似地,对于焦平面后面的点,圆锥体的弯曲度将减小,并且在到达帧时还不会收敛到某个点。在这两种情况下,效果都是场景中的一个点被涂抹在多个像素上

对于实现,您可以将这一想法转变为:不必将场景中的每个点渲染为几个像素,您可以将附近的几个点渲染为单个像素,这当然是自“涂抹”之后实际发生的情况相邻点的光圈最终会重叠,因此每个光圈都会形成一个像素

我是如何实现它的:

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

还定义了“焦距”。我不认为这是一个正确的术语,但它是指物体与眼睛的距离,在这个距离上,物体会完全聚焦

要渲染每个像素,请执行以下操作:

  • 首先,将光线像法线一样从眼睛投射到场景中,穿过像素。但是,您不希望将其与场景中的对象相交,而只希望找到光线上与眼睛的距离等于选定焦距的点。将此点称为像素的焦点
  • 现在选择光圈上的随机起点。对于圆形光圈,这非常简单,您可以选择一个随机极角和一个随机半径(不大于光圈半径)。你想要在整个光圈上均匀分布,不要试图使光圈偏向中心或任何东西
  • 从光圈上的选定点通过焦点投射光线。请注意,它不一定会通过相同的像素,这是确定的
  • 以通常的方式渲染此光线(例如,路径跟踪,或仅查找最近的交点等)
  • 重复步骤2、3和4数次,每次在光圈上使用不同的随机起始点,但始终通过焦点投射。将所有光线的渲染颜色值相加,并将其用作该像素的值(如有必要,通常除以常数衰减因子)
  • 当然,每个像素使用的光线越多,质量就越好。我已经使用了大约每像素150条光线来获得像样的但不是很好的质量。你可以用更少的一点(比如说50或60条光线)看到效果,但是更少的光线会在图像中产生粒状,特别是对于非常不对焦的东西。您需要的光线数量还取决于光圈大小:较小的光圈不需要那么多光线,但不会获得那么多模糊效果

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

    再解释一下

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

    圆锥体的重叠区域表示场景中的点,这些点最终可能被渲染为pixel-1和pixel-2:换句话说,被涂抹掉。由于每个圆锥体都是焦点“平面”上的一个点,因此此处圆锥体之间没有重叠,因此此距离处的点仅渲染为单个像素:它们完全处于焦点位置。同时,你离焦点“平面”越远(向前或向后),圆锥体分布得越多,因此重叠的圆锥体就越多