实时光线追踪是一种强大的渲染技术,可以生成非常逼真的图像。 NVIDIA OptiX 和 RTX 技术使这一切成为可能,即使是具有大量细节的场景也是如此。然而,当这些细节丰富的场景涉及到动作和动画时,保持实时光线追踪性能可能具有挑战性。
本文将探讨 NVIDIA OptiX 9 的全新 RTX Mega Geometry 功能 (尤其是 Cluster Acceleration Structures (CLAS)) 如何实现动态、高密度几何图形的快速光线追踪。我们将特别关注细分表面。您可以在 NVIDIA/optix-subd GitHub 资源库中获取演示 OptiX 中 CLAS API 的开源示例代码以及本文中描述的概念。
动态场景的挑战
RTX 硬件上的 NVIDIA OptiX 能够以每个像素一个样本的速度实时光线追踪大型场景,前提是几何图形保持不变。这适用于极其密集的几何图形,甚至接近像素大小的微型三角形的密度。
然而,这种密度水平的场景每帧都会发生变化,这带来了新的挑战。几何加速结构(RTX 硬件用于将三角形与光线匹配的搜索树)必须保持最新,这可能比追踪本身花费的时间更长。

有时,您可以走捷径:如果顶点位置发生变化,但三角形数量及其连接保持不变,OptiX 可对加速结构进行重新拟合运算。重构会重复使用现有的大部分搜索树,因此比完全重建快得多。但也存在局限性:如果顶点移动过多,则针对加速结构追踪光线的时间会变慢。还有一个基本限制,即不能以不同的方式添加、删除或重新连接三角形,因为这些操作会使树失效。
NVIDIA OptiX 9 引入了一种新的数据结构,即 Cluster Acceleration Structure (CLAS) 。CLAS 的输入是用户定义的小三角形集群,CLAS 成为 Cluster Geometry Acceleration Structure (Cluster GAS) 的输入,它与现有的 GAS 非常相似。

对于某些类型的场景,CLAS 可以提供改装速度,同时保留完整重建的大部分灵活性和追踪性能。简而言之,我们的想法是在集群级别以类似于 Refit 的方式重复使用模式,然后仅在集群上进行完全重建。
可能的集群重用有两种类型。首先,相同的集群可以跨帧重复使用,甚至可以使用动画顶点。这与现有的 GAS refit 类似,可能是在流式传输细节级别系统中使用集群的好方法。
重要的是,如果多个集群具有相同的拓扑 (顶点模式) ,且位置不同,则还可以在同一帧内在空间上重复使用相同的集群模式。这种空间重用是这里的主要关注点,因为它非常适合细分表面的动态曲面细分。
细分曲面基础知识
Catmull-Clark 细分表面 (subds) 是动画电影以及未来游戏中呈现几何图形的常用方式。它们由主要由四边形组成的 控制网格 以及一套将四边形细分为光滑极限曲面的数学规则组成。控制网格上的任何点都可以使用 优化的 GPU 方法 进行评估,并映射到极限表面,从而实现无限的微三角形密度。此外,高频细节可以与其他纹理一起高效存储在单独的位移贴图中。

这种表征在电影或游戏制作流程中具有许多优势。造型、绑定、动画等操作只需处理控制网格,而控制网格通常是轻量级的。动态镶嵌极限表面以进行渲染,这意味着几何密度可以瞄准摄像头。屏幕外或隐藏的表面可以以较低的速率进行镶嵌。
实时曲面细分
图 4 显示了自适应曲面细分管道对于使用具有集群几何图形的 OptiX 的渲染器的效果。此工作流将运行每一帧,重新解析每个动态网格并重建其加速结构。

前几个步骤发生在用户空间代码中,通常作为 CUDA 内核实现。
- 动画或蒙皮 :为子控制网格的顶点制作动画。
- 镶嵌和位移 :在子极限表面上定义聚类,密度约为每个像素一个三角形。将集群描述和集群顶点保存到设备缓冲区中。
加速重建和渲染步骤主要由 OptiX 处理。
- CLAS 实例化:使用描述和顶点作为输入,为每个集群创建 CLAS。请注意,这是一次函数调用,可获取设备内存中的几乎所有参数。
- GAS 和 IAS 构建 :完成构建更高级别的加速。由于 GAS 的叶子是集群而不是三角形,因此此步骤的速度比其他方式快 10 倍至 100 倍。
- OptiX 启动:向场景中发射光线并对其进行着色。OptiX 提供集群 ID 和命中三角形的顶点作为着色上下文。
在足够密集的几何结构中,可以直接将 microtriangle facet normals 用作着色法线;也可以选择在曲面细分期间评估 limit normals,并将其传递给缓冲区中的 path tracer。
空间集群重用
在对图 5 中的环面等表面进行镶嵌时,您可以有意地以相似或相同的方式对集群进行镶嵌,以提供空间重复使用的机会。这里基于 quad-based 控制框架对您有利。得到的大多数集群都是矩形网格,其中许多集群具有相同的 MxN 分辨率。

OptiX API 中可重复使用的集群称为 Cluster Template 。它存储 CLAS 的所有内容 (顶点除外) 。只需提供具有相同拓扑的新顶点 (类似于 refit) ,即可反复快速实例化。
您可以创建 Cluster Templates 并将其重复用于任何三角形索引 (图 6,左) 。但是,由于网格模式对于细分表面和其他情况非常有用,OptiX 有一个单独的 API 调用,用于从网格创建模板 (图 6,右) 。由于无需提供网格模板的拓扑结构,网格版本不仅使用起来更简单,而且生成的 Cluster Template 通常更小、更快实现光线追踪,因为 OptiX 可以针对预定义拓扑进行优化。有关 API 详情,请参阅 OptiX 9.0 编程指南。

这加快了整体 frame time,因为:
- 场景中的许多 CLAS 使用相同的 Cluster Template (集群模板) 。
- 集群模板会预先计算 CLAS 构建的大部分工作。
- 与直接在微三角形上构建相比,基于 CLAS 构建的 GAS 的条目数量减少了大约 100 倍。
总体而言,与将所有三角形放入单个平面 GAS 中相比,Cluster Templates 可以将加速重建速度提高一个数量级。
DLSS 光线重建
图 4 所示的整个工作流以 OptiX 启动结束,该启动以每个像素约一个样本的速度追踪场景,以保持高帧率。例如,用于胶片中最终帧照明的经典 OptiX 应用会累积 16-32 帧,以获得更融合的图像,然后运行降噪器以消除剩余的 Monte Carlo 噪点。如果摄像头和几何图形完全动画化,这种方法就会变得复杂得多。
您可以将用户空间累积循环替换为 DLSS-RR ,后者借助运动向量和其他输入导向层自行进行内部累积。DLSS-RR 不会收敛到参考图像,因此并非适合所有用户,但会生成稳定、视觉上流畅的图像。
为了计算子节点的精确运动向量,需要上一帧的控制支撑架以及当前帧的命中点。有关如何执行此操作的详细信息,请参阅使用 CUDA 和 OptiX 的基于集群的曲面细分示例源代码。

总结和后续步骤
本文介绍了如何在 NVIDIA OptiX 9 中使用集群加速结构 (CLASes) ,以实现动态、高密度几何图形的高效光线追踪。CLASes 是 RTX Mega Geometry 的关键组件,可重复使用集群模式,与传统方法相比,可显著加速加速结构重建。这对于渲染动态细分表面尤为有益,其中动态曲面细分可以与 DLSS 光线重建相结合,以获得高质量的实时结果。
如需了解详情,请探索示例源代码 (用于生成本文中的部分图像) ,在 OptiX Developer Forum 中发布技术问题,并查看以下相关资源: