英伟达详述面向Vulkan的实时光线追踪技术

2018-12-23 14:05:12 映维网 分享

请记住本站备用网址:感统训练,收藏本站链接地址:http://www.jababy.cn/

秒杀聚划算,yanqingxiaoshuoba,z133

文章相关引用及参考:nvidia

本文来自英伟达开发技术工程师Nuno Subtil

映维网 2018年11月12日)英伟达新推出的图灵华人娱乐app首次在消费者GPU中实现了实时光线追踪。自此,社区开始讨论DirectX 12中的光线追踪。然而,一系列的开发者都希望能够通过Vulkan(Khronos Group支持的low-level API)实现这一点,从而带来更为开放的策略。Vulkan令开发者能够针对众多不同的平台,包括Windows和Linux,从而允许更广泛地分发3D加速的应用程序。英伟达的411.63驱动程序现在启用了一个实验性的Vulkan扩展,它通过Vulkan API公开(expose)了英伟达用于实时光线追踪的RTX技术。

这个名为VK_NVX_raytracing的扩展属于开发者预览版。扩展程序面向希望熟悉API概念并开始测试相关功能的开发者。正如“NVX”前缀所示,这个API尚未最终确定,并且有可能在最终版本发布之前进行一定的更改。

日前,英伟达开发技术工程师Nuno Subtil向我们详细介绍了面向Vulkan的实时光线追踪技术,以下是映维网的具体整理:

1. 光线追踪API的演变

在英伟达,GPU加速的光线追踪成为研究课题已有超过10年的时间。

GPU逐渐发展成为功能强大的光栅化机器。为架构添加可编程性可以创建基于光栅化的复杂算法。这种可编程性令GPU能够处理更复杂的计算问题,并最终促成了英伟达GPU计算平台CUDA的推出。英伟达的GPU加速光线追踪研究专注于通过CUDA编程模型公开(expose)光线追踪。

英伟达努力的首个可见结果之一是OptiX,一种用于加速光线投射应用的通用SDK。英伟达在2010年SIGGRAPH大会发布的论文细介绍了针对OptiX的API设计研究,并包含了今天用于实时光线追踪的关键创建模块。图1是论文的摘录。

图1:早期论文的摘录,其详细介绍了关于OptiX API的研究

英伟达围绕OptiX所做的努力,特别是为了令其变得越来越高效和可扩展而进行的研发工作,最终在实时光线追踪(RTX)达到了顶峰。RTX是算法,计算机图形和GPU架构10多年研究的产物,它使得实时光线追踪应用程序能够在英伟达的GPU上运行。RTX利用了英伟达所有的研究工作和硬件改进,是创建实时光线追踪API的基础。

2. 为Vulkan带来光线追踪

英伟达Vulkan光线追踪扩展(简称“VKRay”)背后的关键设计原则利用了他们之前关于光线追踪API的研究。VKRay建立在经过验证和现场测试的API概念之上,其足够灵活,可以支持各种各样的应用程序,并同时仍然提供了运行应用程序利用未来研究的抽象层。

Vulkan是一个跨硬件API,而英伟达已经确保VKRay实现跨硬件支持。整个API可以在现有的Vulkan计算功能之上实现。英伟达同时在全力确保这个扩展符合现有的Vulkan API概念。内存分配,资源处理和着色器语言/字节码的处理方式与核心Vulkan API规定的方式相同。

3. 光线追踪管道

通过光线追踪管道的数据流不同于传统的光栅管道。图2比较了两个管道。

一般认为灰色块不可编程。随着底层实现的成熟,这一切都随着时间的推移而不断发展和改进。白色块代表完全可编程的阶段。钻石形阶段是调度工作发生的地方。

图2:传统光栅化管道 vs 光线追踪管道

与光栅化不同,光线追踪所执行的工作“单位(光线)”数量取决于先前工作单位的结果。这意味着新的工作能够通过可编程阶段产生,并直接馈送回管道。

英伟达光线追踪API包含四个关键组件:

4. 加速结构

传统的光栅化涉及独立处理每一个几何图元。相比之下,光线追踪针对所有场景基元测试每条光线,而这样做的成本十分昂贵。

大多数光线追踪器是实现某种形式的加速结构,从而快速拒绝基元,英伟达的API将其公开(expose)为“一等公民”。加速结构(acceleration structure)是一个对象,它为场景中的基元保存几何信息,以这样的方式进行预处理,从而能够流畅地拒绝潜在的光线-基元交叉点。这是可以进行光线追踪的API基元。

加速结构(acceleration structure,AS)作为不透明的,实现定义的数据结构公开(expose),不依赖于任何基础算法或剔除方法。它建模为两级结构:bottom-level AS节点包含几何数据,而top-level AS节点则包含对底层节点的引用列表,以及相关的变换和着色信息。图3概述了结构之间的关系。

图3:top-level AS和bottom-level AS的关系

可以使用VkBuffer对象中的现有几何创建加速结构。创建AS的过程分为两步:首先创建bottom-level节点,然后生成top-level节点。

所有创建/更新操作都发生在GPU上,如图4所示。在这个情形下,“创建”意味着从零开始创建新对象(如在初始设置场景时),而“更新”则意味着我们通过新数据来更新现有对象(如当角色在现有场景中移动时)。尽管创建和更新操作都旨在以非常高效的方式进行,但两者都存在一定的限制,尤其是更新。

图4:加速结构流程

在API Level,我们定义一个新的Vulkan对象类型:VkAccelerationStructureNVX。对象的每个实例都在top-level AS节点或bottom-level封装。我们同时定义了一个新的资源描述符类型VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NVX,主要用于将AS对象绑定至着色器。

对象创建和消除遵循一般的Vulkan范例:通过调用vkCreateAccelerationStructureNVX创建加速结构节点,这会返回不透明句柄。然后,这个句柄可与vkGetAccelerationStructureMemoryRequirementsNVX一起使用,以获取有关该加速结构需要的内存类型和内存量信息。接下来,可以使用vkAllocateMemory分配内存,并通过调用vkBindAccelerationStructureMemoryNVX将其绑定至该对象。

4.1 管理加速结构内存

加速结构创建/更新操作需要一定的临时“暂存(scratch memory)”。可以通过调用vkGetAccelerationStructureScratchMemoryRequirementsNVX来查询这一内存。

暂存(scratch memory)以常规VkBuffer对象的形式出现,根据实现返回的内存要求进行分配。这将作为创建/更新命令的参数进行传入。

AS对象所需的内存量取决于传入的特定几何数据。因此,vkGetAccelerationStructureMemoryRequirementsNVX返回的数据是特定对象所需内存量的上限。创建结构后,可以使用vkCmdWriteAccelerationStructurePropertiesNVX命令,让GPU将给定AS对象的压缩大小写入Vulkan查询对象,而这可以在CPU进行读取。然后,可以使用它来分配具有所需内存量的单独AS对象,并且可以使用vkCmdCopyAccelerationStructureNVX来将原始AS对象压缩为新的AS对象。

4.2 加速结构创建/更新执行

AS创建/更新命令在GPU上执行,可以提交给图形或计算队列。API允许实现并行化连续的创建/更新命令,从而最大化GPU利用率。

在创建/更新命令之间重用暂存缓冲区时应小心,因为它们的执行可能会重叠。为确保正确,我们需要barrier同时,使用新的存储器访问flag位VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NVX和VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NVX:应该在暂存缓冲区上的缓冲存储器barrier中使用它们,然后再将相同的缓冲区用于另一个操作,并用在全局存储器barrier上,从而确保AS创建/更新在AS对象用于光线追踪之前完成更新。

为了最大化重叠,建议为多个创建/更新操作分配足够的临时缓冲区内存,并为每个连续操作分配不同的内存区域。分配多少内存取决于应用程序对加速结构创建性能的敏感程度,以及使用的加速结构量。

更多关于加速结构API的信息,请访问这个页面。

5. 光线追踪shader domain

为了向Vulkan API公开(expose)光线追踪功能,我们定义一组新的shader domain,以及用于着色器间通信的基元。图5说明了流程。

图5:光线追踪shader domain及其关系。

5.1 光线生成着色器(Ray Generation Shader)

光线生成着色器开始所有的光线追踪工作。光线生成着色器在线程的2D网格上运行,非常类似于计算着色器,并且是将追踪进入场景光线的起点。它同时负责将光线追踪算法的最终输出写入至内存。

5.2 相交着色器(Intersection Shader)

声明:本站部分资源来源于网络,版权归原作者或者来源机构所有,如作者或来源机构不同意本站转载采用,请通知我们,我们将第一时间删除内容。本站刊载文章出于传递更多信息之目的,所刊文章观点仅代表作者本人观点,并不意味着本站赞同作者观点或证实其描述,其原创性及对文章内容的真实性、完整性、及时性本站亦不作任何保证或承诺,请读者仅作参考。
编辑:酷讯