Optimization 如何使用光线相干性来提高光线跟踪速度,同时保持真实感?

Optimization 如何使用光线相干性来提高光线跟踪速度,同时保持真实感?,optimization,raytracing,raycasting,Optimization,Raytracing,Raycasting,我正在考虑在我的软件“每像素实时光线投射器”中利用光线相干性 AFAICT,使用一个统一的网格,如果我将光线相干性分配给4x4像素的面片(目前我每个像素有一个光线投射),给定16条具有不同起点(和终点)的平行光线,这将如何处理成一个相干性场景?我所预见的是: 存在一个距离,在该距离内,相邻/相似光线的光线行进将完全相同。在这段距离内,我节省了处理时间。(我怎么知道距离是多少?) 由于某些光线没有在正确的时间发散,我最终会得到一个稍微到严重不正确的图像 考虑到光线是从一个点而不是平面投射的,我想我

我正在考虑在我的软件“每像素实时光线投射器”中利用光线相干性

AFAICT,使用一个统一的网格,如果我将光线相干性分配给4x4像素的面片(目前我每个像素有一个光线投射),给定16条具有不同起点(和终点)的平行光线,这将如何处理成一个相干性场景?我所预见的是:

  • 存在一个距离,在该距离内,相邻/相似光线的光线行进将完全相同。在这段距离内,我节省了处理时间。(我怎么知道距离是多少?)
  • 由于某些光线没有在正确的时间发散,我最终会得到一个稍微到严重不正确的图像
  • 考虑到光线是从一个点而不是平面投射的,我想我需要根据穿过的距离使用某种分割函数,这样所有光线的集合在向外移动时形成一棵树。我在这里担心的是,更精细的细节将丢失时,更接近观众


    我想我只是没有理解这是如何使用的。

    如果操作正确,光线相干性应该不会影响最终图像。因为光线非常接近,所以有一个很好的变化,它们在穿越加速度结构(kd树、aabb树等)时都会采用相似的路径。你必须沿着每一条射线可以击中的分支走下去,但希望这不会增加分支的数量,并且可以节省内存访问


    另一个优点是,您可以使用SIMD(例如SSE)来加速某些测试,包括加速结构和三角形。

    是否在光线包跟踪中对给定的光线进行分支,以减轻光线在较大距离的转移?一幅画可以画出一千个字。我希望我能找到一个。找不到图片,但Ingo Wald的博士论文()在kd-Trees的7.2.3 SIMD数据包遍历中描述了这一点。是的,Wald的论文帮助了一些。我得到的是,你可以通过SSE或GPU使用SIMD在数据包中投射相干光线。我不明白的是当一条射线击中时会发生什么。有分支吗?或者其他平行光线是否也会继续传播,直到它们停止,在这一点上整个SIMD操作终止?更重要的是——如果是这样的话,为什么不在发散光线上做SIMD呢——光线数据就是“MD”;如果光线未穿过树中的分支,请清除其位。当没有光线处于活动状态时,可以停止遍历当前分支。当你到达一片叶子时,你可以投射所有的光线,或者只投射活跃的光线,无论你认为哪个更快(因为不活跃的光线不应该击中)。光线的相干度越高,它们越有可能通过树中的相同节点并击中相同的三角形,从而避免获取额外的数据。