光线追踪大量动画几何体

《Proceedings of the ACM on Computer Graphics and Interactive Techniques》:Ray Tracing Massive Amounts of Animated Geometry

【字体: 大 中 小 】 时间:2026年09月06日 来源:Proceedings of the ACM on Computer Graphics and Interactive Techniques 3.1

编辑推荐:

   # 摘要AI摘要 要查看此AI生成的摘要,您必须拥有高级访问权限。 了解更多 登录 ## 摘要 我们提出了一种方法,可高效地对大量具有唯一动画的复杂网格几何体进行光线追踪。通过使用四面体笼将原始的未动画三角形几何体分割为互不相交的三角形集合。对每个四面体,在其包含的三

  

# 摘要AI摘要

要查看此AI生成的摘要,您必须拥有高级访问权限。

了解更多
登录

## 摘要

我们提出了一种方法,可高效地对大量具有唯一动画的复杂网格几何体进行光线追踪。通过使用四面体笼将原始的未动画三角形几何体分割为互不相交的三角形集合。对每个四面体,在其包含的三角形之上构建一个加速结构,并在所有四面体之上构建另一个独立的加速结构。我们不将动画变换应用于实际的三角形几何体,而是仅将其应用于四面体笼,并变换与动画化四面体相交的光线。每帧仅需重建一次所有四面体上的加速结构。每帧动画几何体的成本仅取决于四面体笼的分辨率,而与原始几何体的密度解耦。我们的方法针对保持三角形连接性的动画,并通过四面体笼诱导的分段线性变形来近似顶点运动。我们证明,我们的方法在更新时间和内存消耗方面均优于其他竞争方法,从而能够在当前一代GPU上实时追踪大量动画化的复杂几何体。

## AI摘要

### AI生成摘要(实验性)

本摘要由自动化工具生成,未经论文作者撰写或审阅。它旨在支持发现、帮助读者评估相关性,并帮助相邻研究领域的读者理解该工作。它旨在补充作者提供的摘要,后者仍然是论文的主要摘要。全文仍为权威版本。

点击此处了解更多。

点击此处对摘要的准确性、清晰度和实用性发表评论。这样做将有助于改进未来的优化和重新生成版本。要查看此AI生成的纯语言摘要,您必须拥有高级访问权限。

---

**图1.** 我们的基于四面体笼的方法允许在AMD RX 9070 XT上以1080p分辨率以每秒60帧的速率进行5.85亿个动画三角形的光线追踪(唯一动画化对象,不通过实例化复用)。

## 1 引言

实时光线追踪动画几何体,尤其是动画三角形网格,不仅需要每帧对实际三角形进行动画处理,还需要更新或重建三角形上的加速结构。该过程的计算和内存成本很高。这些成本直接与动画三角形的数量成正比,因此每帧中它们会受到限制,以避免超过给定的帧时间和内存预算。在保持60帧每秒或更高实时帧率的约束下,每帧仅有几毫秒可用于几何体动画处理和加速结构更新。常见的缓解策略包括使用较低分辨率的几何体细节层次(LOD)、部分(交错)加速结构更新,或者有选择地复用动画化几何体而非应用唯一动画,以降低每帧成本。

我们提出了一种方法来应对每帧动画化几何体预算有限的问题,通过将几何体动画成本与三角形密度解耦来解决。我们聚焦于可变形动画,其中三角形连接性保持不变,而顶点动画由四面体笼诱导的分段线性变形来近似。我们的方法在预处理步骤中,对原始的未动画几何体构建一个低分辨率的四面体笼,将其分割为小的不相交三角形集合。在所有四面体内的三角形之上构建一个加速结构,并在所有四面体之上构建一个顶层加速结构。这创建了一个两级加速结构层次。我们不每帧将动画变换应用于三角形,而是仅应用于四面体笼,每帧仅更新顶层加速结构。四面体内的三角形集合及其加速结构从不被修改。光线首先通过顶层加速结构进行追踪,对于每个相交的四面体,基于变换后的四面体创建一个唯一变形的光线副本,并将其用于与四面体内的静态底层加速结构求交。

四面体笼的分辨率与动画对象的三角形密度无关,且四面体笼三角形的数量远小于对象中的三角形总数。这将每帧动画成本降低到传统方法成本的一小部分,传统方法会修改所有对象三角形并更新相应的加速结构。同时,我们的方法所需的内存显著更少。当同一三角形对象的副本被多次动画化但动画不同时,节省尤为显著。鉴于内存和时间上的节省,我们的方法能够实时追踪大量唯一动画化的几何体,这是之前无法实现的。

我们的贡献包括:
- 将四面体笼应用于光线追踪动画几何体时,将动画复杂度、BVH内存占用和更新时间与三角形密度解耦。
- 两种利用四面体笼进行动画几何体光线追踪的新算法:第一种利用光线-实例变换以提高效率,第二种使用相对4D几何体和边界体积编码来保证水密性。
- 将我们的算法映射到DXR管线,以便在当前一代GPU上轻松采用。

## 2 相关工作

光线追踪动画内容需要更新底层的加速结构。近年来,边界体积层次(BVH)已成为光线追踪的主要加速结构,研究人员提出了许多不同的BVH构建算法 [Meister等人 2021]。对于运动有限的动画,从叶节点到根节点重新拟合的BVH更新因其低成本而成为首选。为了支持任意几何变换,例如物体爆炸成碎片,需要更耗时的BVH重建来维持加速结构质量。替代方法试图通过采用延迟构建策略 [Hunt等人 2007; Lee和Liktor 2020] 或增量修改现有BVH拓扑 [Karras和Aila 2013; Kensler 2008] 来降低BVH更新/重建成本。

DXR [Microsoft 2020] 或 Vulkan-RT [Khronos Group 2020] 等实时光线追踪API使用两级加速结构层次:每个对象一个底层加速结构(BLAS)和一个涵盖对象实例的顶层加速结构(TLAS)。当对象内三角形发生变化时需要重建BLAS,当对象实例发生变化或对象本身发生变化时需要重建TLAS。大多数DXR或Vulkan实现使用BVH作为加速结构。根据API质量标志,实现可以决定是否执行完整的BVH重建或更简单的BVH更新。

位移微网格(DMMs)([Maggiordomo等人 2023]) 通过提供对分层编码微网格的隐式定义BVH来避免对几何体构建BVH。Gruen等人 [2024] 提出了一种方法来改善DMMs在动画场景中的质量。DMMs尚未被广泛采用,因为其表示与分段流形对象绑定,限制了其在处理真实内容时的适用性。

近年来,使用小三角形簇而非单个三角形来构建三角形网格变得越来越普遍,这得益于基于簇的几何LOD渲染 [Brian Karis 2022]。基于簇的LOD的光线追踪已被证明可行 [Benthin和Peters 2023],实时API支持也已提出 [Microsoft 2026; NVIDIA Corporation 2024]。簇在现有的两级层次结构中引入了另一层,因此在只有对象的部分受动画影响时提供更细粒度的控制。

对于实例/对象数量极高的场景,每帧重建顶层BVH可能成为限制因素。顶层分区 [Khronos Group 2024] 通过将对象集合分类为受场景变化影响或不受影响,帮助降低BVH构建复杂度。这防止了在只有部分实例/对象被修改时重建或更新整个BVH。

四面体笼作为3D对象的空间加速结构,在动画、变形、仿真 [Alliez等人 2005; Jacobson等人 2011; Joshi等人 2007; Mezger等人 2003; Morrical等人 2023; Müller等人 2005] 以及光线追踪和加速结构领域已被广泛使用,包括采用非正交局部参数化进行遍历的方法 [Aman等人 2022; Kácerik和Bittner 2025; Lagae和Dutré 2008]。四面体在几何简单性和有向包围盒的方向紧致性之间取得了平衡。最近,Luton等人 [Luton和Tricard 2025] 提出了一种使用四面体笼对动画化但无网格的对象表示进行光栅化的方法。我们的方法遵循其将形变变换应用于几何体未动画姿态的一般思想,但将其扩展到实时光线追踪领域。

更新或重建BVH结构的成本与实际动画几何体的数量直接相关。当用唯一变形动画化大量复杂对象时,这会迅速成为实现实时性能的限制因素。更糟糕的是,每个唯一动画化的对象还需要一份原始几何体及其加速结构的副本,这可能导致内存消耗过度。

**图2.** 我们的四面体化算法的2D说明(从左到右):处于未动画姿态的对象,使用规则网格进行体素化,移除空体素并将非空体素分割为四面体;移除不与任何几何体相交的四面体。(最右侧)每个体素被分割为六个四面体。

## 3 构建四面体笼

我们的方法使用四面体笼将三角形对象分割为更小的互不相交的三角形集合。存在多种构建此类四面体笼的算法 [Si 2006; Wang等人 2020; Wang和Yu 2012; Yu等人 2024]。我们采用一种简单的基于体素的方法,该方法分多个阶段运行(见图2)。我们从处于未动画姿态的对象开始,使用规则网格将其划分为体素。所有空体素被移除,剩余的体素被分割为四面体。在最后一步,所有不与任何对象几何体相交的四面体被移除。在我们的实现中,每个体素被分割为六个四面体 [Domiter和?alik 2008; Freudenthal 1942]。

**图3.** 与两个四面体重叠的三角形被裁剪,生成的多边形被三角化。

给定非空四面体的集合,我们确定与每个四面体相交的三角形集合,并将其裁剪为该四面体的四个边界三角形(见图3)。此裁剪过程为每个四面体创建一个小的三角形网格,即μ网格。裁剪与相邻四面体重叠的三角形是必要的,以避免伪影,因为每个四面体会以不同的方式变形同一个三角形。我们的实现确保通过裁剪引入的顶点被去重,并在当前四面体和所有相邻四面体之间共享。裁剪过程是必要的,以确保以下边界性质:μ网格的所有顶点都包含在对应四面体的体积内。与相邻四面体共享的顶点恰好位于四面体的边界三角形上。请注意,裁剪会引入新的三角形和顶点,从而增加其总数(参见第7节)。

**图4.**(左)常规的基于BVH的加速结构,其中内部节点指向其他内部节点或包含三角形的叶节点。(右)在tetLAS中,内部节点除了引用三角形外,还可以引用四面体,而四面体则指向μ BLAS。

创建所有μ网格后,为每个μ网格创建一个μ BLAS。μ BLAS是建立在μ网格三角形之上的底层加速结构。每个μ BLAS创建一次并保持静态(从不以任何方式被修改)。请注意,可以在此时对静态μ BLAS应用额外的优化,例如紧凑化。相同的四面体笼因此所有相关的μ网格和μ BLAS对象可以被同一对象的唯一动画化实例复用(参见第7节)。在最后一步,在所有四面体之上构建一个顶层加速结构。我们将此称为tetLAS,由所有四面体的边界三角形组成的网格称为tetMesh。请注意,tetLAS在叶节点级别有四面体,每个四面体指向一个μ BLAS对象(见图4)。

我们目前的实现不强制每个四面体有固定的三角形预算。每个μ BLAS中的三角形数量由笼的分辨率和几何体分布决定。

## 4 动画化与求交四面体笼

封装一组三角形的四面体笼(tetMesh)提供了一种高效的方法来近似施加在三角形顶点上的任意类型的可变形动画(三角形连接性不变)。

我们的方法不修改三角形顶点,而是仅修改 tetMesh 的顶点,从而产生分段线性空间形变。对于我们的测试场景(见第 7 节),我们要么通过对每个顶点直接应用变换函数来驱动 tetMesh 顶点动画,要么使用基于骨骼的动画方案。在修改 tetMesh 顶点后,tetLAS 随之更新。由于四面体数量比三角形总数小几个数量级(见第 7 节),更新 tetLAS 的代价远小于对所有三角形更新常规 BLAS 的代价。修改 tetMesh 顶点并更新 tetLAS 需在每帧渲染前进行一次。

渲染过程中,一条世界空间中的光线首先穿过 tetLAS 进行追踪。一旦击中某个四面体,该光线便从世界空间变换到该四面体的局部空间(以及对应的 μ BLAS)。随后,变换后的光线穿过 μ BLAS。我们的方法通过将变换表示为 3D 基变换操作,实现从世界空间到四面体局部空间的光线变换(见图 5 和第 4.1 节)。尽管此操作非常高效,但无法在所有情况下保证水密性。因此我们提出另一种变体(见第 5 节),将光线保持在世界空间中,而在光线遍历过程中将几何体和加速结构数据从 4D 表示变换到世界空间。

总体而言,与原始三角形对象相比,tetMesh 和 tetLAS 低几个数量级的复杂度使我们能够显著降低内存消耗、动画复杂度和加速结构构建时间(见第 7 节)。特别是,μ BLAS 对象可复用于同一对象的不同形变。每种独特形变仅需一份 tetMesh 的副本,我们称之为 tetAnimCopy。

图 5. (a) 一个被世界空间光线击中的动画四面体。我们确定击中该动画四面体的入口和出口三角形以及入口点和出口点的两组重心坐标。(b) 这些重心坐标用于在未动画四面体的相同三角形上计算入口和出口点。这两个新点定义了我们的新变换光线。(c) 一个(非退化)动画四面体的四个顶点构成一个非正交坐标系的基(见公式 1 和 2)。我们可以将步骤 (a) 和 (b) 中从世界空间到局部空间的光线变换表示为一个基变换操作 (d)。

4.1 使用光线-实例变换相交四面体

现代光线追踪 API 使用两级 TLAS/BLAS 层次结构,其中 TLAS 建立在实例化的 BLAS 对象之上。实例可通过一个 3×4 矩阵进行变换,该矩阵将光线从世界空间变换到 BLAS 对象的局部空间。请注意,实时光线追踪 API([Khronos Group 2020; Microsoft 2020])要求指定逆矩阵。以下我们将描述如何利用实例变换将光线从世界空间变换到四面体局部空间(见图 5)。

每个未变形四面体的四个顶点 v0、v1、v2 和 v3(见图 5 右侧)定义了非正交坐标系的三个 3D 基向量。如果我们从 μ Mesh 的每个顶点中减去 v0,则所有结果顶点都可以表示为 v1?v0、v2?v0 和 v3?v0 的线性组合。这些组合可以构成一个 3×3 矩阵,如公式 1 所示。我们暂且假设这些向量线性无关。

M = (v1x?v0x v2x?v0x v3x?v0x
v1y?v0y v2y?v0y v3y?v0y
v1z?v0z v2z?v0z v3z?v0z) (1)

类似地,我们可以根据同一四面体动画版本的四个世界空间顶点(a0、a1、a2 和 a3)定义一个 3×4 矩阵 A,如公式 2 所示。A 的前三列定义了变形坐标系的基。第四列将动画坐标系的原点移动到 a0。

A = (a1x?a0x a2x?a0x a3x?a0x a0x
a1y?a0y a2y?a0y a3y?a0y a0y
a1z?a0z a2z?a0z a3z?a0z a0z) (2)

将静态 μ BLAS 中的未动画顶点相对于动画四面体的四个顶点进行变换就变成了一个简单的基变换操作。因此,我们选择 A(M?1)??? 作为 μ BLAS 的实例变换。其中 (M?1)??? 通过求 M 的逆矩阵并添加一列零将其扩展为 3×4 矩阵得到。基于实例变换方法的一个要求是所有未动画四面体必须是非退化的。由于四面体是在预处理步骤中生成的,我们假设可以防止退化四面体的生成。另一个限制是所有 μ BLAS 实例变换必须可逆,即 (A(M?1)???)?1 或 M A?1 必须存在。

图 6. 对于基于实例变换的方法,在裁剪三角形之前沿四面体的单位面法线略微膨胀四面体,可以减少可能出现的水密性问题。

基于实例变换的方法无法保证水密性,因为动画对象将由具有不同变换的实例组成。每个实例在相交局部 μ BLAS 时会使用不同的光线。我们通过略微放大所有四面体来缓解此问题,然后再裁剪原始三角形。每个四面体通过沿其指向外侧的单位法线向外移动定义四面体的四个平面中的每一个一个小量 epsilon 来放大,如图 6 所示。这在裁剪后的三角形共享一条边的位置创建了重叠的表面几何体。epsilon 由用户定义并取决于场景,它必须足够大,以使重叠的几何体不会造成任何可见的渲染伪影或过多重复的四面体相交(见第 8 节),同时避免大多数水密性问题。对于我们的测试场景(见第 7 节),我们使用 epsilon = 2.5×10??。保证水密性的解决方案见第 5 节。我们单独测试了球体模型(半径 100,约 100 万个原始三角形,裁剪后约 120 万个三角形,9×12×9 体素笼),从球心向外发射光线。没有缓解措施时,约 0.01% 的光线穿过封闭球体;采用缓解措施后,没有发生水密性泄漏。

5 保证水密性的替代方法

我们基于四面体笼的遍历中的水密性问题(例如光线穿过相邻三角形之间的共享边)是由不同的四面体对世界空间光线施加不同的世界到局部空间的变换,从而在局部空间中产生不同的光线,这些光线随后被遍历局部 μ BLAS 所导致。这些不同的局部光线可能会对共享的顶点、边和三角形(被不同四面体共享)产生不一致的光线-三角形相交结果。裁剪过程(见第 3 节)确保没有任何单个三角形重叠多个四面体,不一致性只能发生在两个相邻四面体的共享边界三角形之间,例如在四面体的边界三角形内部的一条共享三角形边。然而,裁剪过程本身可能引入数值不精确性,这也可能是水密性问题的另一个来源。当原始网格中穿过两个相邻四面体共享边界三角形的三角形被裁剪时,可能产生恰好位于共享边界三角形上的三角形边,此时就可能发生这种情况。浮点数表示的有限精度并不总是允许我们精确表示恰好位于两个相邻四面体共享边界三角形上的顶点位置(见图 7)。裁剪过程中创建的新顶点可能略微低于或高于共享边界三角形。这破坏了四面体的包围属性,因为裁剪后的三角形的一部分位于四面体外部。

图 7. 2D 插图:(左) 蓝色三角形相对于两个相邻四面体的共享边界三角形进行裁剪,创建两个新顶点。这些新顶点不一定恰好位于共享边界三角形上,可能略有偏差。(右) 放大:上方裁剪后的顶点表示在左侧四面体内部有一个微小的浮点余量,而下方裁剪后的顶点位于右侧四面体内。这破坏了四面体的包围属性,因为裁剪后的三角形有一部分位于外部。一条仅与左侧四面体相交且靠近共享边界三角形的光线可能会漏掉最右侧的裁剪三角形。

为了保证水密性,我们需要执行多个步骤:(a) 恢复四面体相对于其所包含三角形的包围属性,(b) 提供位于相邻四面体共享边界三角形上的裁剪顶点、边和三角形的一致视图,以及 (c) 使用世界空间光线和三角形顶点执行一致的光线-三角形相交测试。下面我们将介绍一种满足这三个要求的方法。

5.1 4D 重心坐标

三角形内的 3D 重心坐标可以扩展到四面体的 4D 重心坐标。四面体内部的任何 3D 点 p 都可以表示为定义该四面体的四个顶点(v0、v1、v2 和 v3)的重心线性组合,如公式 3 所示。

p = b0·v0 + b1·v1 + b2·v2 + b3·v3 (3)

这使我们能够使用四个重心坐标 b0、b1、b2 和 b3 来表示四面体内部(以及边界平面上)的所有 3D 点。实现水密性的核心思想是将所有三角形顶点表示为相对于四个四面体顶点的 4D 重心坐标。

我们需要确保被两个相邻四面体共享的所有点,即共享边界三角形内部的所有点,无论使用其中哪个四面体,都能按位相同地重建。这需要对四面体顶点进行唯一的全局排序。在将原始网格三角形裁剪到每个四面体后,我们去除所有结果 μ Mesh 中的重复顶点,并为每个顶点分配一个唯一 ID。对于每个四面体,我们根据其唯一 ID 对四个顶点进行升序排序,每次求值公式 3 时都使用此顺序。

在为每个裁剪后的 μ Mesh 顶点计算 4D 重心坐标时,我们必须处理以下情况:

(1) μ Mesh 顶点与四面体的某个顶点匹配:只有与该顶点对应的重心坐标设为 1,其余三个坐标设为零。

(2) μ Mesh 顶点恰好位于四面体的某条边上:只有与该边顶点对应的重心坐标设为非零值,其余两个坐标设为零。这两个非零坐标之和必须为一。

(3) μ Mesh 顶点恰好位于四面体的某个边界三角形内部。与该边界三角形顶点对应的三个重心坐标设为非零值,剩余坐标设为零。注意,这三个非零重心坐标之和必须为一。

(4) μ Mesh 顶点完全位于笼中某个四面体内部:四个重心坐标均为非零且之和必须为一。

我们使用一个小的用户定义距离阈值来检测顶点是否非常接近 tetMesh 的顶点、边或三角形。如果顶点足够接近,我们将其吸附到最近的顶点、边或三角形,并使用吸附后的位置计算重心坐标。

给定重心坐标和有序的公式 3 求值,我们可以重建共享边界三角形中任何点按位精确的世界空间位置,无论使用相邻的哪个四面体进行评估。我们对所有非动画 μ Mesh 和对应 μ BLAS 的位置数据使用相对 4D 重心编码,即三角形顶点和包围体。由于三角形顶点表示为相对 4D 重心坐标,加速结构也必须包围相对 4D 位置。因此,我们使用具有 4D 轴对齐包围体的二叉包围体层次结构。我们称之为 4D BVH。

当光线与动画四面体相交时(见第 6 节),我们遍历关联的 4D BVH。在每次遍历步骤中,我们根据修改后的四面体顶点,实时地从相对 4D 表示重建 3D 世界空间 AABB(应用最小和启发式方法 [Niessner 2013] 以获得更紧凑的 3D 包围体)。在 4D BVH 的叶节点层面对三角形顶点执行类似的步骤。相对 4D BVH 表示确保了四面体变换无关性。附录 A 给出了一个证明,说明无论四面体顶点如何变化,从相对 4D BVH 到世界空间 3D BVH 的转换都保持包围属性。

将相对4D坐标转换为3D世界空间是保证射线-图元求交测试水密性的必要步骤,因为该测试需要在与世界空间射线相同的空间中进行。6 DXR实现唯一动画化三角形对象的标准方法是先变换其三角形顶点,然后更新对应的BLAS。当场景中所有动画对象及其BLAS均完成此过程后,还需更新覆盖所有对象/BLAS实例的TLAS。标准动画方法(每个动画对象对应单个实例)所产生的层级结构如图8所示。图8(左)标准动画方法的TLAS/BLAS层级结构,此处每个唯一动画对象对应单个实例。TLAS构建于所有BLAS实例之上。动画变换首先应用于所有对象顶点,然后更新BLAS。当所有BLAS更新完毕后,再更新TLAS。(右)同一对象的不同动画各自拥有自己的tetAnimCopy(四面体笼的副本),但共享同一个μ BLAS对象。每个tetAnimCopy映射到一个实例。动画首先应用于tetMesh,然后更新对应实例的TLAS(即tetLAS)。当前实时光线追踪API(如DXR [Microsoft 2020])不支持四面体图元。以下说明如何将本方法的两个变体(见4.1节和5.1节)映射到现有的DXR API功能。总体而言,我们首先在场景对象的原始形态(未动画化)周围放置四面体笼。裁剪预处理阶段为每个四面体创建一个μ Mesh。这些步骤对两种方法相同。类似地,与四面体关联的μ BLAS保持静态,且不随施加的变换而变化。根据变体不同,动画变换要么集成到实例变换中,要么直接应用于四面体笼。如果同一对象以不同变换进行动画化,我们只需复制四面体笼,从而减少内存消耗(见7节)。图8展示了这种复用μ BLAS的新层级结构的示例。基于实例变换的变体对于基于实例的变体,每个μ BLAS可以直接映射为DXR中基于三角形构建的BLAS。射线-三角形求交由DXR求交管线自动处理。接下来,将所有动画对象的四面体(每个对象拥有各自的四面体笼)汇总到一个合并列表中。列表中的每个四面体映射为单个DXR实例。每个DXR实例的变换矩阵设置为如4.1节所述的四体变换。具体而言,我们首先预计算所有四面体的变换矩阵 (Mi?1)?×?(见公式1)。这些矩阵在渲染期间是静态的。一个计算着色器被调度以动画化所有四面体笼的顶点。另一个计算着色器读取这些顶点以计算矩阵Ai(见公式2)。这些矩阵被合并为每个四面体的单个矩阵Oi。3×4的DXR实例变换矩阵被设置为合并后的矩阵OiAi(Mi?1)?×?。注意,着色法线需要通过实例变换的逆转置进行变换。该矩阵对每个动画四面体每帧计算一次。水密变体对于水密变体,我们不能使用基于μ Mesh三角形构建的DXR BLAS,因为三角形顶点和包围体存储为相对于给定四面体的4D重心坐标(见5.1节),而DXR不支持直接处理此格式。从相对4D重心编码重建3D世界空间顶点和包围体需要在软件中手动计算。因此,我们利用DXR的程序化几何支持。每当射线进入一个四面体时,会执行一个程序化着色器来遍历预计算的二进制4D BVH。在射线遍历过程中,4D位置数据被用于重建两个节点的AABB的3D世界空间位置以及三个三角形顶点(见5.1节)以进行射线-三角形求交测试。TLAS构建于动画四面体的AABB之上,实例与四面体之间采用一对一映射。图9测试场景:(左)青蛙:一组骨骼动画角色,包含2610万个三角形,每个青蛙对象有24.9万个顶点和40.8万个三角形;(右)树木:一组动画树木,包含3950万个三角形,每棵树有138万个顶点和158万个三角形;(下)草地:包含4.79亿个三角形,每块草地有6万个顶点和12万个三角形。7 结果在评估中,我们实现了一个基于四面体的光线追踪框架,使用DirectX 12和HLSL编写。所有实验均在配备16GB显存的AMD Radeon RX 9070 XT GPU上运行Windows 11进行。渲染计时包括每像素追踪两条射线(一条主射线和一条次级阴影射线)以及着色和采样。BLAS对象使用ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_UPDATE和PREFER_FAST_BUILD标志进行更新,而TLAS使用PREFER_FAST_TRACE标志进行重建。我们使用三个不同场景测试了本方法:树木、草地和青蛙(见图9),每个场景在复杂度和动画对象数量上各不相同。对于每个场景,我们将基础对象复制多次,并为每个副本分配唯一的四面体动画笼。每个基础对象均以中等和高分辨率的四面体笼进行了测试。两种分辨率均能提供足够的精度,使得与沿选定摄像机路径动画化所有三角形相比,没有观察到明显的视觉差异。适配骨骼动画青蛙模型是唯一支持骨骼动画的测试场景,需要将其适配到四面体笼。对于四面体笼的每个顶点,我们找到原始三角形模型中最接近的顶点,并使用其骨骼ID和骨骼权重。注意,这种简单方法可以通过更高级的骨骼ID和权重选择或适应底层骨骼结构来改进。考虑到骨骼动画,我们扩展了三角形裁剪算法以处理每顶点骨骼数据。我们为每个三角形收集最多12个唯一骨骼ID,并扩展每个顶点以携带关联的骨骼ID和权重。如果某顶点原本不包含特定骨骼ID,我们将该骨骼的权重设为零。我们可以像其他顶点属性一样裁剪三角形中所有骨骼的权重。三角形裁剪完成后,我们将结果三角形各顶点的骨骼ID按骨骼权重排序。我们保留最大的四个权重及其关联的骨骼ID,并将这四个骨骼的权重进行归一化。注意,将骨骼动画应用于四面体笼仅近似原始三角形模型的骨骼动画。动画质量取决于四面体笼的分辨率。注意,在着色期间,我们获取命中的三角形的三个未形变顶点法线,并对它们进行蒙皮以模拟原始蒙皮几何的行为。表1:Voxel Res #Tets #Vtx #Tris #Vtx #Tris #Vtx #Tris/Tet Original Clipped Avg Min MaxTree5×8×5 0.64k 0.204k 1.58m 1.38m 2.15m (1.36×) 1.96m (1.42×) 3.3k 1 13k9×12×9 2.32k 0.639k 1.58m 1.38m 2.55m (1.61×) 2.35m (1.70×) 1.1k 1 4.3kGrass Patch6×5×6 0.66k 0.659k 120k 60.14k 207k (1.73×) 149k (2.48×) 0.3k 1 2k10×9×10 2.42k 0.722k 120k 60.14k 277k (2.31×) 223k (3.70×) 0.1k 1 0.9kFrog15×15×15 1.91k 0.711k 408k 249k 618k (1.51×) 418k (1.68×) 0.3k 1 1.7k25×25×25 5.55k 19.24k 408k 249k 761k (1.87×) 569k (2.29×) 0.1k 1 0.8k单个动画测试对象的统计信息。裁剪后三角形数量增加了1.3–2.3倍。每个四面体的平均三角形数量根据场景和初始体素分辨率从几百到几千不等。每个对象的四面体数量比三角形数量少两到三个数量级,从而显著降低了动画成本。裁剪本方法要求将对象的原始三角形与tetMesh进行裁剪,这引入了额外的顶点和三角形(见表1)。增加量取决于四面体笼的分辨率,对于我们的测试对象,三角形增加1.3至2.3倍,顶点增加1.4至3.7倍。三角形和顶点数量增加同样影响μ BLAS的大小。然而,由于μ BLAS在不同动画之间被复用,初始较高的内存消耗会随着复用次数增加而迅速摊销。图10标准方法(BLAS对象)与我们的非水密四面体方法在内存消耗、动画、加速结构构建和渲染时间上的比较,草地块对象数量递增(见图9)。使用两种四面体笼分辨率:中等(6×5×6)和高分辨率(10×9×10)。标准方法逐个动画化每个三角形,然后更新基于三角形的BLAS。随着地块数量增加,这导致内存消耗((a)和(b))、动画(c)和加速结构构建时间(d)急剧线性增长。相比之下,我们的非水密四面体方法仅表现出轻微增长。我们的方法与标准方法的渲染时间(e)非常接近。对于500个草地块,总时间(f)(包括动画、加速结构和渲染时间),我们的非水密方法最多可优于标准方法9倍,具体取决于四面体笼的分辨率。内存与性能比较首先,我们比较了水密和非水密四面体方法的内存消耗与渲染时间(见表2)。尽管水密方法的内存消耗仅为非水密方法的2.3–3.2倍,但所需的软件回退方案引入了19–80倍的运行时开销,使其不适合实时渲染,更适用于参考方案。因此,仅非水密方法适用于当前代GPU硬件上的实时渲染,而水密版本仍可作为验证参考。表2:25棵树木 500块草地 9×9青蛙 Mem Render Time Mem Render Time Mem Render Time Non-Watertight 209.7 MB 2.96 ms 145.6 MB 1.35 ms 190 MB 1 ms Watertight 540.5 MB 203 ms 459.4 MB 108 ms 442 MB 19 ms Overhead 2.5× 68.6× 3.2× 80× 2.3× 19×25棵树木、500块草地和81只青蛙的非水密与水密方法的内存消耗和渲染时间。水密方法的内存消耗比非水密方法多2.3–3.2倍。未经硬件加速的软件回退引入了19–80倍的渲染时间开销。接下来,我们将非水密四面体方法与标准方法进行比较,标准方法逐个动画化每个三角形然后更新基于三角形的BLAS。图10展示了草地块对象数量递增时内存消耗的详细分解以及动画、加速结构构建和渲染时间。随着动画三角形数量增加,标准方法相比我们的方法表现出更陡峭的线性扩展。相比之下,我们的方法几乎持平,因为四面体数量比三角形少两到三个数量级,导致内存消耗减少16.1倍。动画和加速结构构建时间也是如此。非水密版本的渲染时间略高于标准方法。对于基于光线追踪的应用而言,总时间(包括动画、加速结构更新和渲染)至关重要。在此,我们的非水密方法最多可优于标准方法9倍,同时提供相似的视觉动画质量。图11树木对象和青蛙数量递增时的内存消耗(顶点和BLAS)、更新时间(顶点动画和加速结构)、渲染时间和总时间。与草地场景类似(见图10),标准方法在内存消耗、更新时间和总时间上表现出急剧增长,而我们的方法几乎保持平稳。图11展示了树木和青蛙场景的类似结果。随着对象数量增加,标准方法在内存消耗、加速结构更新时间和渲染时间上表现出急剧增长。即使场景中对象数量较多,我们的方法在内存消耗和更新时间上的增长仍然非常有限,从而产生了更低的总时间。

最终,我们将三个示例场景合并为一个单一场景(见图 1),该场景由于 16 GB 的 GPU 内存限制,无法使用标准方法进行光线追踪。我们的方法能够以约 60 fps(每像素两条光线)渲染这一复杂动态场景。表 3 展示了详细的计时分解。对于包含约 250 万个四面体的该场景,每帧最耗时的阶段是动画化四面体网格顶点和重建所有四面体的 TLAS。表 3 动画三角面数 584 m 四面体数 2.8 m 动画时间 0.35 ms(3%)更新时间 9.66 ms(78%)渲染时间 2.42 ms(19%)总时间 12.43 ms。这是合并场景(见图 1)的计时分解。只有我们基于四面体的方法能够以约 60 fps(每帧 12.43 ms)渲染此场景,同时仅消耗 770.10 MB 的 GPU 内存。更新时间(包括动画化四面体网格顶点和重建四面体的 TLAS(即 tetLAS))是最耗时的步骤,占每帧总时间的 78%。8 局限性 我们的方法使用由四面体笼诱导的分段线性变形来近似保持连接性的三角形网格动画。由于每个四面体诱导一个仿射变换,该四面体内部的几何体被限制在局部线性运动上。这种近似非常适合以下场景:密集的、唯一动画化且具有固定三角面连接的几何体。平滑变形,例如枝叶、草或树木的弯曲,以及人群运动。骨骼动画,前提是笼的分辨率足够高以近似蒙皮。我们的方法不太适用于以下情况:网格拓扑的重大变化(例如爆炸、破坏、切割等)。低于笼尺度的逐三角面或高频运动(例如折叠小于笼分辨率的布料或面部动画)。具有关节附近尖锐权重变化的复杂角色蒙皮。刚体对象,对于此类对象,传统实例化通常更简单且更优。基于关键帧的动画,其中顶点通过跨关键帧插值位置来动画化。由于笼分辨率不足而产生的伪影通常可以通过局部细化四面体笼来减少(见图 12)。支持基于关键帧的动画需要重新计算连续关键帧中对应三角面顶点之间的变换,并将其应用到四面体笼上。对于需要逐三角面控制或改变三角面连接的动画,受影响的基础级加速结构(μ BLAS)需要被重建。骨骼动画化的对象还需要将骨骼和权重分配给四面体笼。最后,该方法通过增加光线遍历和相交成本来换取大幅减少的动画和加速结构更新成本,从而影响光线追踪性能。基于实例的变体需要在共享的四面体边界处具有轻微的几何重叠以缓解水密性伪影,而水密变体则依赖于昂贵的软件回退。由于每个原始三角面都被裁剪与四面体网格相交,产生的子三角面可能分布在多个四面体中。因此,当一条光线与相邻的四面体相交时,共享边可能被多次测试,导致同一原始图元被重复相交。将共享边的唯一所有权分配给四面体可以帮助缓解这一问题。图 12(左)原始蒙皮三角面模型。(中)由于四面体笼分辨率不足而在关节附近产生的动画伪影。(右)在目标区域周围使用更高四面体笼分辨率可减少伪影。9 结论与未来工作 本文提出了一种高效光线追踪大量唯一动画化几何体的方法。我们的方法将动画化三角面几何体的复杂度与几何体的三角面密度解耦。我们的方法每个唯一动画化对象仅需要一次四面体动画复制,从而极大地减少了内存消耗、加速结构更新时间和对象动画化本身的成本。在动画化大量几何体时受限于加速结构构建时间、动画时间或内存占用的应用可以直接从我们的方法中受益。我们的方法通过使用不同分辨率的四面体笼来支持不同的细节层次(LOD)。更高分辨率的四面体笼可以提高动画结果的质量,但代价是增加内存消耗和加速结构更新时间。一般来说,我们的方法可以直接与现有的逐对象 LOD 方案、交错加速结构更新以及基于簇的几何体表示或 TLAS 分区 [Microsoft 2026] 相结合。还可以将基于四面体笼的动画与标准基于网格或刚体的动画混合使用。对四面体的直接硬件和 API 支持将提高剔除效率;类似地,对多级实例化的支持将允许在光线追踪时间与加速结构构建时间之间进行更灵活的权衡。未来工作将集中在改进体素到四面体的算法以及基于骨骼的对象动画质量上,例如,通过对所有关键帧运行优化过程,找到能使蒙皮顶点的高分辨率对象顶点位置与动画化四面体笼产生的顶点位置之间差异最小的骨骼集合和骨骼权重。进一步分析每个关键帧中对象表面围绕每个顶点的曲率可以用于提高动画质量。如果一个四面体包含曲率超过阈值的顶点,预处理阶段可以将其分割为子四面体并递归继续。致谢 模型来源:青蛙(Sketchfab.com)、树木(cgtrader.com)、草丛(cgtrader.com)。作者感谢 Jakub Bok?ansky、Joshua Barczak、Andrew Kensler、Nathan Morrical、Dave Oldcorn 以及匿名审稿人的反馈意见。版权声明与商标 ?2026 Advanced Micro Devices, Inc. 保留所有权利。AMD、Ryzen、Radeon 及其组合均为 Advanced Micro Devices, Inc. 的商标。本出版物中使用的其他产品名称仅用于识别目的,可能是各自公司的商标。
相关新闻
生物通微信公众号
微信
新浪微博
  • 搜索
  • 国际
  • 国内
  • 人物
  • 产业
  • 热点
  • 科普

热点排行

    今日动态 | 人才市场 | 新技术专栏 | 中国科学人 | 云展台 | BioHot | 云讲堂直播 | 会展中心 | 特价专栏 | 技术快讯 | 免费试用

    版权所有 生物通

    Copyright© eBiotrade.com, All Rights Reserved

    联系信箱:

    粤ICP备09063491号