
微软发布DXR Clustered Geometry预览,2018年以来DXR最大更新
来源标题:DirectX Raytracing (DXR) Clustered Geometry
微软推出DirectX Raytracing(DXR)Clustered Geometry和Partitioned Top-Level Acceleration Structures(PTLAS)预览,提供统一的GPU驱动API来构建和更新。该更新随AgilitySDK发布,被称为DXR自2018年亮相以来最重要的更新。Clustered Geometry将加速结构构建拆分为可复用的小三角形簇,使光线追踪可直接使用光栅化同款全细节几何体。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
今天我们推出 DirectX Raytracing (DXR) Clustered Geometry 与 Partitioned Top-Level Acceleration Structures (PTLAS) 的预览版,并提供统一的 GPU 驱动 API 来构建和更新它们。这是更大规模 AgilitySDK 版本的一部分,详见父文章:https://devblogs.microsoft.com/directx/agilitysdk-1-620-retail-and-1-722-preview/。对 DXR 而言,这是自 2018 年首次亮相以来最重要的更新。本次预览。
Clustered Geometry 与 Partitioned TLAS:GPU 驱动的高效场景更新
以下是 Clustered Geometry 与 Partitioned TLAS 的动机:在场景中的对象级范围内,动画、流式传输和生成的几何体可能反复产生构建大型底层加速结构(BLAS)的开销。Clustered Geometry 将构建单元分解为小的可复用三角形簇。更高效构建的一个好处是,可以实际对与光栅化相同的全细节几何体进行光线追踪,而不是使用简化代理,从而使光线追踪阴影和反射与可见场景匹配。在场景全局范围内,对于大型世界,即使只有少量实例发生变化,更新顶层加速结构(TLAS)也可能代价高昂。Partitioned TLAS 将更新成本集中在发生变化的场景区域,同时在其他区域保留加速结构数据。应用程序可以单独或一起使用 Clustered Geometry 和 PTLAS。这些功能不需要现有光线追踪支持之外的新硬件能力。即使在正常时期,这也将是一件美妙的事情。支持的范围将取决于硬件厂商为其各代硬件实现和验证驱动程序。对某些较旧光线追踪 GPU 的支持尚待确定:实现工作可能发现性能问题,因此出于该原因或其他原因,暴露这些功能可能不切实际。目前,请参阅可用性和先决条件,了解 AMD、Intel 和 NVIDIA 当前支持的硬件和驱动程序(Qualcomm 于 2027 年)。《Gears of War: E-Day》是通过 NVIDIA 的厂商特定 API RTX Mega Geometry 采用簇几何的早期示例。在 DirectX 中标准化这些能力,为支持的硬件提供了通用集成路径,使更广泛的未来游戏能够使用它们。由于这是预览版,您的反馈(Discord)可以帮助在最终发布前完善设计,或让我们有信心尽快进入零售阶段。还有各种示例以及 PIX 支持与这些功能配套,详见本博客后文。NVIDIA 有一篇很棒的帖子,包含更多示例和资源:https://github.com/NVIDIA-RTX/Whitepapers/blob/main/dx_clusters_and_ptlas/README.md。下面的场景来自该帖子,描述了其 dx12_forest_ray_tracing 演示,该演示使用了所有新功能,效果令人印象深刻。这个新的 D3D12 版本仍在开发中,即将推出。该示例使用簇模板来优化其动态地形的构建。在背景中,簇模板形成方形斑块,然后向中景分辨率加倍,再在前景递归细分为三角形斑块。这实现了几乎均匀的屏幕空间三角形密度。
以下是代码如何驱动新功能的简要说明。完整细节请参阅规范:Clustered Geometry and Partitioned TLAS specification。
光线追踪加速结构(RTAS)操作 API 有两个入口点。GetRTASOperationPrebuildInfo() 查询保守的结果和暂存要求。ExecuteIndirectRTASOperations() 执行批次,其参数数组以及(在支持的情况下)其计数位于 GPU 内存中。CPU 描述每个操作及其工作负载边界;计算着色器可以生成参数。簇操作还支持仅大小查询和复制/移动操作。在一次 ExecuteIndirectRTASOperations() 调用中提交的操作可以按任意顺序执行,且不得相互依赖。依赖阶段需要单独的调用,并在它们之间设置屏障——例如,当应用程序组合 Clustered Geometry 和 PTLAS 时:簇构建 → Cluster BLAS 构建 → PTLAS 构建。
Cluster Level Acceleration Structure (CLAS) 包含最多 256 个三角形和 256 个顶点的索引网格。应用程序从 CLAS 引用列表构建 Cluster BLAS,然后在该 BLAS 的非分区 TLAS 或 Partitioned TLAS 中创建实例。重点是减少跨更小块的聚合加速结构构建成本。多个 Cluster BLAS 可以共享一个 CLAS;TLAS 实例引用 BLAS,而不是单个 CLAS。Cluster BLAS 使用的所有 CLAS 中的顶点位置都在该 Cluster BLAS 的对象空间中表示。组装期间没有逐 CLAS 变换。对于流式传输和细节级别(LOD),应用程序可以组装现有 CLAS 的不同集合,而不是从三角形重建。基于 Meshlet 的几何管线可能已经提供了合适的三角形分组。应用程序为每个 CLAS 分配一个 32 位 ClusterID,在命中着色器中通过 ClusterID() 检索。PrimitiveIndex() 是命中 CLAS 局部的;使用这对值查找该三角形的法线、材质或其他应用程序数据。Shader Model 6.10 还要求支持 TriangleObjectPositions() 及其 RayQuery 对应项 CandidateTriangleObjectPositions() 和 CommittedTriangleObjectPositions()。当在构建时启用数据访问时,这些内建函数从加速结构检索三角形的对象空间顶点位置。这对于簇几何很有用,例如计算几何法线而无需从单独的顶点缓冲区获取位置。更改被引用 CLAS 的内容或地址会使 Cluster BLAS 失效,因此需要重建它以及依赖的顶层结构。簇构建支持一系列顶点格式,包括浮点和归一化整数位置。对于这些格式,
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。