Cuda/Optix 是否支持硬件加速最小/最大光线投射?

问题描述

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

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

解决方法

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

我看到的问题的不同轴是:CUDA 与 OptiX、RTX 前 GPU 与 RTX GPU(例如,Volta 与 Ampere)、最小光线查询与最大光线查询,以及可能的表面表示与体积表示.

RTX 前与 RTX GPU:

或许可以明确地说,与 CPU 相比,K80 或 GV100 GPU 可用于加速光线投射,因为 GPU 具有高度并行性。但是,这些 RTX 之前的 GPU 没有任何专门用于光线投射的硬件。您可以通过各种方式利用一些并非专用于光线投射的特殊用途硬件,因此您可以识别和设计这些类型的硬件加速技巧。

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

CUDA 与 OptiX:

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

OptiX、Direct-X 和 Vulkan 都允许您访问 RTX GPU 中的专用光线追踪硬件。通过使用这些 API,人们可以以更低的功率要求获得更高的速度,而且它们也需要更少的努力,因为通过加速结构为您提供了交叉点和光线遍历。这些 API 还提供生产级光线投射所需的其他常用功能,例如实例化、变换、运动模糊,以及用于处理光线命中和未命中的单线程编程模型。

最小与最大光线查询:

OptiX 具有返回最接近射线原点的表面交点的内置功能,即“最小查询”。 OptiX 没有为最远的交叉点提供类似的单一查询(这就是我假设你所说的“最大”)。要找到最大距离命中,或最接近射线上第二点的命中,您需要跟踪多个命中并跟踪您想要的命中。

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

表面与体积:

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

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...