解决密集几何体问题

首次发布:
最后更新:
Josh Barczak's avatar
Josh Barczak

问题:三角形密度不断增加

在图形领域,我们过去将三角形数据存储在内存中,作为顶点和索引缓冲区,然后将其发送到硬件光栅器生成像素。几年前,我们向管线添加了光线追踪功能,现在我们将网格通过驱动程序例程,生成硬件可用的特定于供应商的加速结构。

在同期,Nanite 等技术通过引入可以直接光栅化的非常小的三角形格式,在某些情况下使用计算着色器中的软件光栅化,提高了模型复杂度的标准。这些系统给光线追踪带来了挑战。

自定义压缩格式无法被当前的光线追踪 API 直接使用。相反,我们需要将其解码为 API 可理解的内容。这会增加内存压力,并增加 BVH 构建的延迟,这两者都可能导致帧率不稳定、卡顿。即使 API 限制被解除,现有的硬件加速结构也太大了,无法支持未来以较低数据速率进行创作的内容。

下图说明了这种情况

image

解决方案:硬件几何体压缩

稠密几何体格式 (DGF) 是 AMD 开发的一种基于块的几何体压缩技术,未来 GPU 架构将直接支持该技术。它旨在解决这些问题,就像 DXT、ETC 和 ASTC 等格式为纹理数据所做的那样,为几何体数据提供解决方案。

DGF 经过精心设计,可满足硬件需求,将尽可能多的三角形打包到缓存对齐的结构中。这使得可以使用一次内存事务检索一个三角形,这是光线追踪的关键属性,对于光栅化也高度理想。

通过将几何体压缩移出驱动程序,压缩器可以以在运行时执行过于缓慢或会违反 API 规范的方式处理数据。

DGF 的原生 GPU 支持将缩小光栅化和光线追踪之间的几何体复杂度差距,从而实现类似于此生态系统的生态系统。

image

性能竞争力

DGF 压缩在精度和数据速率方面与最先进的技术相当,并且即使在着色器代码中进行模拟,解码速度也足够快,可以进行实时渲染。DGF 还支持足够快的编码时间,以支持快速迭代。

下表显示了一些示例结果(帧时间是在 AMD Radeon RX7900 XT 上测量的)

三角形输入大小DGF 大小每三角形字节数帧时间压缩时间
160 万29 MB5.7 MB3.730.26 毫秒0.84 秒
210 万37 MB6.2 MB3.050.31 毫秒0.65 秒
1270 万271 MB41.3 MB3.391.33 毫秒5.14 秒

有关压缩算法和数据格式的描述以及进一步分析,请参阅我们的 HPG 2024 论文

直观且可控

DGF 在压缩输入网格的同时保留了其连通性。无需重新网格化或重新采样即可使用它。手动重新网格化工作量很大,而自动执行的算法可能缓慢且难以控制。通过保留拓扑,我们可以保留尖锐的角和重要的特征,例如 UV 图集和 LOD 簇边界。

image

DGF 提供细粒度的控制,而不是固定的顶点编码精度。这允许开发人员根据内容需求和所使用的着色类型在精度和内存消耗之间进行细致的权衡。细粒度控制的另一个好处是,如果压缩伪影成为问题,通常只需拖动滑块即可解决。DGF 编码器通过获取目标精度(以比特为单位),并将坐标量化为具有该比特宽度的有符号整数来工作。这种初始量化是 DGF 中唯一的误差源。

精度目标16 位14 位12 位
压缩大小4.4 MB3.5 MB3.0 MB

AMD 稠密几何体压缩格式 SDK

AMD 发布了 稠密几何体压缩格式 (DGF) SDK,以鼓励开发人员尝试几何体压缩,并提供一个参考工具链用于集成到内容管线中。

SDK 提供了以下基本构建块:

  • 用于几何体压缩和解压缩的 CPU 库。
  • 用于 GPU 解压缩的优化 HLSL 代码。
  • 一个交互式查看器,可加载和压缩模型(OBJ 或 PLY),并允许用户评估压缩质量。

提供的所有代码均根据宽松的许可证发布,并在任何硬件上运行。

如果您是专注于下一代技术的引擎开发人员或技术美术师,我们邀请您下载 DGF SDK,并考虑该技术将如何融入您的工作流程。我们欢迎并感谢您的反馈(无论好坏)和一般性问题。

如果您对数据格式和编码算法有疑问,或者需要更多数据点,您还可以阅读我们的 HPG 2024 论文

Josh Barczak's avatar

Josh Barczak

Josh Barczak 是 AMD 的一位院士,专注于 GPU 光线追踪架构和 3D API 的演进。他大约有 6 年的 GPU 硬件和软件架构经验。在此之前,他曾担任游戏行业的技术总监。
© . This site is unofficial and not affiliated with AMD.