【3DGS】3D 高斯溅射(Gaussian Splatting)完整知识整理

3D 高斯溅射(Gaussian Splatting)完整知识整理


一、简介 (Introduction)

3D 高斯溅射代表了新视角合成领域的突破性进展,通过结合神经辐射场的高质量渲染与传统渲染技术的高效率,实现了逼真场景的实时渲染。这种方法彻底改变了该领域,使照片级真实感渲染在交互帧率下成为可能,同时保持了表示复杂几何和外观的能力。

与之前严重依赖神经网络隐式编码场景信息的新视角合成方法不同,3D 高斯溅射使用显式表示——数百万个 3D 高斯基元,可以通过专门的管线高效渲染。这种表示在质量和性能之间达到了最佳平衡,使其适用于从虚拟现实到数字人创建等各种应用。

本指南提供了 3D 高斯溅射的全面概述,从基础概念到实际实现。我们将探索这一强大技术的理论基础、数学公式、算法细节和实际应用。


二、基础 (Foundations)

2.1 什么是 3D 场景?

一个 3D 场景由三维空间中排列的物体、光源和相机组成:

  • 几何形状 (Geometry):场景中物体的形状和位置
  • 材质属性 (Material Properties):表面如何与光交互(颜色、反射率、透明度)
  • 光照 (Lighting):来自各种光源的场景照明
  • 相机 (Camera):观察场景的视点

3D 场景重建和渲染的目标是捕获或创建这些元素,并从任意视角进行可视化。

2.2 3D 场景表示

在计算机图形学和计算机视觉中,3D 场景表示是一种建模真实或虚拟环境几何和外观的方式。常见表示方法包括:

多边形网格 (Polygonal Meshes)

  • 使用顶点和面来近似表面
  • 在 GPU 上渲染效率高
  • 可能难以处理复杂拓扑

体素网格 (Voxel Grids)

  • 将空间离散化为小立方体(类似 3D 像素)
  • 存储颜色或密度,支持体积效果
  • 精细细节通常需要大量内存

点云 (Point Clouds)

  • 将场景表示为空间中不连接的点及其属性(颜色、法线等)
  • 简单灵活
  • 渲染通常稀疏且有孔洞

神经隐式表示 (Neural Implicit Representations)

  • 将场景编码在神经网络权重或连续函数中
  • 产生平滑插值
  • 渲染需要推理

3D 高斯溅射介于点云和体积场之间:它将场景表示为连续重叠的 3D 高斯密度分布(椭球体)云,无需固定网格结构即可平滑覆盖空间。

2.3 计算机图形学基础

理解高斯溅射需要回顾计算机图形学的一些基本概念:

3D 表示:3D 空间中的物体可以用多种方式表示:

  • 网格:顶点、边和面的集合(通常是三角形)
  • 点云:3D 空间中的点集
  • 体积表示:定义密度和颜色的体素网格或连续函数

相机模型:相机定义了 3D 点如何投影到 2D 图像:

  • 内参:焦距、主点等
  • 外参:相机在 3D 空间中的位置和方向

渲染:从 3D 场景描述生成 2D 图像的过程

要理解高斯溅射,还需要理解坐标变换。在典型的渲染管线中,具有内参模型(焦距、图像平面)和外参姿态(位置和方向)的虚拟相机捕获场景。坐标从世界空间(场景的坐标系)变换到相机/视图空间,最后通过投影(通常是透视投影)变换到屏幕空间。

2.4 光栅化与光线追踪

传统渲染方法分为两大类:

光栅化 (Rasterization)

将矢量图形(如三角形)转换为光栅图像(屏幕上的像素)的过程:

  • 将 3D 顶点变换到屏幕空间
  • 确定每个图元覆盖的像素
  • 基于材质属性和光照计算每个像素的颜色

光栅化效率高,是游戏和交互应用中实时图形的基础。

光线追踪 (Ray Tracing)

模拟光的物理行为的技术:

  • 从相机通过每个像素投射光线
  • 计算与场景几何的交点
  • 递归跟踪反射、折射和阴影光线

光线追踪产生更物理准确的图像,但传统上计算成本更高。

3D 高斯溅射采用混合方法:它将每个 3D 高斯视为可以通过投影到屏幕上的椭圆来光栅化的基元,然后沿每条光线混合贡献,类似于光线追踪体积。实际上,它执行一种溅射光栅化,其中连续的高斯斑点以透明度绘制并按正确的从后到前的顺序组合。这种方法利用了光栅化的速度(通过快速绘制许多点),同时实现了光线追踪体积积分的质量(通过 alpha 混合累积贡献)。

2.5 Alpha 混合与合成

渲染透明或半透明对象时,使用 alpha 混合来组合颜色:

Cfinal=αsrc⋅Csrc+(1−αsrc)⋅CdstC_{final} = \alpha_{src} \cdot C_{src} + (1 - \alpha_{src}) \cdot C_{dst}Cfinal=αsrcCsrc+(1αsrc)Cdst

其中:

  • CsrcC_{src}Csrc 是源颜色(新片段)
  • CdstC_{dst}Cdst 是目标颜色(现有像素)
  • αsrc\alpha_{src}αsrc 是源的不透明度(0 = 透明,1 = 不透明)

这个"over"操作符是按正确顺序合成多个透明元素的基础。在渲染一组半透明元素(如高斯溅射或体积样本)时,目标是计算像素颜色,就像光穿过元素一样,在传播过程中拾取颜色并衰减。

从前到后渲染的合成方程:

Cout=C0+C1(1−α0)+C2(1−α0)(1−α1)+…C_{\text{out}} = C_{0} + C_{1}(1-\alpha_{0}) + C_{2}(1-\alpha_{0})(1-\alpha_{1}) + \dotsCout=C0+C1(1α0)+C2(1α0)(1α1)+

这里每一层(0,1,2,…)都有颜色 C 和不透明度 α,层按从近到远排序。最近层贡献其全部颜色 C₀,按其不透明度 α₀ 加权。下一层的贡献 C₁ 被 (1-α₀) 减少意味着它只在未被第一层遮挡的部分贡献,以此类推。

连续形式(体积渲染):沿光线看到的颜色可以写成衰减辐射度的积分:

I=∫0LT(t) σ(t) c(t) dt,其中T(t)=exp⁡ ⁣(−∫0tσ(s)ds)I = \int_{0}^{L} T(t)\, \sigma(t)\, c(t)\, dt, \quad \text{其中} \quad T(t) = \exp\!\Big(-\int_{0}^{t} \sigma(s) ds\Big)I=0LT(t)σ(t)c(t)dt,其中T(t)=exp(0tσ(s)ds)

其中 σ(t)\sigma(t)σ(t) 是沿光线距离 ttt 处的密度(单位长度不透明度),c(t)c(t)c(t) 是该点的颜色或辐射度,T(t)T(t)T(t) 是到该点的累积透明度(透射率)。

这是 NeRF 等辐射场方法使用的体积渲染方程。高斯溅射遵循与 NeRF 相同的图像形成模型,意味着它使用等效于该体积渲染积分的方式混合贡献,但以离散方式通过对沿光线的许多高斯"粒子"求和来实现。


三、新视角合成的演进 (The Evolution of Novel View Synthesis)

新视角合成是从有限输入图像生成场景新视角的任务。这个领域多年来经历了巨大发展。

3.1 基于图像的渲染 (Image-Based Rendering)

早期的新视角合成方法专注于在捕获图像之间插值:

光场 (Light Fields)(Levoy & Hanrahan, 1996)

  • 将场景表示为光线的 4D 函数
  • 需要密集的视点采样

Lumigraph(Gortler et al., 1996)

  • 结合稀疏几何信息与密集图像采样
  • 仍然需要大量数据

非结构化 Lumigraph (Unstructured Lumigraph)(Buehler et al., 2001)

  • 通过利用网格代理处理稀疏视图输入
  • 一种基于图像的渲染方法

这些方法需要密集的视点采样,限制了实际应用。它们存储许多输入视图并在它们之间插值。

3.2 运动恢复结构与多视图立体

为了解决纯基于图像方法的局限性,研究人员开发了恢复 3D 结构的技术:

运动恢复结构 (Structure-from-Motion, SfM)

  • 从多张图像恢复相机位姿和稀疏 3D 点云
  • 随着捕获几何变得更容易,方法产生了场景的点云或网格
  • 实现了几何基础的视图合成

多视图立体 (Multi-View Stereo, MVS)

  • 稠密化稀疏点云以创建更完整的 3D 模型

这些经典的计算机视觉方法提供了更多的几何理解,但通常难以处理复杂的材质和光照效果。

3.3 点基渲染

点基渲染作为一种简单方式出现,用于渲染以点云捕获的场景(例如来自 MVS 或深度传感器)而无需网格连接。然而,朴素点渲染显示间隙和锯齿。2000 年代的研究引入了溅射——将每个点渲染为圆盘或高斯斑点(如果有法线和纹理也称为 surfel)以覆盖孔洞并平滑结果。

重要发展包括:

  • Surfels(Pfister et al., 2000):作为扫描表面的渲染基元引入
  • EWA 表面溅射(Zwicker et al., 2001):开发用于正确过滤和混合屏幕上的点贡献

这些为用粒子云而不是连接三角形表示场景奠定了基础。

3.4 神经渲染

深度学习的出现引发了新一波新视角合成研究:

神经点基图形 (Neural Point-Based Graphics, NPBG)(Aliev et al., 2020)

  • 将点云与学习的神经描述符结合以提高保真度

神经辐射场 (Neural Radiance Fields, NeRF)(Mildenhall et al., 2020)

  • 表明优化 MLP 来表示体积密度和颜色可以产生逼真的新视角

NeRF 标志着范式转变,将场景表示为由神经网络建模的连续函数:

FΘ(x,d)↦(c,σ)F_\Theta(x, d) \mapsto (c, \sigma)FΘ(x,d)(c,σ)

其中:

  • x∈R3x \in \mathbb{R}^3xR3 是 3D 位置
  • ddd 是观察方向
  • c∈R3c \in \mathbb{R}^3cR3 是发射颜色(RGB)
  • σ∈R\sigma \in \mathbb{R}σR 是体积密度

NeRF 使用沿相机光线的体积积分渲染图像,为新视角合成实现了前所未有的质量。然而,由于需要沿每条光线为许多点评估神经网络,渲染时间较慢。

3.5 加速神经场

NeRF 引发了一场革命:接下来几年出现了许多改进质量和速度的变体:

Mip-NeRF 和 Mip-NeRF 360(Barron et al., 2021, 2022)

  • 解决锯齿和无界场景问题

Plenoxels(Fridovich-Keil et al., 2022)

  • 移除神经网络,优化显式体素网格的密度和颜色

Instant NGP(Müller et al., 2022)

  • 使用多分辨率哈希网格编码大幅加速训练和渲染

这些基于体素的辐射场实现了快速训练,但仍面临内存-分辨率权衡,并且在光线行进期间需要插值。


四、3D 高斯溅射:方法的融合

3D 高斯溅射(Kerbl et al., 2023)可以被视为这些方向的融合。它带回了显式点基表示(像经典的 surfel 思想),但赋予其体积渲染原理(像 NeRF 的 alpha 混合)。关键在于,它通过梯度下降原地优化场景,类似于神经场,使其成为可微的点基表示。

结果是一种可以像最快辐射场方法一样快速训练(数分钟)的方法,但可以实时渲染,质量可与较慢的神经网络相媲美。这弥合了神经和点基新视角合成之间的差距:数百万个微小的高斯基元被优化以重现输入图像,以前所未有的速度实现最先进的新视角合成结果。


五、点基渲染详解 (Point-Based Rendering)

5.1 点云及其挑战

点云提供了 3D 几何的简单灵活表示:

  • 每个点在 3D 空间中有位置和可选属性(颜色、法线等)
  • 没有显式连接信息(与网格不同)
  • 可以直接从 LiDAR 等传感器获取或从 MVS 推导

然而,渲染原始点云存在挑战:

  • 点之间的间隙可能导致孔洞或伪影
  • 点大小没有固有定义
  • 处理遮挡需要仔细排序

5.2 溅射概念

溅射通过将每个点表示为小表面元素或"溅射"来解决这些挑战:

  • 将每个 3D 点投影到图像平面
  • 将每个点渲染为小 2D 足迹(圆盘或椭圆)
  • 混合这些足迹形成连续表面

每个溅射的大小和形状可以根据局部密度、观察角度和表面属性进行调整。

5.3 椭圆加权平均 (EWA) 滤波

EWA 滤波由 Zwicker et al. (2001) 引入,提高了点基渲染质量:

  • 将每个点表示为 3D 高斯椭球
  • 将此高斯投影到图像平面,产生 2D 高斯椭圆
  • 应用滤波防止锯齿
  • 混合滤波后的足迹创建最终图像

这种方法提供:

  • 对象空间中的 3D 高斯核投影到屏幕空间
  • 投影核与低通滤波器组合防止锯齿
  • 此组合滤波函数(EWA 滤波器)用于每个溅射的贡献

5.4 可微点基渲染

最近的进展使点基渲染可微,允许通过反向传播优化点属性:

可微表面溅射(Wang et al., 2019)

  • 使溅射管线可微,允许梯度流回点位置和属性

神经点基图形 (Neural Point-Based Graphics)(Aliev et al., 2020)

  • 将传统点渲染与神经网络结合

ADOP(Rückert et al., 2022)

  • 提供近似可微单像素点渲染方法

Pulsar(Lassner & Zollhöfer, 2021)

  • 创建高效的基于球的神经渲染方法

这些方法为像 3D 高斯溅射这样的学习型方法奠定了基础,通过提供可微渲染,可以计算关于点属性的梯度。


六、3D 高斯溅射核心原理

6.1 关键洞察:统一点与体积

3D 高斯溅射的基本洞察是:

  1. 体积渲染(如 NeRF)和点溅射的 alpha 混合遵循相同的数学模型
  2. 通过用 3D 高斯集合而不是神经网络表示场景,可以高效执行渲染
  3. 高斯表示是可微的,允许通过梯度下降优化

这种统一视角实现了具有实时性能的高质量渲染。

6.2 3D 高斯作为场景基元

在 3D 高斯溅射中,每个场景元素表示为各向异性 3D 高斯:

G(x)=exp⁡(−12(x−μ)TΣ−1(x−μ))G(x) = \exp\left(-\frac{1}{2}(x-\mu)^T \Sigma^{-1} (x-\mu)\right)G(x)=exp(21(xμ)TΣ1(xμ))

其中:

  • μ∈R3\mu \in \mathbb{R}^3μR3 是中心(均值位置)
  • Σ∈R3×3\Sigma \in \mathbb{R}^{3 \times 3}ΣR3×3 是协方差矩阵,定义高斯的形状和方向
  • 各向同性高斯:Σ=σ2I\Sigma = \sigma^2 IΣ=σ2I(球体)
  • 各向异性高斯:Σ\SigmaΣ 可表示任意椭球

每个高斯还携带:

  • 不透明度参数:控制对最终图像的贡献
  • 颜色信息:可以是恒定 RGB 值,或通过球谐函数实现视角相关

3D 中的高斯是由均值(中心位置)和协方差矩阵(描述各方向的空间范围)定义的函数。协方差矩阵 Σ\SigmaΣ 是对称半正定的。我们可以将 Σ\SigmaΣ 解释为定义椭球表面,其中 (x−p)TΣ−1(x−p)=1(\mathbf{x}-\mathbf{p})^T \Sigma^{-1} (\mathbf{x}-\mathbf{p}) = 1(xp)TΣ1(xp)=1Σ\SigmaΣ 的特征值给出椭球主轴长度的平方,特征向量给出这些轴的方向。

6.3 体积渲染方程

体积渲染方程通过沿相机光线积分贡献来计算像素颜色:

C(r)=∫tmintmaxT(t)⋅σ(r(t))⋅c(r(t),d) dtC(r) = \int_{t_{min}}^{t_{max}} T(t) \cdot \sigma(r(t)) \cdot c(r(t), d) \, dtC(r)=tmintmaxT(t)σ(r(t))c(r(t),d)dt

其中:

  • r(t)=o+t⋅dr(t) = o + t \cdot dr(t)=o+td 是光线上的位置
  • T(t)=exp⁡(−∫tmintσ(r(s)) ds)T(t) = \exp\left(-\int_{t_{min}}^{t} \sigma(r(s)) \, ds\right)T(t)=exp(tmintσ(r(s))ds) 是透射率
  • σ(r(t))\sigma(r(t))σ(r(t)) 是位置 r(t)r(t)r(t) 处的密度
  • c(r(t),d)c(r(t), d)c(r(t),d) 是从方向 ddd 观察位置 r(t)r(t)r(t) 的颜色

在实践中,此积分近似为离散求和:

C≈∑i=1NTi⋅(1−e−σiδi)⋅ciC \approx \sum_{i=1}^{N} T_i \cdot (1 - e^{-\sigma_i \delta_i}) \cdot c_iCi=1NTi(1eσiδi)ci

其中:

  • Ti=∏j=1i−1(1−αj)T_i = \prod_{j=1}^{i-1} (1 - \alpha_j)Ti=j=1i1(1αj),其中 αj=1−e−σjδj\alpha_j = 1 - e^{-\sigma_j \delta_j}αj=1eσjδj
  • δi\delta_iδi 是相邻样本之间的距离

重要洞察:高斯溅射使用与 NeRF 和其他辐射场相同的光学模型。即,它假设相机看到的颜色是发射辐射度乘以透明度的积分。不考虑阴影或全局光照;每个高斯独立贡献于与其相交的光线。

6.4 高斯的 Alpha 合成

在 3D 高斯溅射中,使用高斯溅射的 alpha 合成实现相同的渲染方程:

C=∑i=1N(∏j=1i−1(1−αj))αiciC = \sum_{i=1}^{N} \left(\prod_{j=1}^{i-1}(1-\alpha_j)\right) \alpha_i c_iC=i=1N(j=1i1(1αj))αici

其中:

  • 高斯按从前到后排序
  • αi\alpha_iαi 源自高斯的不透明度及其投影的 2D 足迹
  • cic_ici 是高斯的颜色(可能视角相关)
  • ∏j=1i−1(1−αj)\prod_{j=1}^{i-1}(1-\alpha_j)j=1i1(1αj) 考虑了更近高斯的遮挡

Alpha 合成与许多高斯遵循 alpha 混合部分描述的相同规则。然而,一个挑战是可能有数百万个高斯,它们不像图层那样按简单方式排序。为了正确渲染,我们需要:

  1. 将所有高斯投影到 2D(获取其椭圆足迹和有效的逐像素 alpha 掩码)
  2. 按深度(与相机的距离)对所有这些"溅射"排序
  3. 将它们从后到前(最远的优先)或从前到后混合到图像中

对于从前到后的合成(数值稳定且易于增量实现):

Caccum←Caccum+(1−αaccum) αi CiC_{\text{accum}} \leftarrow C_{\text{accum}} + (1 - \alpha_{\text{accum}})\, \alpha_i\, C_iCaccumCaccum+(1αaccum)αiCi
αaccum←αaccum+(1−αaccum) αi\alpha_{\text{accum}} \leftarrow \alpha_{\text{accum}} + (1 - \alpha_{\text{accum}})\, \alpha_iαaccumαaccum+(1αaccum)αi

其中 CaccumC_{\text{accum}}Caccumαaccum\alpha_{\text{accum}}αaccum 是运行累积颜色和不透明度,Ci,αiC_i,\alpha_iCi,αi 是下一个溅射的颜色和不透明度。


七、3D 高斯溅射的数学公式

7.1 将 3D 高斯投影到 2D

渲染时,每个 3D 高斯投影为图像平面上的 2D 椭圆溅射:

投影公式

中心 μ\muμ 使用相机投影矩阵投影到图像。3D 协方差 Σ\SigmaΣ 变换为图像空间中的 2D 协方差 Σimg\Sigma_{img}Σimg

Σimg=J⋅W⋅Σ⋅WT⋅JT\Sigma_{img} = J \cdot W \cdot \Sigma \cdot W^T \cdot J^TΣimg=JWΣWTJT

其中:

  • WWW 是视图变换矩阵
  • JJJ 是投影在高斯中心处的雅可比矩阵

产生的 2D 高斯定义了溅射在图像上的形状和范围。

详细推导

将 3D 高斯投影到图像平面产生屏幕空间中的 2D 高斯(椭圆)。然而,因为相机使用透视投影(不是线性映射),精确投影高斯是非平凡的。常见方法是将透视变换在局部近似为围绕高斯中心的仿射变换。这产生协方差的线性映射。

让我们在简化场景中推导 3D 高斯协方差到屏幕(图像)平面的投影公式。假设我们有一个针孔相机。让一个 3D 高斯具有世界协方差 Σ\SigmaΣ。我们想要图像投影的协方差。

步骤 1:变换到相机坐标。对高斯应用刚体变换(相机姿态的旋转 RcR_cRc 和平移 tct_ctc)。在线性近似中,相机帧中的协方差(投影前)是 Σc=RcΣRcT\Sigma_c = R_c \Sigma R_c^TΣc=RcΣRcT(我们对协方差忽略平移)。这将高斯与相机的视图轴对齐。

步骤 2:投影到图像。对于正交相机(无透视缩短),投影只是去掉 z 坐标,实际上图像上的协方差是 Σc\Sigma_cΣc 的左上 2x2 块。对于透视相机,我们考虑深度 ZZZ 处的对象点以比例 f/Zf/Zf/Z 投影(其中 fff 是焦距)。如果高斯有小范围,我们围绕深度 Z0Z_0Z0(高斯中心的深度)线性化。

步骤 3:简化使用。最终使用的结果是:

Σ′=JW Σ WTJT\Sigma' = J W\, \Sigma\, W^T J^TΣ=JWΣWTJT

其中 Σ′\Sigma'Σ 是相机坐标中的 3×33\times33×3 矩阵,然后使用左上 2×22\times22×2 块作为图像协方差。

关键要点是各向异性 3D 高斯在图像中保持各向异性——通常是椭圆。公式提供了一种从 3D 参数计算该椭圆形状的方法。我们可以因此将每个高斯光栅化为具有适当大小的定向椭圆。

7.2 3D 高斯的参数化

为确保高斯表示在优化过程中保持有效,协方差矩阵 Σ\SigmaΣ 参数化为:

Σ=R⋅S⋅ST⋅RT\Sigma = R \cdot S \cdot S^T \cdot R^TΣ=RSSTRT

其中:

  • RRR 是旋转矩阵(通常表示为四元数)
  • SSS 是具有条目 sx,sy,szs_x, s_y, s_zsx,sy,sz 的对角缩放矩阵

这种分解保证 Σ\SigmaΣ 在整个优化过程中保持半正定。

直接优化潜在数百万高斯的 3×33\times33×3 协方差矩阵 Σ\SigmaΣ 是棘手的,因为我们必须确保每个 Σ\SigmaΣ 保持有效(对称半正定)。梯度下降可能轻易将某个矩阵推向非 PSD,导致高斯无效(例如,某方向负方差)。

这种参数化确保任何参数组合产生有效协方差(因为 RRR 是正交的,SSTS S^TSST 是半正定的)。在优化期间,每次梯度更新后对表示 RRR 的四元数进行归一化以保持有效旋转。

7.3 视角相关外观

为了建模像高光这样的视角相关效果,每个高斯可以使用球谐函数将颜色编码为观察方向的函数:

c(d)=∑l=0L∑m=−llclmYlm(d)c(d) = \sum_{l=0}^{L} \sum_{m=-l}^{l} c_{lm} Y_{lm}(d)c(d)=l=0Lm=llclmYlm(d)

其中:

  • Ylm(d)Y_{lm}(d)Ylm(d) 是球谐基函数
  • clmc_{lm}clm 是系数(通常使用到 2 阶,每个颜色通道产生 9 个系数)

这允许每个高斯从不同角度观察时呈现不同颜色,类似于 NeRF 的视角相关建模。

7.4 可微渲染方程

3D 高斯溅射的一个主要优势是渲染过程被做成可微的,以便可以使用基于梯度的优化来调整高斯以拟合输入图像。

将渲染关于高斯参数微分意味着计算最终像素颜色关于每个高斯位置、协方差、颜色和不透明度的偏导数。

渲染函数可以表示为产生图像 IIII=R({pi,Σi,ci,αi})I = R(\{p_i, \Sigma_i, c_i, \alpha_i\})I=R({pi,Σi,ci,αi})。我们有损失 L=∑pixels∥I−Itarget∥2L = \sum_{\text{pixels}} \|I - I_{\text{target}}\|^2L=pixelsIItarget2。梯度 ∂L∂pi\frac{\partial L}{\partial p_i}piL 指示移动高斯 iii 如何影响损失,Σi\Sigma_iΣi 等类似。

简而言之,因为每个高斯对图像的影响是平滑连续的(由于高斯函数),渲染关于高斯参数是可微的。梯度告诉我们如何调整每个高斯以减少重建误差。

高斯溅射的可微渲染方程确保人们可以从初始猜测(例如一组稀疏高斯)开始,通过迭代优化(梯度下降)收敛到准确的场景模型。


八、训练与优化

3D 高斯溅射管线通过端到端优化所有高斯的参数来匹配一组输入照片。

8.1 光度损失

训练使用比较渲染图像与真实照片的光度损失:

L(θ)=(1−λ)⋅L1+λ⋅LD−SSIML(\theta) = (1 - \lambda) \cdot L_1 + \lambda \cdot L_{D-SSIM}L(θ)=(1λ)L1+λLDSSIM

其中:

  • L1=∥Irender−Igt∥1L_1 = \|I_{render} - I_{gt}\|_1L1=IrenderIgt1(渲染图像与真实图像之间的 L1 距离)
  • LD−SSIM=1−SSIM(Irender,Igt)L_{D-SSIM} = 1 - SSIM(I_{render}, I_{gt})LDSSIM=1SSIM(Irender,Igt)(结构相似性项)
  • λ\lambdaλ 是权重因子(通常为 0.2)
  • θ\thetaθ 代表所有高斯参数

8.2 初始点云

训练通常从运动恢复结构(SfM)生成的稀疏点云开始:

  • SfM 重建中的每个点成为初始 3D 高斯
  • 通过优化精炼这些高斯参数
  • 根据需要添加新高斯
  • 最终模型可能包含数百万个优化后的高斯

这种方法能够从最少的图像集进行重建,无需密集 MVS 重建或额外输入。

8.3 优化过程

3D 高斯溅射的优化过程涉及调整数百万参数(每个高斯的位置 pip_ipi、不透明度 αi\alpha_iαi、协方差 Σi\Sigma_iΣi 和颜色 cic_ici),使渲染图像匹配输入照片。这是通过最小化渲染图像与真实图像之间的重建损失来完成的,对每个训练视图求和。

迭代优化:方法使用梯度下降(或 Adam 优化器等变体)更新高斯参数。因为每个高斯对每个像素的影响是可微的,他们可以通过从每个输入视图渲染当前估计、与实际图像比较并反向传播来累积梯度。

在每个梯度步骤中,对于每个高斯,他们计算如果该高斯参数改变,图像误差如何变化——这使用推导的解析梯度高效完成。例如,关于位置的梯度将考虑溅射位置处的图像梯度(差异),本质上是将高斯推向图像表明其应该在的位置。

优化过程迭代进行:渲染 → 计算损失 → 计算梯度 → 更新高斯。这持续到误差收敛。在此过程中,他们还执行自适应密度控制,添加或移除高斯以改善拟合。

8.4 可微溅射管线

整个渲染管线是可微的,允许关于所有高斯参数计算梯度:

  • 位置梯度:改变高斯位置如何影响图像
  • 协方差梯度:改变高斯形状如何影响图像
  • 不透明度梯度:改变高斯不透明度如何影响图像
  • 颜色梯度:改变高斯颜色如何影响图像

这些梯度用于通过梯度下降(通常使用 Adam 优化器)更新参数。

8.5 自适应密度控制

一个重要说明:与需要特殊处理远距离几何体的其他方法(Mip-NeRF 翘曲空间,或 Plenoxels 需要八叉树分配远距离体素)不同,高斯溅射的高斯保持在欧几里得空间中,无需额外翘曲。自适应控制自然地用所需数量的高斯覆盖空间。场景的远距离部分可能只是获得更多高斯(如果需要),而不是压缩它们。

密集化操作:在需要的地方添加高斯

  • 分裂:误差高的大高斯被分裂成更小的高斯
  • 克隆:误差高的小高斯被克隆(复制并略微偏移)

修剪操作:移除贡献可忽略的高斯(非常低的不透明度)

此过程允许表示适应场景的复杂性,在详细区域分配更多高斯,在简单区域分配更少。

整体优化算法交替进行:

  1. 参数更新:标准梯度下降更新现有高斯参数
  2. 密度控制:定期调整高斯的数量和分布

九、实现与实时渲染

高效实现对于用 3D 高斯溅射实现实时性能至关重要。

9.1 分块渲染

为实现实时性能,3D 高斯溅射使用分块方法:

将屏幕划分为分块(如 16×16 像素)。对每个分块:

  • 确定哪些高斯与其重叠
  • 按深度对这些高斯排序
  • 从前到后渲染

这将排序局部化到小批高斯,大幅减少计算开销。朴素方法对每个像素考虑每个高斯会太慢。分块渲染利用场景和图像中的空间一致性。

9.2 快速排序策略

需要排序是因为正确的 alpha 混合需要定义的顺序(通常从远到近或从近到远)。实现使用高度优化的 GPU 排序算法(如使用 CUDA 的并行基数排序或归并排序)。一旦每个分块剔除高斯,每个分块的列表按深度排序(高斯中心深度,或可能是高斯最前面点的深度——但如果高斯相对于深度变化较小,中心可能就足够了)。

在 GPU 上对数千项排序非常快(现代 GPU 可以在几毫秒内排序数百万个数)。而且因为可以分块并行(每个分块并行排序),总体复杂度可控。

渲染器是可见性感知的,意味着它通过排序考虑遮挡。它也避免了对获得梯度的溅射数量的"硬限制",这意味着排序+合成方法可以处理任意数量的重叠高斯而不设上限(不像一些先前方法)。

每分块排序后,渲染器然后按深度顺序将该分块的像素光栅化高斯溅射。光栅化意味着绘制 2D 高斯(椭圆)形状。这可以实现为绘制纹理精灵(点溅射)或绘制屏幕对齐四边形并在片段着色器中评估高斯方程以获取覆盖率和 alpha。

为确保效率,实现可能使用着色器程序或 CUDA 内核处理每个高斯并输出到像素。每个高斯一次朴素绘制调用会太慢(数百万次绘制调用)。相反,他们可能使用单个计算着色器处理分块中的所有高斯并使用原子操作或混合写入分块缓冲区。

9.3 GPU 加速光栅化

所有渲染步骤都在 GPU 上实现以实现实时性能:

高斯内存:存储多达 500 万高斯,每个有位置(3 个浮点)、旋转(四元数,4 个浮点)、缩放(3 个浮点)、颜色(如 9 个 SH 系数 × 3 通道 = 27 个浮点)、不透明度(1 个浮点)可能加起来。例如,如果每个高斯有约 40 个浮点,500 万高斯 = 2 亿浮点,即 800 MB(如果每个 4 字节)。他们可能会压缩一些(例如,颜色 SH 可能只有 1 阶或 2 阶,或以半精度存储)。

空间数据结构:分块剔除本质上是一种空间索引。对于渲染,他们可能将高斯预分桶到某种空间网格或树中以快速获取每个分块中的高斯。在训练期间,高斯移动,所以他们可能动态但高效地更新分块分配。

并行光栅化:现代 GPU 支持以可编程大小绘制点,但各向异性高斯(旋转椭圆)可能需要自定义方法:要么将每个高斯渲染为小三角网格(如定向广告牌四边形),要么使用计算内核。

光栅化器每个像素有恒定开销和低内存消耗,这表明他们不为每个像素分配大数组(一些先前方法有每个像素的溅射列表)。他们可能即时混合,所以内存使用只是最终图像和可能小的深度缓冲区等。

实现还支持各向异性溅射和渲染中的快速反向传播。对于反向传播,他们可能存储最少信息以计算梯度,可能保持哪个高斯贡献哪个像素的记录或在反向传播期间类似正向重新计算但累积梯度而不是颜色。

9.4 内存考虑

3D 高斯溅射的内存占用取决于:

  • 高斯数量(复杂场景通常为 1-500 万)
  • 每个高斯的参数(位置、旋转、缩放、颜色、不透明度)

典型场景可能需要数百 MB 内存,这在现代 GPU 上是可控的。该方法声称最终场景的实时渲染(1080p 下 ≥ 30 fps),考虑到复杂性这是非凡的。

速度优化包括:

  • 分块剔除减少片段着色器工作
  • 并行排序
  • 控制混合
  • 在 CUDA 中精心使用共享内存和 warp 同步编程处理每个分块的合成

该方法还在训练期间利用速度,通过即时从随机新视点渲染场景来计算损失,这也加速了训练过程。


十、与其他方法的对比

10.1 NeRF vs 3D 高斯溅射

神经辐射场(NeRF)和 3D 高斯溅射最终都将场景表示为颜色和密度的体积场,但实现截然不同:

表示 (Representation)

  • NeRF 将场景编码在神经网络权重中(通常是 MLP),给定 3D 坐标(和观察方向),输出颜色和密度。这是连续隐式表示。
  • 高斯溅射使用显式基元列表(高斯),每个存储显式参数。

渲染 (Rendering)

  • NeRF 使用光线行进——沿每条光线采样许多点并查询网络的密度和颜色,然后合成。这可以产生高质量结果但慢,因为需要许多网络评估。
  • 高斯溅射使用基元光栅化——没有繁重的每样本计算,只是已存储颜色的混合。这在渲染时间上快几个数量级。

训练速度 (Training Speed)

  • 原始 NeRF 训练慢(小时到天),因为需要优化许多网络权重并重复采样所有光线。许多改进(InstantNGP, Plenoxels)加速了这一点。
  • 高斯溅射训练非常快(场景只需分钟),因为它直接优化相对较少的参数(数百万高斯 vs 数百万网络权重,但通常数量相似)并在循环中使用高效渲染。

质量和泛化 (Quality and Generalization)

  • 有足够容量的 NeRF 通常可以为特定场景实现略高的峰值质量。
  • 然而,最近结果表明,对于捕获的场景,高斯溅射可以实现与最先进 NeRF 变体相当甚至更优的质量。
方面神经辐射场3D 高斯溅射
表示隐式(神经网络)显式(3D 高斯集合)
训练时间数小时到数天数分钟
渲染速度秒/帧30-135 FPS(实时)
内存使用低(网络权重)中等(数百万高斯)
质量
可编辑性有限(隐式)高(显式基元)

10.2 体素表示 vs 高斯

基于体素的辐射场(如 Plenoxels, DVGO 或 Neural Volumes)将空间离散化为 3D 网格。每个单元存储密度和可能的视角相关颜色。渲染是通过网格的光线行进,三线性插值数值。

内存 (Memory)

  • 如果到处都需要高分辨率,体素网格可能非常消耗内存。稀疏体素技术在需要的地方分配更多体素并剪除空空间,但对于大场景,内存可能爆炸或需要多层网格。
  • 高斯溅射对大空区域更节省内存。

粒度 (Granularity)

  • 体素提供固定分辨率(每个体素大小)。小于体素的特征无法表示,除非进一步细分。
  • 高斯是连续的,可以有任意小的协方差来表示精细特征。

渲染速度 (Rendering Speed)

  • 密集体素网格即使在空空间也需要采样许多步(除非使用八叉树或占用网格跳过空单元)。
  • 高斯天生跳过空空间——没有高斯,无需渲染。
方面体素网格(如 Plenoxels)3D 高斯溅射
自适应性受网格分辨率限制高度自适应(密度变化)
内存效率低(存储空空间)高(集中在表面)
渲染速度中到高非常高
细节表示受网格分辨率限制可表示精细细节

10.3 传统点基渲染 vs 高斯溅射

传统点基渲染(PBR)渲染以点云捕获的场景(如来自 MVS 或深度传感器)无需网格连接,常用于从现实世界扫描获取的模型。2000 年代的研究引入了溅射——将每个点渲染为圆盘或高斯斑点(如果有法线和纹理也称为 surfel)以覆盖孔洞并平滑结果。

渲染算法

  • 像 Surfels(Pfister 2000)或 EWA 表面溅射(Zwicker 2001)这样的传统 PBR 会在单次传递中将每个点作为圆盘投影到屏幕上,与邻居混合以填充孔洞。
  • 高斯溅射将所有高斯视为潜在半透明,并按深度顺序用 alpha 混合渲染它们。

可微性和优化

  • 传统点渲染将点视为给定而不移动它们。
  • 高斯溅射将渲染集成到优化循环中以调整点。

溅射形状

  • 经典溅射常使用根据表面法线定向的圆或椭圆。
  • 高斯溅射的溅射不完全由表面法线定向(它们甚至不显式存储法线),但协方差可以有效与局部表面方向对齐。
方面传统点基渲染3D 高斯溅射
点表示圆盘或简单溅射各向异性 3D 高斯
视角相关效果有限通过球谐函数支持
质量中等
可微性不总是完全可微
自适应密度固定动态(分裂/剪枝)

十一、应用与扩展

11.1 静态场景重建

3D 高斯溅射的主要应用是用于新视角合成的静态场景重建。给定场景的一组图像(通过运动恢复结构已知相机位姿),可以使用高斯溅射重建场景外观,以便可以高质量渲染新视角。

这使其成为 NeRF 在以下任务中的直接替代:

  • 虚拟旅游
  • 文化遗产保护
  • 建筑可视化
  • VR/AR 内容创建

由于其快速训练,该方法适用于周转时间重要的场景(例如,电影制作中的片场重建,或用手机快速扫描环境并在几分钟内获得 3D 模型)。它实现实时渲染意味着重建模型可以直接用于交互应用、VR/AR 或视频游戏,无需在运行时进行繁重的神经网络推理。

11.2 动态场景捕获

处理动态场景的扩展包括:

  • 可变形高斯:添加变形场随时间翘曲高斯
  • 4D 高斯:将表示扩展为包括时间作为第四维度
  • 动态 3D 高斯:通过序列跟踪高斯的运动

这些方法实现动态内容(如运动中的人物)的高质量重建和渲染。完全的 4D 高斯表示中,每个高斯实际上是时空中的高斯(具有 3D 空间和时间中的均值位置,以及可能跨越时间的协方差)。

11.3 虚拟人物创建与动画

3D 高斯溅射可以与参数化人体模型如 SMPL 结合:

  • 使用 SMPL 作为人体形状和姿态的模板
  • 优化高斯以匹配特定人物的外观
  • 通过将运动传递到底层骨架来动画化高斯

这创建具有高视觉保真度的可动画虚拟人物,用于虚拟现实、游戏和数字通信应用。

11.4 与神经渲染的集成

高斯溅射可以以多种方式与神经网络集成:

  • 神经精炼:在高斯溅射渲染后,可以将渲染图像输入神经超分辨率或精炼网络以增强细节或一致性
  • 混合模型:可以将高斯用作神经管线内的中间表示。例如,神经网络可以从输入图像预测高斯参数(而不是优化它们)
  • 神经着色:高斯溅射目前使用简单 SH 光照。可以加入小型神经网络,给定观察方向和可能其他特征为每个高斯输出着色乘数
  • 特征集成:高斯可以不仅携带颜色还携带特征向量,由网络处理产生最终像素颜色

一个有趣的集成是使用高斯作为 NeRF 的初始猜测或反之亦然。由于高斯溅射快,可以快速获得不错的模型,然后可能将其蒸馏到 NeRF 网络中以实现可移植性或编辑。

11.5 大规模场景渲染

大规模场景(整个城市街区或森林)在表示和渲染方面提出挑战。高斯溅射可以处理无界场景,但扩展到真正的大规模场景可能需要额外策略:

场景分块:就像图像分块一样,可以将场景空间划分为区域(八叉树或网格单元)。每个区域包含一部分高斯。可以快速剔除完全在视野外的整个区域,只将可见区域的高斯流式传输到 GPU。

细节层次 (LOD):对于远距离,可能不需要所有高斯。可能可以将一些合并为单个高斯以减少数量。

核外管理:如果场景太大以至于数百万高斯无法放入内存,可以基于相机加载和卸载部分。由于每个高斯独立,可以从磁盘加载块(使用某种空间索引)。

一个值得注意的扩展是 GaussianPro(Cheng et al., 2024)。它专门解决了 SfM 初始化在无纹理区域失败的问题,导致那里高斯不足和重建差。他们引入了渐进传播使用 patch-match 立体线索在这些区域添加高斯。这改善了大室内/外场景的质量。

11.6 BG-Triangle(贝塞尔高斯三角形)

标准 3DGS 的一个限制是其倾向于模糊高频细节,特别是沿清晰对象边缘。因为高斯溅射重叠并具有平滑径向轮廓,表示硬边缘或表面边界需要许多微小高斯,即使这样边缘可能看起来略微柔和。

BG-Triangle 方法通过引入混合基元来解决此问题,该基元结合高斯溅射与参数化曲面片以保留不连续性:

表示

  • BG-Triangle 由形成贝塞尔曲面片的一组控制点定义(贝塞尔三角形是由控制点定义的曲面,将贝塞尔曲线推广到 2D 域)。
  • 此曲面片可以建模连续表面积。
  • 伴随此,BG-Triangle 存储属性图(类似纹理),编码整个表面的颜色和可能的更精细细节。
  • 关键思想是三角形的内部仍可以通过溅射子基元渲染,但三角形的边缘作为可微不连续性,防止跨边界模糊。

性能

  • 通过拟合矢量式曲面基元,BG-Triangle 大幅减少表示场景所需的基元数量,同时保持或改善视觉质量。
  • 报告显示 BG-Triangle 在标准基准上实现了与 3DGS 相当的误差度量,但使用更少基元并产生更清晰的新视角边缘。
  • 例如,在 NeRF Synthetic 数据集的特写视图中,BG-Triangle 渲染对象边界清晰,而高斯溅射产生略微模糊或溅射痕迹。
  • BG-Triangle 的边界保持优势明显:如所述,BG-Triangle 甚至可能因抗锯齿而在某些缩放级别显得比真实更清晰,而 3DGS 显得更模糊。

11.7 人物重建与先验

建模人物主体,特别是从稀疏相机视图,是一个具有挑战性的任务,高斯溅射最近取得了进展。人体呈现复杂的关节几何和服装,纯隐式或点基方法难以在不同人物和姿态之间泛化。

最近的方法利用人物先验——如参数化身体模型(SMPL/SMPL-X)或学习的形状空间——结合辐射场或溅射技术来改善新视角渲染的质量和速度。

EG-HumanNeRF

EG-HumanNeRF(Wang et al., 2024)是一个 NeRF 式管线,通过大量结合参数化身体先验实现人物场景的实时渲染。虽然本身不是高斯溅射方法,但它直接解决了许多 GS 方法相同的场景设置(人物快速新视角合成),并在显式溅射和高效神经渲染之间提供有用比较。

关键思想包括:

  1. 使用拟合的 SMPL-X 身体网格作为粗几何先验指导采样
  2. 通过两阶段采样策略减少光线样本,首先让光线与身体周围的膨胀"边界网格"相交(跳过空空间),然后只在表面附近采样少量点进行体积渲染
  3. 遮挡感知注意力机制,使用先验网格推断每个视图哪些区域被遮挡,帮助网络避免在未见区域的伪影
  4. 图像空间精炼网络进一步清理渲染输出

结果是一个系统,在质量上超越先前人物视图合成方法,同时运行速度与最快(基于溅射)方法相当。例如,EG-HumanNeRF 被表明消除了其他方法在遮挡区域产生的伪影:当输入视图稀疏时,基线方法因几何不确定而有模糊或缺失肢体(如手指),而 EG-HumanNeRF 使用 SMPL 先验加遮挡推理产生完整、清晰的渲染。

GPS-Gaussian

GPS-Gaussian(Zheng et al., CVPR 2024)是一种可泛化人物视图合成方法,使用 3D 高斯溅射作为底层表示,但在网络的单次前向传递中预测它们(无需每个主体优化)。

动机是仅给定稀疏图像集即可实现新人物的瞬时渲染,通过在大型人物扫描数据集上训练。

关键创新:

  • GPS-Gaussian 引入像素对齐高斯参数图概念。给定人物的两张(或几张)不同视图输入图像,方法为每个源视图产生图像大小的图,其中每个像素存储对应于该像素对人物投影的高斯参数(位置、方向、缩放、颜色、不透明度)。
  • 本质上,它将问题重投影到 2D:每个前景像素向 3D"发射"一个高斯。
  • 为了将这些提升到 3D 空间,可微立体深度模块使用两个源视图估计每像素深度。一旦估计了深度,两个视图的 2D 高斯参数被反投影到 3D,产生覆盖人物表面的 3D 高斯集合。
  • 然后可以用标准 3DGS 渲染将这些溅射到新视图。因为某些像素可能在深度上错误(特别是在自遮挡下),他们联合训练深度估计器和高斯预测,使用迭代精炼和惩罚不一致深度并改善渲染质量的损失。

结果

  • 令人印象深刻——GPS-Gaussian 在单 GPU 上实现 2K 分辨率新视角合成 >25 FPS,单个网络处理任意新主体。
  • 不需要测试时优化/微调;在快速推理两个视图网络后,新人物几乎可以瞬间渲染。
  • 使用卷积图像编码器(而不是 3D 网络查询)使其非常快。
  • 经验上,它在质量上超越先前最先进人物视图合成方法,同时是实时的。
  • 值得注意的是,即使与显式点基方法相比,他们学习的方法为未见姿态产生更好的几何和外观。
GHG(可泛化人物高斯)

另一种人物泛化方法是显式地将高斯表示与参数化人体模型绑定。

可泛化人物高斯 (GHG)(Kwon et al., arXiv 2024)通过在模板网格(SMPL-X)的 2D UV 空间上学习高斯参数来实现这一点。

在 GHG 中,每个高斯本质上锚定到 SMPL-X 表面上的一个位置(通过其 UV 坐标)。这意味着当给定具有拟合 SMPL-X 网格的新主体时,可以将学习的高斯场映射到该网格,调整人物的形状和姿态。

高斯颜色和偏移由网络预测,类似于 GPS-Gaussian 的精神,但使用 UV 参数空间作为卷积域(而不是图像像素)。

引入多支架策略以允许额外灵活性——例如,一个支架可能建模粗略身体形状,而另一个添加高频服装褶皱作为高斯位置的偏移。

通过利用 SMPL-X 的强几何先验,GHG 确保学习的高斯始终位于或接近可信人物表面。这大大减少了稀疏视图的歧义。

他们的结果显示出色的泛化能力:从仅有 3 张新人物输入图像,GHG 可以渲染逼真视图而无需微调,在可见和不可见数据集上都超越先前可泛化方法。

因为表示是显式的(网格上的一组高斯),它保留通过溅射实时渲染的能力。实际上,GHG 使用与 3DGS 相同的体积溅射渲染器(他们称之为"体积溅射的快速渲染范式")。

区别在于高斯现在根据网格组织。这也允许方法潜在地进行动画:因为高斯随 SMPL-X 姿态移动,可以用新姿态驱动捕获的外观(尽管论文重点是新视角而非新姿态)。

以这种方式集成 SMPL 有一些权衡:它假设参数模型对主体有良好拟合(使用现有人物姿态估计器从少量图像获得是可行的),并继承了模板的局限性(例如难以处理非常宽松的服装或 SMPL-X 未表示的长发)。

然而,明显的优势是一致性和完整性——即使手臂在输入视图中完全被遮挡,SMPL 先验确保仍为该手臂放置高斯,其颜色可以通过学习 UV 空间网络从相邻像素推断。这解决了无引导方法的常见失败,可能为未见区域留下孔洞或需要修复。

11.8 4D 高斯溅射(动态场景)

超越静态场景和单时刻,研究人员已将高斯溅射扩展到建模动态、时变场景(完全的 4D 时空表示)。传统的动态视图合成使用 NeRF 通常使用变形场或每帧 NeRF,但这些计算繁重且难以实时运行。

基于点的方法承诺更快渲染,确实 4D 高斯溅射(4DGS)已成为动态场景的领先显式方法。

在 4DGS 中,每个基元是时空高斯——实际上是一个随时间移动或变化的椭球。

4DGS 方法

Wu et al.(CVPR 2024)引入了一种 4DGS 公式化,实现动态场景的实时渲染,甚至对于非刚性运动的挑战性情况。

他们的方法用一组规范 3D 高斯(在参考时间)表示场景,并学习一个高斯变形场,将这些高斯映射到每帧的位置。

换句话说,他们没有让每帧完全独立的高斯,而是让高斯随时间保持身份。

一个微小的多头 MLP(变形解码器)以高斯的规范坐标和时间 ttt 为输入,输出该高斯在时间 ttt 的偏移、旋转和缩放变化。

时空编码器处理一组高斯以嵌入运动线索,允许网络即使高斯被遮挡一段时间也能推断连贯运动。

这种方法类似于为点学习连续运动场。

优势

  • 变形场 4DGS 在存储和连贯性方面有巨大优势。朴素地,可以为每帧优化单独的 3DGS 模型,但对于长序列这会成倍增加存储且无法利用时间冗余。
  • Wu et al. 表明他们的方法可以以高达 82 FPS(800×800)或 HD 分辨率的约 30 FPS 渲染动态场景,质量与动态 NeRF 相当或更好。
  • 重要的是,他们的表示紧凑且可编辑:因为每个高斯在时间上持久,可以跟踪对应甚至修改运动。他们演示了基本的 4D 编辑和对象跟踪作为优势。
  • 这种显式特性与神经动态辐射场形成对比,后者通常以复杂方式纠缠时间和视图。

然而,4DGS 在最初形式中确实面临挑战。确定的主要问题是时间冗余:许多高斯可能只"存活"很短时间,或许多高斯可能是静止的但由于优化问题而在时间上重复。即使有变形场,高斯数量仍然可能很高(数百万)以捕获精细细节,导致沉重的内存(原始 4DGS 可能需要动态场景约 2 GB)。

这些问题推动了后续研究。

4DGS-1K 和 MEGA

4DGS-1K(Yuan et al., 2025)针对冗余提出了 1000+ FPS 的动态场景渲染。

他们系统地解决冗余:

  1. 短生命周期高斯——引入时空变化分数来剪枝只短暂贡献的高斯,鼓励模型用更长寿命的高斯解释运动。
  2. 每帧不活跃高斯——维护每帧掩码指示哪些高斯实际上可见/需要,这样光栅化器可以跳过不影响当前视图的大部分高斯。

通过这些技术,4DGS-1K 大幅减少高斯数量并避免每帧光栅化不必要的溅射。因此,他们报告在现代 GPU 上 1000+ FPS 渲染,比原始快 50 倍,同时保持图像质量基本不变。

存储也减少到原始的一小部分(他们指出用相当质量仅约 10% 存储)。

这推动高斯溅射坚定进入实时 4D 视频领域。他们在 N3V(Neural 3D Video 数据集,6 个多视图视频)等数据集上的评估显示 4DGS-1K 实现与原始 4DGS 相似的 PSNR/SSIM,但内存小得多,FPS 高得多。

这样的性能使交互应用(如动态场景 VR)用显式溅射成为可能。

另一个努力是 MEGA(Zhang et al., 2024),专注于 4DGS 的内存效率。

他们观察到内存消耗大的主要原因是每个高斯的颜色存储:原始 4DGS 存储多达 144 个 SH 参数用于颜色。MEGA 用混合方法替代:每个高斯只有 3 参数基础颜色加上学习的全局颜色预测器添加视角相关效果。

这大幅削减内存(无需每点高阶 SH)。他们还强制熵正则化让每个高斯覆盖更大的时间跨度(类似 4DGS-1K 的思想),并惩罚不透明度复杂性以强制更少高斯。

结合压缩(半精度等),他们实现动态数据集上高达 125×–190× 的存储减少,同样无质量损失。

这些改进意味着可能需要 GB 的动态场景现在可以存储在仅数十 MB,甚至比某些隐式方法更小,同时保持实时特性(光栅化保持快速)。

应用于 MoCap 和 4D 人物渲染

动态高斯溅射也已专门应用于人物动作捕捉和 4D 人物重建。

例如,一些工作(如 Li et al. 2024,在 GPS-Gaussian 中引用)学习可动画高斯虚拟人物——本质上是学习人物姿态相关的高斯分布,使得给定新骨骼姿态,高斯相应移动以渲染新姿态。

这些方法结合骨骼动画的好处(通过类似 SMPL 的东西)与高斯溅射渲染。

Li et al.(CVPR 2024)的可动画高斯工作学习了人物头部和身体的姿态相关 2D 高斯图,启用可以用动作捕捉数据驱动的高保真虚拟人物。

这表明高斯溅射可以作为可变形对象的中间表示,其中控制信号(如关节角度)调节高斯分布。

此外,一些早期尝试将 4DGS 与 SLAM(同步定位与建图)结合用于动态场景,展示人们可以通过连续更新时空高斯溅射来在线重建变化环境。

这在捕获带有移动物体的城市场景方面可能有用。


十二、实现细节与实时性能

高斯溅射的一个重要吸引力是其实用性:通过正确的实现,它可以高帧率运行并扩展到大场景。

12.1 数据结构

高效空间索引数百万高斯很重要。在静态 3DGS 中,可以使用树或网格来剔除视锥外或给定距离下低于特定大小的高斯。

原始 3DGS 使用可见性缓冲跳过无贡献的高斯溅射(类似 z 缓冲测试)。

对于细节层次(LoD),每个高斯可以有多个尺度的表示,这样远离相机时,可以更小绘制或不绘制。

动态 4DGS 添加时间维度——可以预计算每帧活跃高斯集合,如 4DGS-1K 用位掩码所做。

12.2 光栅化与着色器

高斯溅射可以使用点基元渲染(用几何着色器扩展为广告牌四边形)或作为三角网格(如用小多边形近似的椭圆)。

也可以使用分块光栅化方法:将屏幕划分为分块,只处理与每个分块相交的高斯。

这在一些建议中有所暗示(如 MEGA 论文提到 GPU 友好的分块光栅化器)。

还必须按深度对溅射排序以正确混合;如果每帧在 CPU 上做这可能成本高。

相反,常见技巧是利用硬件混合,通过按近似网格从后到前绘制。一些研究原型将空间划分为深度层或每分块排序以规模化管理。

12.3 GPU 内存与吞吐量

每个高斯携带不平凡数量的数据(位置、协方差、颜色等)。高效打包这些(如量化协方差或使用半精度浮点)可以节省内存带宽。

内存占用是关注点特别是对于 4DGS,导致 MEGA 的 SH 压缩等解决方案。

此外,虽然存储了数百万高斯,渲染时实际只绘制一部分(视野内且大于尺寸阈值的)。GPU 上高效剔除(通过标记活跃溅射的计算着色器)可以大幅减少片段着色成本。

12.4 可微渲染实现

对于训练,通常使用自定义 CUDA 内核或 OpenGL 片段着色器计算每个像素的高斯覆盖及其关于高斯参数的导数。

这涉及计算投影椭圆及其与像素的交集。

一些工作依赖先前艺术如 SoftRasterizer 或可微表面溅射(DSS),但 3DGS 通常为具有 alpha 混合的各向异性高斯实现了自己的。

因为渲染器可微,可以直接用梯度下降优化数百万高斯参数(常使用 Adam 优化器)。

值得注意的是,尽管参数数量大,显式特性和良好初始化(来自 SfM)允许相当快地收敛到高质量。

12.5 训练 vs 推理计算

从头在场景上训练 3DGS 仍然耗时(尽管在许多情况下比 NeRF 快)。Kerbl et al. 报告了有竞争力的训练时间——小时级别——以达到高质量,这要归功于不在空空间射光线。

像 GPS-Gaussian 这样的可泛化方法将繁重工作转移到许多扫描的离线训练(在大型 GPU 上需要数天),但每场景推理只需数秒。

在部署中,渲染极其快:本质上就是所有溅射的绘制调用。例如,官方 3DGS 代码库使用 OpenGL 实时渲染溅射,瓶颈变成 GPU 每帧可光栅化多少溅射(现代 GPU 可以轻松处理 60+ FPS 的数千万片段)。

12.6 精度 vs 速度权衡

一些提高质量的步骤可能减慢渲染。例如:

  • 无锯齿溅射(mip-splatting)需要每帧为每个溅射计算足迹以避免欠采样。这是每个溅射的额外成本,但防止缩小时抖动。
  • 可以增加 SH 基阶数以捕获更多视角相关效果,但那意味着更多参数和每像素更多计算来评估 SH。

实现常选择适中的 SH 阶(如 2 阶,每颜色 9 系数)作为平衡。

一些"紧凑"变体(Mini-Splatting, Scaffold-GS)引入小型神经网络来预测更少溅射——这些混合方法牺牲一点纯速度(由于网络推理)以换取总体使用更少基元。

实际上,许多方法开源可用,具有高度优化的 CUDA 代码。例如,原始 3DGS 作者发布了可以在场景上训练然后导出溅射模型以在标准图形引擎中渲染的 CUDA/OpenGL 代码。

Chaos V-Ray 甚至将高斯溅射集成到光线追踪器中,允许溅射与传统渲染混合——这强调该格式正变得足够成熟用于内容创建管线。


十三、基准测试与评估对比

为了衡量进展,研究人员在标准数据集上评估:

13.1 静态场景数据集

  • NeRF Synthetic (Blender):8 个对象,约 100 张 800×800 图像
  • LLFF (Real Forward-Facing):24 个真实场景,约 20-30 张图像
  • Tanks and Temples:大规模室内外场景

13.2 动态场景数据集

  • D-NeRF:合成移动物体
  • HyperNeRF:真实动态场景
  • N3V (Neural 3D Video):多视图视频

13.3 人物数据集

  • THuman2.0:500 个高精度人体扫描
  • RenderPeople:商业扫描虚拟人物
  • CAPE:穿衣人体动态网格序列
  • ZJU-MoCap:多视角人物视频

13.4 比较总结表

方法表示先验使用速度质量备注
NeRF (2020)隐式 (MLP)慢(分钟/帧)需大量视图
Instant-NGP (2022)隐式(哈希网格)快(FPS级)大网格内存
3DGS (2023)显式高斯SfM初始化实时(100+ FPS)边缘略显模糊
Mip-Splatting (2024)显式高斯实时高(更锐利)解决锯齿
BG-Triangle (2025)混合高斯+曲面交互式高(最佳边界)更紧凑模型
EG-HumanNeRF (2024)隐式+网格引导SMPL-X先验实时极高需要网格
GPS-Gaussian (2024)学习的显式高斯学习的人物先验实时极高需训练数据集
GHG (2024)SMPL上的显式高斯SMPL-X先验实时极高需拟合SMPL
4DGS (2024)显式4D高斯+MLP实时(30-80 FPS)可编辑
4DGS-1K (2025)4DGS+剪枝超实时(1000 FPS)微小质量损失
MEGA (2024)4DGS+压缩实时~100×更小模型

十四、数据集与资源

14.1 常用数据集

Synthetic NeRF Dataset (Blender Scenes)

  • 内容:8 个对象,真实材质
  • 规模:每场景约 100 张 800×800 图像
  • 格式:路径追踪图像,附带真实相机位姿
  • 链接:https://www.matthewtancik.com/nerf

LLFF (Local Light Field Fusion)

  • 内容:24 个真实世界场景
  • 规模:每场景约 20-30 张图像,1008×756 分辨率
  • 格式:前向捕获(看向场景内侧)
  • 链接:https://bmild.github.io/llff

Tanks and Temples

  • 内容:多样真实室内外场景
  • 规模:训练集7场景,中级8场景,高级6场景
  • 格式:4K 视频,下采样帧,激光扫描真值
  • 链接:https://www.tanksandtemples.org

CO3D (Common Objects in 3D)

  • 内容:50 个常见物体类别
  • 规模:约 19,000 视频序列,150 万帧
  • 格式:相机位姿、点云重建、前景掩码
  • 链接:https://github.com/facebookresearch/co3d

AMASS

  • 内容:聚合 15 个现有 mocap 数据集
  • 规模:超过 40 小时运动数据
  • 格式:SMPL 参数空间中的姿态时间序列
  • 链接:https://amass.is.tue.mpg.de

CAPE (Clothed Auto Person Encoding)

  • 内容:15 个穿不同服装的受试者
  • 规模:600+ 序列,超过 140,000 帧 3D 扫描
  • 格式:每帧是穿衣人体网格
  • 链接:https://cape.is.tue.mpg.de

THuman2.0

  • 内容:500 个高保真人体扫描
  • 规模:8K 纹理,约 300K 面每网格
  • 格式:.obj 网格带纹理图,拟合 SMPL-X 参数
  • 链接:https://github.com/ytrock/THuman2.0-Dataset

RenderPeople

  • 内容:商业级照片逼真 3D 人物模型
  • 规模:超过 4,500 扫描人物
  • 格式:静态姿态、绑定和动画版本
  • 链接:https://renderpeople.com

14.2 开源实现

  • 官方 3DGS 实现:https://github.com/graphdeco-inria/gaussian-splatting
  • 社区扩展版本:多种优化和变体实现
  • 集成框架:与 PyTorch3D 等研究框架集成

十五、未来研究方向

15.1 改进压缩技术以提高内存效率

随着 3D 高斯溅射表示基元数量增长(场景常为数百万高斯),内存和存储效率成为关键问题。

探索的压缩方法:

  • 冗余减少:剪枝冗余高斯和量化参数
  • 层级编码:将高斯组织为多分辨率聚类或八叉树
  • 属性压缩:压缩颜色和不透明度属性(如使用 PCA 或学习码本)

15.2 处理动态和可变形场景

扩展高斯溅射到动态或可变形场景的前沿:

  • 时空高斯表示:每个高斯表示轨迹或时空体积
  • 运动场学习:可能用 MLP 学习的底层运动场翘曲静态高斯配置
  • 骨架运动模型结合:将高斯附加到移动部分

15.3 高级材质建模实现逼真渲染

原始高斯溅射使用简单发射模型。研究方向:

  • 高级着色模型:添加着色函数捕获高光和反射
  • 法线估计:从协方差形状或相邻几何估计法线向量
  • 神经反射率:使用小型神经网络预测给定视角和高斯属性的反射率

15.4 混合方法集成神经场和显式表示

有说服力的未来方向是结合显式高斯与隐式神经网络:

  • 使用粗神经场指导或调节高斯放置
  • 高斯作为固定骨干,小型神经网络精化细节
  • 神经特征场(如三平面或体素网格)伴随高斯编码高频细节

15.5 大规模场景扩展性

扩展 3D 高斯溅射到非常大场景(整个城市街区或森林):

  • 细节层次(LOD):城市级场景可划分为扇区或八叉树网格
  • 流式传输:相机移动时高斯可进出内存
  • 分治训练:CityGaussian 使用分治训练方法和多 LOD 表示

15.6 AR/VR 和游戏中的实时应用

将 3D 高斯溅射推向实时性能以用于交互应用:

  • 硬件加速:利用专用 GPU 功能
  • Web 和移动实现:移植到 WebGL/WebGPU
  • 低延迟更新:快速方法响应用户输入更新高斯

15.7 与现有图形管线集成

  • 引擎集成(Unity, Unreal)
  • 混合渲染
  • 编辑工具开发

15.8 从有限数据学习

  • 少样本学习
  • 跨场景先验
  • 文本到 3D

十六、术语表 (Glossary)

术语定义
3D Gaussian由均值和协方差矩阵定义的 3D 空间中的概率分布
Splatting将 3D 点作为 2D 足迹投影并渲染到图像平面的技术
Alpha Blending使用不透明度值组合半透明颜色的方法
Covariance Matrix描述高斯形状和方向的对称半正定矩阵
Spherical Harmonics将函数表示为球面上基函数和的数学工具
NeRF神经辐射场,使用神经网络表示 3D 场景的方法
Ray Marching沿光线迭代采样以渲染体积的方法
Rasterization将矢量图形转换为光栅图像的过程
SfM运动恢复结构,从图像恢复相机位姿和 3D 结构
MVS多视图立体,从多张图像稠密重建 3D 模型

十七、总结 (Conclusion)

3D 高斯溅射代表了新视角合成领域的范式转变,成功弥合了神经渲染质量与传统图形效率之间的差距。通过利用可以通过专门管线高效渲染的显式 3D 高斯基元,这种方法根本改变了我们表示和渲染 3D 场景的方式。

主要贡献总结

  1. 前所未有的性能-质量平衡:在 1080p 分辨率下实现实时渲染速度(30-135 FPS),同时保持与最先进神经辐射场相当或更优的视觉质量

  2. 加速训练:将优化时间从数小时/数天缩短至数分钟,实现快速场景重建和迭代

  3. 数学优雅框架:通过可微、解析严谨的公式提供统一方法,结合 NeRF 体积积分与点基渲染效率

  4. 显式表示:场景可直接编辑和操控,突破神经网络"黑箱"限制

  5. 自适应细节:通过自适应优化算法自动调整基元密度和分布以匹配场景复杂度

对各领域的影响

  • 计算机视觉与图形学研究:开启神经与传统渲染交汇的新研究方向
  • 虚拟现实与增强现实:使高质量实时场景渲染成为可能
  • 影视制作:提供快速场景捕获和高质量渲染解决方案
  • 数字人与虚拟化身:结合 SMPL 等模型实现可控的高保真人物渲染

3D 高斯溅射不仅是一项技术创新,更代表了对 3D 内容创建和消费方式的根本性重新思考。随着研究的持续进展,我们可以期待看到更加令人兴奋的发展,进一步模糊捕获现实与渲染虚拟之间的界限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GL_Rain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值