Cuda/Optix 是否可以使用硬件加速 Min/Max 光线投射?

Is Hardware Accelerated Min/Max Ray Casting Available with Cuda/Optix?

我想知道是否可以在 Cuda 或 Optix 中加速计算 3D 体积中从一个点到另一个点的 line/ray 的最小值和最大值。

如果没有,Nvidia GPU 上是否有任何特殊硬件可以加速此功能(特别是在 Volta GPU 或 Tesla K80 上)?

标题问题的简短回答是:是的,硬件加速光线投射在 CUDA 和 OptiX 中可用。较长的问题有多种解释,因此我将尝试概述不同的可能性。

我看到的问题的不同轴是:CUDA 与 OptiX,pre-RTXGPU 与 RTX GPU(例如,Volta 与 Ampere),最小光线查询与最大光线查询,可能还有表面表示与体积表示。

pre-RTX 对比 RTX GPU:

也许显而易见的是,与 CPU 相比,K80 或 GV100 GPU 可用于加速光线投射,因为 GPU 具有高度并行的特性。但是,这些 pre-RTX GPU 没有任何专门用于光线投射的硬件。有一些不是专门用于光线投射的特殊用途硬件,您可能可以通过各种方式加以利用,因此由您来识别和设计这些类型的硬件加速黑客。

从 Turing 架构开始的 RTX GPU 确实有专用于光线投射的专用硬件,因此它们加速光线查询的速度甚至比使用任何 GPU 并行化光线查询所获得的加速还要快。

CUDA 与 OptiX:

CUDA 可用于任何 GPU 上的并行光线追踪,但它目前(在我撰写本文时)不支持访问专门的 RTX 硬件进行光线追踪。使用 CUDA 时,您将负责编写所有代码以构建加速结构(例如 BVH)并通过加速结构遍历光线,并且您需要编写相交和着色或 hit-processing 程序。

OptiX、Direct-X 和 Vulkan 都允许您访问 RTX GPU 中的专用 ray-tracing 硬件。通过使用这些 API,可以以更低的功率要求实现更高的速度,而且它们还需要更少的工作,因为通过加速结构的交叉和光线遍历已为您提供。这些 API 还为 production-level 光线投射提供其他常用功能,例如实例化、变换、运动模糊,以及用于处理光线命中和未命中的 single-threaded 编程模型。

最小与最大光线查询:

OptiX 具有 built-in 功能,可以 return 最接近光线原点的表面交点,即 'min query'。 OptiX 没有为最远的交叉点提供类似的单一查询(这就是我假设你所说的“最大”的意思)。要找到最大距离命中或距离射线上第二个点最近的命中,您需要跟踪多个命中并跟踪您想要的命中。

在 CUDA 中,您可以自行检测最小查询和最大查询,因此只要您可以编写所有代码,您就可以做任何您想做的事情。

表面与体积:

你的问题提到了“3D体积”,它有多种含义,所以澄清一下:

OptiX(+ DirectX + Vulkan)是用于表面光线追踪的 API,例如三角形网格。 RTX 专用硬件专用于加速基于表面的表示的光线追踪。

如果您的“3D 体积”指的是体积表示,例如体素数据或四面体网格,那么 surface-based 光线追踪可能不是投射光线查询的最快或最合适的方式。在这种情况下,您可能希望在 CUDA 中使用“光线行进”技术,或者查看适用于 NanoVDB 等 GPU 的体积光线投射 API。