结合代码读3DGS论文(10)——ICLR 2025 3DGS加速&压缩新工作Sort-Free 3DGS论文及代码解读

ICLR 2025 3DGS加速&压缩新工作 Sort-Free 3DGS论文及代码解读

  • [一、论文简介 🌟](#一、论文简介 🌟)
    • [1.1 基本信息](#1.1 基本信息)
    • [1.2 论文主要贡献](#1.2 论文主要贡献)
  • [二、方法论 🍀](#二、方法论 🍀)
    • [2.1 预备知识:Gaussian Splatting(Preliminaries: Gaussian Splatting)](#2.1 预备知识:Gaussian Splatting(Preliminaries: Gaussian Splatting))
    • [2.2 无需排序Gaussian Splatting(Sort-Free Gaussian Splatting)](#2.2 无需排序Gaussian Splatting(Sort-Free Gaussian Splatting))
    • [2.3 加权求和渲染(Weighted Sum Rendering)](#2.3 加权求和渲染(Weighted Sum Rendering))
    • [2.4 视角相关不透明度(View-Depedent Opacity)](#2.4 视角相关不透明度(View-Depedent Opacity))
    • [2.5 实施细节(Implementation Details)](#2.5 实施细节(Implementation Details))
  • [三、论文实验部分 🧪](#三、论文实验部分 🧪)
    • [3.1 对比实验](#3.1 对比实验)
    • [3.2 消融实验](#3.2 消融实验)
  • [四、论文代码解读 💻](#四、论文代码解读 💻)
  • 写在最后

写在前面:如果想了解更多关于3DGS的加速压缩新工作,可以关注笔者的Github仓库:Awesome-3DGS-Compress-Accelerate

一、论文简介 🌟

1.1 基本信息

  • 📖 题目:Sort-free Gaussian Splatting via Weighted Sum Rendering
  • 🏫 单位:Qualcomm AI Research;Graphics Research Team;
  • 🌍 代码:https://github.com/LiYukeee/sort-free-gs
  • 🀄️ 论文摘要:近年来,3D Gaussian Splatting(3DGS)已成为三维场景重建中的一项重要进展。由于它能够在保持较低复杂度的同时恢复高保真细节,因此受到了广泛关注。尽管3DGS取得了令人鼓舞的结果,但其渲染性能受限于对高代价、非交换的 alpha 混合操作的依赖。这些操作要求执行复杂的视角相关排序,从而引入了计算开销,尤其是在手机等资源受限的平台上。论文提出了 Weighted Sum Rendering,它用加权求和来近似 alpha 混合,从而消除了排序的需求。这简化了实现,带来了更优的性能,并消除了由排序引起的"跳变"伪影。实验结果表明,将一种广义的 Gaussian splatting 表达优化到这种新的可微渲染方式上,可以得到有竞争力的图像质量。该方法已在移动设备 GPU 上实现并测试,平均渲染速度提升了 1.23 倍。

图1:论文提出了一种无排序的 Gaussian Splatting 方法,它将体渲染简化为 Weighted Sum Rendering。(a) 在 Snapdragon® 8 Gen 3 GPU‡ 上对"counter"场景进行渲染的可视化示例。(b) 和 (c) 分别是在"counter"场景、分辨率为 1920 × 1080 时,论文方法与 3DGS 在运行时间和内存上的对比。论文实现了两个版本的 3DGS,其中一个版本将 3DGS 的 CUDA kernels 忠实移植到 Vulkan compute shaders 中(3DGS-Compute),另一个版本则利用全局排序后接硬件光栅化(3DGS-Graphics)。(d) 在 Mip-NeRF、Tank & Temples 和 Deep Blending 数据集上的 PSNR 结果。

1.2 论文主要贡献

逼真的三维视图合成在电子游戏、虚拟现实以及三维场景建模等图形学应用中有着非常广泛的用途;基于可学习外观与透明度的三维场景建模技术,凭借其能够稳定生成图像细节的能力,已经取得了显著成功。Neural Radiance Fields(NeRF)是采用这一思路的一项开创性工作,其使用多层感知机(MLP)网络和位置编码来构建表示场景辐射场与不透明度的模型。

近年来,Kerbl 等人(2023)提出了 3D Gaussian Splatting(3DGS),并迅速获得了广泛关注。它用具有视角相关外观的各向异性三维高斯"splat"的稀疏散布替代了 NeRF 中使用的 MLP 网络。这些 splat 通过光栅化而不是代价高昂的体渲染光线步进来高效渲染,同时保持了渲染的可微性。尽管如此,虽然与 NeRF 相比,3DGS 能以显著更低的复杂度生成高质量视图,但对于手机等资源受限平台来说,仍然具有挑战性。

一个重要的复杂度来源在于:对具有透明度的体元素进行 splatting 时,在进行 α \alpha α 混合之前需要先排序,而将本质上非交换、因而天然顺序执行的混合操作,与快速渲染所需的并行化结合起来是困难的。此外,用排序来近似光线积分会由于渲染顺序在时间上的变化而产生可见的"跳变"过渡,而这只能通过更复杂的排序与渲染来缓解。

原始的 3DGS 方法通过在 CUDA 中实现基于计算的光栅器,并借助基于 tile 的 GPU radix sort 来保证从前到后的 α \alpha α 混合,从而实现了令人印象深刻的渲染性能,但也带来了内存开销。后续实现利用了其他 API,如 Vulkan 或 WebGL,要么选择类似的基于计算的实现,要么在不同程度上利用图形硬件(GPU)。遗憾的是,并不存在一种机制能够以按 tile 的方式向硬件光栅器供给数据,因此这类实现要么在向硬件光栅器提交工作之前执行代价高昂的全局排序,要么维持基于计算的光栅器,从而牺牲硬件执行带来的优势。在 WebGL 的情况下,实现通常依赖异步的 CPU 排序,而该排序运行频率低于帧率,这会降低视图质量并加剧时间上的"跳变"伪影。

尽管 Gaussian Splatting 中的排序阶段看起来不可避免,但它实际上来源于对物理过程的近似。事实上,一个用于学习场景表示的通用方案,只要其组成部分和参数是为获得最佳视图重建而优化的,就只受场景模型数学约束的限制。这个观察促使论文去探索能够降低渲染复杂度、同时尽量少损害视图质量的替代方法。

论文还受到了一个被广泛采用的经验性透明介质渲染方法的鼓舞:利用传统渲染管线实现的顺序无关透明(Order Independent Transparency, OIT)。它代表了基于光栅化的计算机图形学中一类无需排序即可渲染透明效果的技术。通过从光栅化管线中消除排序步骤,OIT 能够保持渲染速度,并已被集成到 Blender、Vulkan、Unity 和 Unreal Engine 等商业工具中。

在这篇论文中,论文利用这些思路开发了一种将学习与交换性混合操作结合的新型视图合成方法。该方法扩展了学习式 Gaussian Splatting 的定义,并将其与一种新的体渲染方法结合起来,称为 Weighted-Sum Rendering(GS-WSR);该方法仍然依赖可微渲染与机器学习技术。为了渲染图像,论文方法利用每个 Gaussian 的深度,通过学习得到的函数为每个 Gaussian splat 计算权重。然后将这些加权后的 Gaussian 通过直接求和操作 splat 到图像平面上,从而避免了排序的必要性。作为进一步增强,论文发现,引入视角相关的不透明度显著提升了无排序 Gaussian Splatting 的图像质量。

论文对 Gaussian Splatting 的贡献如下:

  • 首先,论文提出了第一种与图形管线兼容、能够利用硬件光栅化优势的无排序 Gaussian Splatting 技术。
  • 其次,论文引入了 Weighted-Sum Rendering 以及视角相关不透明度,它们能够有效学习模型参数并生成高质量渲染图像。
  • 第三,论文实验表明,该方法在手机上以相当的视觉表现加速了 Gaussian Splatting。

二、方法论 🍀

补充相关工作内容:顺序无关透明性(Order Independent Transparency)

  • 对部分覆盖的建模在计算机图形学中有着悠久历史。这是一个关键问题,因为论文需要渲染精细的非不透明结构或元素,例如火焰、烟雾、云、头发等。在 Porter 和 Duff 的开创性工作 Porter & Duff (1984) 中,他们将透明性表述为 OVER 算子
  • C = α 0 c 0 + ( 1 − α 0 ) c 1 ( 1 ) C=\alpha_0 c_0+(1-\alpha_0)c_1 \quad(1) C=α0c0+(1−α0)c1(1)
  • 其中, α \alpha α 和 c c c 分别表示 alpha 和颜色。由于 OVER 算子不是可交换的,因此它要求按从后到前的顺序进行合成。传统方法通常通过逐层"剥离"深度层 Everitt (2001),或者像 A-buffer Carpenter (1984) 那样累积列表以便排序来加速。这些方法会引入时间和内存开销。
  • 为了避免排序,人们提出了许多用于近似合成的方法,即顺序无关透明性(OIT)。例如,k-buffer 方法类似于深度剥离方法,但只在单次遍历中存储并累积前 k k k 层 Bavoil et al. (2007)。另一种方法是蒙特卡洛渲染中的随机透明性方法,它根据不透明度和深度对片元进行采样;在采样率较高时,这种方法可以产生很有前景的结果 Enderton et al. (2010)。关于这些方法的综述可参见 Wyman (2016)。
  • McGuire 和 Bavoil (2013) 提出的加权混合 OIT 与论文方法最为相关。McGuire 和 Bavoil (2013) 中列出了若干种 OIT 变体,其中最一般的一种是用如下可交换混合算子替代 OVER 算子:
  • C = ∏ i = 1 N ( 1 − α i ) c 0 + ( 1 − ∏ i = 1 N ( 1 − α i ) ) ∑ i = 1 N c i α i w ( d i , α i ) ∑ i = 1 N α i w ( d i , α i ) ( 2 ) C=\prod_{i=1}^{N}(1-\alpha_i)c_0+\left(1-\prod_{i=1}^{N}(1-\alpha_i)\right)\frac{\sum_{i=1}^{N} c_i \alpha_i w(d_i,\alpha_i)}{\sum_{i=1}^{N}\alpha_i w(d_i,\alpha_i)} \quad(2) C=i=1∏N(1−αi)c0+(1−i=1∏N(1−αi))∑i=1Nαiw(di,αi)∑i=1Nciαiw(di,αi)(2)
  • 其中, d i d_i di 是到相机的距离, c 0 c_0 c0 是背景颜色, w ( ⋅ ) w(\cdot) w(⋅) 是一个随距离增大而减小的函数,因此距离相机更近的物体会被赋予更大的权重。在式(2)的 OIT 渲染中,有两个求和项定义了像素值,并且由于加法是可交换的,它们可以按任意顺序计算。受 OIT 启发,论文通过引入可学习参数和视角相关不透明度,将其扩展到 Gaussian Splatting。此外,与 OIT 的指数权重相比,线性权重在 Gaussian Splatting 中能产生更好的 PSNR 结果。

2.1 预备知识:Gaussian Splatting(Preliminaries: Gaussian Splatting)

3DGS 的场景模型 G = ( p i , t i , q i , s i , H i ) i = 1 N G={(p_i,t_i,q_i,s_i,H_i)}_{i=1}^{N} G=(pi,ti,qi,si,Hi)i=1N 表示一个由 N N N 个高斯组成的场景,其中中心位置 p ∈ R 3 p\in\mathbb{R}^3 p∈R3,最大不透明度 t i ∈ [ 0 , 1 ] t_i\in[0,1] ti∈[0,1],朝向 q ∈ R 4 q\in\mathbb{R}^4 q∈R4,尺度 s ∈ R 3 s\in\mathbb{R}^3 s∈R3,以及球谐系数 H H H,其形式遵循与高斯概率分布类似的方程。三维空间中位置 x x x 处每个元素的不透明度定义为:

α i ( x ) = t i exp ⁡ ( − ( x − p i ) t [ Σ ( q i , s i ) ] − 1 ( x − p i ) 2 ) , i = 1 , 2 , ⋯   , N ( 3 ) \alpha_i(x)=t_i\exp\left(-\frac{(x-p_i)^t[\Sigma(q_i,s_i)]^{-1}(x-p_i)}{2}\right),\ i=1,2,\cdots,N \quad(3) αi(x)=tiexp(−2(x−pi)t[Σ(qi,si)]−1(x−pi)), i=1,2,⋯,N(3)

并且,考虑一个焦点位于位置 f f f 的相机,视角相关的颜色定义为:

c i = Y ( ∣ f − p i ∣ , H i ) , i = 1 , 2 , ⋯   , N , ( 4 ) c_i=Y(|f-p_i|,H_i),\ i=1,2,\cdots,N, \quad(4) ci=Y(∣f−pi∣,Hi), i=1,2,⋯,N,(4)

其中, Y ( ⋅ ) Y(\cdot) Y(⋅) 表示球谐函数, ∣ ⋅ ∣ |\cdot| ∣⋅∣ 表示向量范数。

为了渲染图像,每个三维高斯都会被映射到二维,并近似为一个具有如下 2 × 2 2\times2 2×2 协方差矩阵的二维高斯:

Σ 2 D = J W Σ 3 D W t J t ( 5 ) \Sigma_{2D}=JW\Sigma_{3D}W^tJ^t \quad(5) Σ2D=JWΣ3DWtJt(5)

其中, W W W 是由相机成像变换定义的矩阵, J J J 是由投影相机变换的仿射近似所定义的雅可比矩阵。

在按深度顺序对高斯进行排序之后,通过 Gaussian splatting 得到的最终像素颜色可按下式计算:

C = ∑ i = 1 N c i α i ∏ j = 1 i − 1 ( 1 − α j ) , ( 6 ) C=\sum_{i=1}^{N} c_i\alpha_i \prod_{j=1}^{i-1}(1-\alpha_j), \quad(6) C=i=1∑Nciαij=1∏i−1(1−αj),(6)

这对应于众所周知的计算机图形学中的 alpha-blending 技术(Marschner & Shirley, 2015)。

2.2 无需排序Gaussian Splatting(Sort-Free Gaussian Splatting)

如前文所述,3DGS 依赖于不可交换的 alpha 混合,这要求在渲染之前执行深度顺序排序操作。为了恢复渲染图像的高保真度,3DGS 模型通常包含大量 Gaussian,在复杂场景中其数量可能上升到数百万。与这些排序操作相关的开销,使得若无有效优化,就难以将 Gaussian splat 到图像上。

为了加速渲染,3DGS 引入了若干旨在利用 CUDA 并行计算能力的优化。如图 2 所示,3DGS 将渲染图像划分为多个互不重叠的 tile,而跨越多个 tile 的 Gaussian 会被相应复制。每个 Gaussian 会被分配一个 tile ID,并在每个 tile 内按深度进行排序。排序完成后,所有 tile 并行渲染,从而显著提高计算效率。此外,3DGS 还采用提前终止来进一步优化性能:如果最前面的 Gaussian 的 alpha 值已经足够高,渲染过程将跳过后续 Gaussian,从而减少不必要的计算和内存使用。

图2:基于加权求和渲染的免排序Gaussian Splatting架构。3DGS需要tiling, replication, sorting, rendering。论文方法只需要计算每个高斯的权重,并独立地对每个像素的贡献求和。

尽管 3DGS 取得了令人鼓舞的结果,但其基于 CUDA 的实现限制了可移植性,而其排序需求也限制了性能。其使用高效的基于 tile 的基数排序,迫使其维持一条完全基于计算的渲染管线,包括基于计算的光栅化。另一方面,当前 API 并未提供能够以 tile 方式将几何体高效提交给硬件光栅器的机制,因此利用硬件光栅器的实现必须在提交工作之前,对所有可见 Gaussian 执行代价更高的全局排序。3DGS 在其 CUDA 实现中选择了完全基于计算的方法,因此无法获得 GPU 固定功能硬件的一些优势。其基于 tile 的排序在 tile 边界处复制 Gaussian 时会带来一定开销,而当 Gaussian 数量很大时,这一问题会更加严重。最后,正如已有工作 Radl et al. (2024) 所指出的,按 Gaussian 中心进行排序会在视图变换期间引入"跳变"伪影,从而进一步影响视觉质量。

这些局限性促使论文消除 Gaussian Splatting 中的排序阶段,这不仅显著简化了实现,而且增强了与硬件图形管线的兼容性。受顺序无关透明性(OIT)启发,论文提出了一种新方法,将 3DGS 中的体渲染过程修改为一种更高效的表示,称为 Weighted Sum Rendering(WSR)。

2.3 加权求和渲染(Weighted Sum Rendering)

图2对原始的基于排序的 3DGS 模型与论文提出的无排序 Gaussian Splatting 框架的结构进行了比较。与 3DGS 所采用的体渲染方法不同,论文方法仅根据每个 Gaussian 的深度和可学习参数来估计其透明度,从而消除了对深度排序的需求。最终图像可以用下式渲染:

C = c B w B + ∑ i = 1 N c i α i w ( d i ) w B + ∑ i = 1 N α i w ( d i ) ( 7 ) C=\frac{c_B w_B+\sum_{i=1}^{N} c_i \alpha_i w(d_i)}{w_B+\sum_{i=1}^{N}\alpha_i w(d_i)} \quad(7) C=wB+∑i=1Nαiw(di)cBwB+∑i=1Nciαiw(di)(7)

其中, c B c_B cB 和 w B w_B wB 分别表示背景的颜色和可学习权重。 d d d 表示深度。 w ( ⋅ ) w(\cdot) w(⋅) 表示可学习的权重函数。论文网络在训练过程中学习 Gaussian 的参数。在 WSR 中使用式(7)进行渲染,对应于计算加权和。由于加法满足交换律,这些求和可以按任意顺序计算,从而克服了深度排序的限制。不同于依赖预定义参数的传统 OIT 方法 Meshkin (2007); McGuire & Bavoil (2013),论文方法在训练过程中对这种新表示的参数进行优化。

3DGS 基于物理的混合模型生成新视图,而 GS-WSR 展示了偏离基于物理模型、并使用机器学习来训练非物理模型参数的益处。在体渲染式(6)中,必须满足 α i ∈ [ 0 , 1 ] \alpha_i \in [0,1] αi∈[0,1],以保证所有项均为正。然而,在 WSR 式(7)中,这些约束并非必要,因为 α i \alpha_i αi 在辐射场模型中充当可学习参数。去除这类约束有可能带来更好的近似。同样,论文的视角相关不透明度可能并不对应于光学定律,但在实践中它有助于减小 WSR 式(7) 相对于体渲染式(6) 的局限性。

直接加权求和渲染(Direct Weighted Sum Rendering,DIR-WSR)。一种直接的渲染方法是直接求和所有贡献,让网络学习特定的不透明度。在 DIR-WSR 中,权重被定义为常数,如下所示:

w ( d i ) = 1 , i = 1 , 2 , ⋯   , N . ( 8 ) w(d_i)=1,\quad i=1,2,\cdots,N. \quad(8) w(di)=1,i=1,2,⋯,N.(8)

然而,DIR-WSR 对复杂场景效果不佳,并且常常会在 Gaussian 重叠区域引入模糊伪影。论文将这种较差的视觉表现归因于缺乏深度信息,这会妨碍对透明度的准确估计。图3给出了一个可视化示例,展示了两个颜色不同且 α = 1 \alpha=1 α=1 的非透明 Gaussian。由于 DIR-WSR 使用常数权重 1,它无法正确处理这种情况,从而将结果颜色错误地估计为紫色。

指数加权求和渲染(Exponential Weighted Sum Rendering,EXP-WSR)。为了更好地捕捉遮挡效应,论文引入 EXP-WSR,为更靠近相机的 Gaussian 分配更大的权重。其权重定义为:

w ( d i ) = exp ⁡ ( − σ d i β ) , i = 1 , 2 , ⋯   , N , ( 9 ) w(d_i)=\exp(-\sigma d_i^{\beta}),\quad i=1,2,\cdots,N, \quad(9) w(di)=exp(−σdiβ),i=1,2,⋯,N,(9)

其中, σ , β \sigma,\beta σ,β 是可学习参数。通过这种方式,更靠近观察者的 Gaussian 将具有更高的权重,因此对最终渲染图像贡献更大。尽管与 DIR-WSR 相比,EXP-WSR 可以有效减少伪影并生成更好的结果,但它并不能完全消除视觉失真,因为较远的 Gaussian 在某种程度上仍会对渲染图像产生贡献。如图3所示,红色 Gaussian 因为更接近观察者而比蓝色 Gaussian 具有更大的权重,因此得到的结果更接近真实值。然而,最终输出中仍然可见一些伪影。

图3:三种不同权重计算的加权和渲染变体,即直接加权求和渲染(DIR-WSR),指数加权求和渲染(EXPWSR)和线性校正加权求和渲染(LC-WSR)。

线性校正加权求和渲染(LC-WSR)。受可变形卷积 Dai et al. (2017) 和 KPConv Thomas et al. (2019) 的启发,论文使用线性校正根据深度来估计权重,即

w ( d i ) = max ⁡ ( 0 , 1 − d i σ ) v i , i = 1 , 2 , ⋯   , N , ( 10 ) w(d_i)=\max\left(0,1-\frac{d_i}{\sigma}\right)v_i,\quad i=1,2,\cdots,N, \quad(10) w(di)=max(0,1−σdi)vi,i=1,2,⋯,N,(10)

其中, σ , v i \sigma,v_i σ,vi 是可学习参数。该形式会为更靠近相机的 Gaussian 分配相对更大的权重。对于较远的 Gaussian,其权重可能会根据 σ \sigma σ 或 v i v_i vi 而减小到 0。如图3所示,由于该模型可以将权重设为 0,因此能够更准确地建模遮挡,其渲染结果最接近真实值。此外,与 EXP-WSR 相比,LC-WSR 的计算代价更低。

2.4 视角相关不透明度(View-Depedent Opacity)

在上节中,论文提出了 WSR,根据 Gaussian 的深度为其分配不同的权重。此外,在原始 3DGS 中,Gaussian 的顺序也会随着观察者方向的不同而改变。图 4 展示了这一现象:两个观察者从不同方向观察两个 Gaussian。左侧观察者给红色 Gaussian 分配了更大的权重,而右侧观察者给同一个红色 Gaussian 分配了更小的权重。这一观察促使论文采用视角相关不透明度的分配方式。

图4:视角相关不透明度。在3DGS中,累积的 α n \alpha_n αn 会根据观察者的方向而变化,这促使论文在无排序高斯溅射中分配与视图相关的不透明度。

论文用另一组用于视角相关性的球谐系数来替代不透明度值。这是论文减弱被遮挡 Gaussian 贡献的另一种机制。论文修改了式(3),该式定义了无排序 Gaussian 的不透明度,将 3DGS 元素的最大不透明度 t i ∈ [ 0 , 1 ] t_i\in[0,1] ti∈[0,1] 替换为一个无约束值 u i u_i ui:

u i = Y ( ∣ f − p i ∣ , H i ) , i = 1 , 2 , ⋯   , N , ( 11 ) u_i=Y(|f-p_i|,H_i),\ i=1,2,\cdots,N, \quad(11) ui=Y(∣f−pi∣,Hi), i=1,2,⋯,N,(11)

其中, Y ( ⋅ ) Y(\cdot) Y(⋅) 表示球谐函数, ∣ ⋅ ∣ |\cdot| ∣⋅∣ 表示向量范数。 H i H_i Hi 表示用于不透明度的可学习球谐系数。因此,最大不透明度 u i u_i ui 根据学习得到的球谐参数向量 H i H_i Hi,依赖于视角方向 ∣ f − p i ∣ |f-p_i| ∣f−pi∣。

在论文的实现中,RGB 通道与不透明度的 SH 求值之间存在细微差别。最大不透明度 u i u_i ui 不进行截断。请注意,视角相关不透明度可能并不符合光学定律,但在实践中,它有助于减小 OIT 渲染式(7) 相对于体渲染式(6) 的局限性。

2.5 实施细节(Implementation Details)

1️⃣ 训练损失(Training Loss)

论文使用与 3DGS 相同的渲染损失来优化无排序 Gaussian Splatting,其中包含 ℓ 1 \ell_1 ℓ1 损失以及系数为 0.2 的 D-SSIM 损失。

2️⃣ 训练与评估(Training and Evaluation)

论文使用 PyTorch 训练无排序 Gaussian Splatting 方法。论文为 PyTorch 版本实现了自定义 CUDA kernels。对于 EXP-WSR,论文将 σ = 0.1 \sigma=0.1 σ=0.1、 β = 0.8 \beta=0.8 β=0.8 作为初始化。对于 LC-WSR,论文将 σ = 10 \sigma=10 σ=10、 v i = 0.1 v_i=0.1 vi=0.1 作为初始化。为方便起见,论文还通过 PyTorch 推理仿真来评估方法的质量。

3️⃣ 移动设备测试(Testing on mobile devices)

。为了衡量模型在移动设备上的效率,论文在 Vulkan 中实现了论文方法以及具有竞争力的 3DGS 方法;Vulkan 是由 Khronos Group 创建并维护的跨平台图形与计算 API。

3DGS 在移动设备上的渲染包含四个步骤:预处理、光照、排序和光栅化。预处理步骤根据相机视角将三维 Gaussian 投影到二维。光照阶段基于相机视角和球谐函数(SHs)计算每个 Gaussian 的颜色。排序步骤将 Gaussian 按从前到后排序,光栅化步骤则对每个 tile 内的所有 Gaussian 进行光栅化,以输出最终图像。

为了进行公平比较,论文实现了两个版本的 3DGS,即 3DGS-Compute 和 3DGS-Graphics。3DGS-Compute 尝试在 Vulkan compute shaders 中忠实复现 3DGS 的方法。它遵循一种相似方案:对每个重叠 tile 复制 Gaussian,然后进行基于计算的光栅化。最显著的不同在于,来自 NVIDIA CUB 库 的优化 radix-sort 必须被 Vulkan 中的等价实现所替代。相较之下,3DGS-Graphics 方法允许采用更适合移动设备的执行方式。它对 Gaussian 进行全局排序,从而消除了按 tile 复制,并且能够方便地将一个全局 Gaussian 列表提交到硬件图形管线。Gaussian 的颜色和不透明度在 fragment shader 中进行计算。这些修改使得 Gaussian 能够由固定功能光栅器高效渲染,同时它们的贡献通过硬件混合操作进行累积。

对于论文方法以及 3DGS 方法,预处理和光照步骤与原始 3DGS 实现保持一致,不同之处在于论文方法的不透明度现在基于相机视角和 SHs 在光照阶段计算。论文方法移除了整个排序步骤,并在 fragment shader 中对 Gaussian 进行光栅化。此外,论文方法包含一个额外的 subpass 来执行最终归一化步骤。在论文方法中,所有 Gaussian 都通过一次 instanced draw call 进行渲染,而不是像 3DGS 那样按 tile 的方式进行。论文验证了其移动端实现与 PyTorch 参考实现之间的一致性。

三、论文实验部分 🧪

3.1 对比实验


3.2 消融实验


四、论文代码解读 💻

待补充。

写在最后

由于笔者🖊️精力有限且本文更多的目的是通过📒博客记录学习过程并分享更多知识,因此文中部分描述不太具体,如有不太理解💫的地方可在评论区👀留言。非特殊赶deadline⏰或假期⛱️期间,笔者会经常上线回复💬。如有不便之处,请海涵~

如果想了解更多关于3DGS的加速⏰压缩⚡️新工作,可以关注笔者的Github仓库:Awesome-3DGS-Compress-Accelerate

另外,创造不易,转载请注明出处💗💗💗~

相关推荐
机器之心2 小时前
龙虾之后,为什么说「主动式智能」才是Agent的终极形态?
人工智能·openai
智算菩萨2 小时前
GPT-5.4 Pro与Thinking模型全面研究报告
人工智能·gpt·ai·chatgpt·ai-native
团子和二花2 小时前
openclaw平替之nanobot源码解析(八):Gateway进阶——定时任务与心跳机制
人工智能·gateway
机器之心2 小时前
昨晚,OpenClaw大更新,亲手终结「旧插件」时代
人工智能·openai
码路高手2 小时前
Trae-Agent源码重点
人工智能·架构
剑穗挂着新流苏3122 小时前
114_PyTorch 进阶:模型保存与读取的两大方式及“陷阱”避坑指南
人工智能·pytorch·深度学习
CoovallyAIHub2 小时前
把 Whisper、Moonshine、SenseVoice 统统装进手机:sherpa-onnx 离线语音部署框架,GitHub 10.9K Star
人工智能·架构
一只叫煤球的猫2 小时前
RAG 如何落地?从原理解释到工程实现
人工智能·后端·ai编程
AI营销快线2 小时前
AI营销获客难?原圈科技深度解析SaaS系统增长之道
大数据·人工智能