【论文精读】3D Gaussian Splatting for Real-Time Radiance Field Rendering SIGGRAPH 2023
Abstract
辐射场方法近年来革新了多长照片或视频场景的全新视角合成。然而,要实现高视觉质量,仍需要训练和渲染成本高昂的神经网络,而近期速度更快的方法又不可避免地以牺牲质量为代价。对于unbounded and complete scenes (非孤立物体) 和 1080p 分辨率渲染,目前尚无任何方法能够实现实时显示。我们引入三个关键要素,使我们能够在保持具有足够竞争力的训练时间的同时,实现最先进的视觉质量,更重要的是能够以1080p分辨率实现高质量的实时 (> 30FPS) 新视角合成。
- 从相机标定过程中生成的稀疏点出发,使用3DGS函数来表示场景,这些GS函数保留了连续体辐射场的理想特性,便于场景优化,同时避免在空白空间进行不必要的计算;
- 对3DGS函数进行交错优化/密度控制,特别是优化各向异性协方差,以实现场景的精确表示;
- 我们开发了一种快速的,感知可见性的渲染算法,该算法支持各向异性泼溅,既能加速训练,又能实现实时渲染。
方法在多个成熟的数据集上展现了最先进的视觉质量和实时渲染性能。
Introduction
Meshs 和 Points (点云) 是常见的3D陈刚就表示方法,因为他们是显示的,适合基于GPU/CUDA的快速光栅化渲染。相比之下,最近的 NeRF 方法则是基于连续的场景表示,通常通过体积光线步进法 (volumetric ray-marching) 优化一个 MLP 用于捕获场景的新视角合成。类似的,目前最有效的辐射场解决方案依赖于连续表示,例如通过插值存储体素 (Voxel) 或 哈希网格 或 points 中的值。虽然这些方法的连续性有助于优化,但渲染所需的随机采样代价高昂且容易导致噪声。我们引入一种结合两者优势的新方法: 我们提出的 3DGS表示 可以达到SOTA的视觉质量和相对不错的训练时间。同时我们基于Tile的 splatting solution 可以确保以1080p分辨率在先前公开数据集上实现最先进的实时渲染。
我们的目标是允许对使用多张照片捕获的场景进行实时渲染,并以与目前最快的NeRF方法相当的时间进行优化,同时达到最高质量的视觉效果。(最快的NeRF方法10-15帧/s,但是无法在高分辨率下进行实时渲染; 最优视觉质量的NeRF方法需要长达48h的训练时间)
我们方案主要由三部分组成:
- 引入3DGS函数作为一种灵活且富有表现力的场景表示方法。采用与NeRF相同的输入,使用SfM (Structure-from-Motion) 校准的相机,并使用 SfM过程中自动生成的稀疏点云初始化3DGS函数。与大多数需要 Multi-View Stereo(MVS)数据的基于点的解决方案不同,我们仅使用 SfM 点云作为输入即可获得高质量的结果。3DGS 既是一种可微的体素表示,又可以通过投影到2D并使用标准 α 混合进行高效光栅化,形成类似与NeRF的图像生成模型。
- 对3DGS函数的属性进行优化,包括3D位置、不透明度 α 、各向异性协方差和球谐函数(SH)系数,结合自适应密度控制 (在优化过程中动态添加或删除 3D 高斯)。最终得到的场景表示紧凑、无结构且精确,通常每个场景包含 100 万至 500 万个高斯。
- 利用快速的 GPU 排序算法,并借鉴了Tile-based splatting solution,使用3DGS表示,可以执行各向异性splatting,同时保证可见性顺序 (通过排序和 α 混合),并能高效计算反向传播。
Related Work
Traditional Scene Reconstruction and Rendering
最早的新视角合成方法基于光场,最初采用密集采样,随后发展到允许非结构化采集。SfM技术的出现开辟了一个全新的领域,使得利用一系列照片合成新视角成为可能。SfM在相机标定过程中估计稀疏点云,最初用于简单的三维空间可视化。随后,多视角立体算法 (MVS) 技术发展出令人印象深刻的全三维重建算法,并由此催生了多种视图合成算法。所有这些方法都将输入图像重新投影并融合到新的视图相机中,并利用几何信息来指导重新投影。这些方法在许多情况下都能取得优异的效果,但通常无法完全恢复未重建的区域,或者无法从MVS生成不存在的几何体时出现的“过度重建”中恢复。最近的神经渲染算法则致力于解决这一问题。大大减少了此类伪影,避免了在GPU上存储所有输入图像的巨大成本,在大多数方面都优于这些方法。
Neural Rendering and Radiance Fields
深度学习技术很早被用于新视角合成; CNN被用于估计混合权重 (estimate blending weights)或纹理空间求解 (texture-space solutions)。然而,大多数方法的主要缺点在于它们都依赖于基于多视图控件 (MVS) 的几何结构; 此外,使用CNN进行最终渲染常常会导致画面出现时间闪烁。
Soft3D 率先提出了用于新视角合成的体素表示; 随后,基于连续可微密度场表示几何体的深度学习技术与volumetric ray-marching相结合被提出。由于查询体素需要大量的样本,因此使用 volumetric ray-marching 进行渲染的成本很高。NeRF引入了重要性采样和位置编码来提高质量,但由于使用了大型MLP,速度受到了负面影响。NeRF的成功催生了大量后续方法,这些方法通过引入正则化策略来解决质量和速度问题。目前,在新颖视角合成方面,图像质量最先进的是Mip-NeRF360.虽然其渲染质量非常出色,但训练和渲染时间仍然非常长; 我们能够在提供快速训练和实时渲染的同时,达到甚至在某些情况下超越这一质量水平。
最新的方法主要通过利用三个设计选择来加快训练/渲染速度: 使用空间数据结构来存储 (神经) 特征,这些特征随后在 volumetric ray-marching 的过程中进行插值,不同的编码以及MLP容量。这些方法包括不同的空间离散化变体以及诸如哈希表之类的编码,从而可以使用更小的MLP或完全放弃神经网络。
这些方法中最值得关注的是 InstantNGP ,它使用哈希网格和占用网格来加速计算,并使用较小的MLP来表示密度和外观; 以及 Plenoxels,它使用系数体素网格插值连续密度场,并且完全无需神经网络。两者都依赖于球谐函数: 前者直接表示方向效应,后者则将其输入编码到颜色网络。虽然两者都提供了出色的结构,但这些方法在有效表示空白空间方面仍然存在困难,这在一定程度上取决于场景/捕获类型。此外,图像质量在很大程度上受限于用于加速的结构化网格的选择,而渲染速度则因给定 volumetric ray-marching 步骤需要查询大量样本而受到限制。我们采用的非结构化、显示的、对GPU友好的3DGS函数,无需神经组建即可实现更快的渲染速度和更好的质量。
Point-Based Rendering and Radiance Fields
基于点的方法能够高效地渲染不连续且非结构化的几何样本 (即点云)。最简单的点采样渲染将一组固定大小的非结构化点栅格化,它可以利用图形API原生支持的点类型或GPU上的并行软件栅格化。虽然点采样渲染能够忠实的还原底层数据,但它存在points不连续、锯齿等问题,并且渲染结构完全不连续。在高质量 points-based 渲染方面的开创性工作,通过将“splatting“,即使用比单个像素更大的几何形状(例如圆盘、椭圆盘、椭球体或表面元素 surfels)来绘制点,从而解决了传统点渲染中的质量问题。
近年来,基于可微分点的渲染技术引起了人们的兴趣。研究人员利用神经网络特征增强 points,并使用CNN进行渲染,从而实现了快速甚至实时的视图合成; 然而,这些方法仍然依赖于 MVS 来获得初始几何形状,因此集成了 MVS 的缺陷,最显著的是在一些复杂情况下 (例如无特征/高光区域或薄结构) 会出现过度重建或重建不足的问题。
Overview
我们方法的输入时一组静态场景的图像,以及由SfM标定的相应相机,SfM会生成稀疏点云。我们从这些点云创建一组三维高斯分布,这些缝补由位置(均值)、协方差矩阵和不透明度 α 定义,从而实现非常灵活的优化方案。这使得三位场景的表示相当紧凑,部分原因是高度各向异性的提速碎片可以用来紧凑地表示精细结构。辐射场的方向性外观分量(颜色)通过球谐函数(SH)表示,这符合标准做法。我们的算法通过一系列优化步骤来创建辐射场表示,这些步骤包括对3DGS参数 (即位置、协方差、 α 和 SH 系数) 进行优化,并穿插GS密度自适应控制操作。该方法高校的关键在于tile-based rasterizer,它能够对各向异性的 splat 进行 α 混合,并通过快速排序来保证可见性顺序。我们的快速光栅化器还通过跟踪累计的 α 值实现了高效的反向传播,而且不限制可以接收梯度的高斯数量。方法的Pipline如下:

Differentiable 3D Gaussian Splatting
我们的目标是优化一种场景表示,使其能够从稀疏的 SfM 点云出发,实现高质量的新视角合成,为此,我们需要一种基本元,既继承可微体积表示的特性,同时又是非结构化且显式的,以支持非常快速的渲染。我们采用3D高斯作为基本表示,因为他们是可微的,并且可以方便的投影为2D splat,从而实现快速的 α 混合渲染。
我们的表示方法与一些使用2D点的方法存在相似之处,这些方法假设每个点都是带发现的小平面圆盘。然而,由于SfM点云极其稀疏,法线的估计非常困难; 而且即使估计出来,优化这些高度噪声的法线也非常具有挑战性。因此,我们将几何建模为一组不需要法线的3D高斯。我们的高斯由一个完整的三位协方差矩阵Σ(定义在世界坐标系中,参考 Zwicker et al., 2001a)和一个中心点(均值) μ 定义:
在我们的混合过程中,该高斯函数乘以 α 。
然而,在渲染时,我们需要将3D高斯投影到2D。Zwicker 等人(2001a)展示了如何将其投影到图像空间。给定一个视图变换 W,在相机坐标系中的协方差矩阵 Σ′ 可表示为:
其中,J是投影变换的仿射近似的雅可比矩阵。Zwicker 等人(2001a)还指出,如果我们忽略 Σ′ 的第三行和第三列,就可以得到一个 2×2 的方差矩阵,其结构和性质与从带法线的平面点开始构建的矩阵相同,就像之前的工作(Kopanas et al., 2021)中所做的那样。
一种直观的方法是直接优化协方差矩阵 Σ ,以得到能够表示辐射场的 3D 高斯。然而,协方差矩阵只有在为半正定矩阵时才具有物理意义。而我们对所有参数的优化使用的是梯度下降,这种方法很难被约束生成有效的协方差矩阵;在优化过程中,更新步骤和梯度很容易导致协方差矩阵变为无效。
因此,我们选择了一种更直观但表达力相当的优化表示方法。 三维高斯分布的协方差矩阵 Σ 类似于描述椭球体的构型。给定缩放矩阵 S 和旋转矩阵 R ,我们可以找到对应的 Σ :
为了能够独立优化这两个因素,我们将它们分别存储:一个三维向量 s 表示缩放,一个四元数 q 表示旋转。它们可以很容易地转换为各自的矩阵并组合,但需要确保将 q 归一化以获得有效的单位四元数。
为了避免训练过程中自动微分带来的显著开销,我们显式地推导了所有参数的梯度。
这种各向异性协方差的表示方法(适用于优化)使我们能够优化三维高斯函数,使其适应所捕获场景中不同形状的几何结构,从而得到相当紧凑的表示。展示了这样的例子。

Optimization with Adaptive Density Control of 3D Gaussians
我们方法的核心是优化步骤,通过该步骤生成一组密集的3D高斯,从而精确的表示场景,以支持自由视角合成。除了优化高斯的位置p、不透明度 α 和 协方差 Σ 外,我们还优化了每个高斯的球谐函数 (SH) 系数,以表示颜色c,从而正确捕捉场景的视角相关外观。这些参数的优化与控制高斯密度的步骤交替进行,以更好的表示整个场景。
Optimization
该优化过程基于连续迭代的渲染,并将渲染结果与采集数据集中的训练视图进行对比。由于从3D到2D的投影存在歧义,几何可能会被错误的放置。因此,我们的优化不仅需要能够创建几何体,还需要在几何被错误定位时能够删除或移动几何。3D高斯协方差参数的质量对于表示的紧凑性至关重要: 因为大面积均匀区域可以通过少量大尺寸各向异性高斯来有效表示,从而减少体元素量,提高表示效率。
我们采用随机下降法进行优化,充分利用了标准GPU加速框架,并能够为某些操作添加自定义CUDA内核,遵循最新的最佳实践。特别的,我们的 fast rasterization在优化效率中起到了关键作用,因为光栅化是整个优化过程的主要计算瓶颈。
我们对不透明度 α 使用 Sigmoid 激活函数,将其约束在 [0, 1) 之间,从而获得平滑的梯度; 同时,对协方差的尺度使用指数激活函数来控制协方差的尺寸。
我们将初始协方差矩阵估计为各向同性高斯分布,其各轴长度等于到最近的三个点的距离的均值。我们采用类似于 Plenoxels 的标准指数衰减调度技术,但仅用于位置参数。损失函数由ℒ1 与 D-SSIM 项相结合:
我们在所有测试中都使用 λ=0.2。
Adaptive Control of Gaussians
我们从SfM得到的初始稀疏点集开始,然后应用我们的方法,对高斯的数量及其在单位体积内的密度进行自适应控制。这样就可以哦才能够最初稀疏的高斯集合,逐步过渡到一个更为致密、且参数正确,能够更好表示场景的高斯集合。在完成优化的预热阶段之后,我们每100次迭代进行一次致密化,并移除那些几乎透明的高斯,即不透明度α 小于阈值 ϵα 的高斯。
我们对高斯的自适应控制需要能够填充空区域。该机制既关注集合特征确实的区域 (即“欠重建”),也关注高斯在场景中覆盖范围过大的区域 (这通常对应于“过重建”)。我们观察到,这两类区域在视空间中的位置梯度都很大。直观上,这是因为这些区域尚未被良好重建,优化过程试图通过移动高斯来纠正这些问题。
由于这两种情况都是致密化的良好候选对象,我们对那些视空间位置梯度平均幅度超过阈值τpos 的高斯进行致密化; 在我们的实验中,该阈值设置为0.0002。

对于位于欠重建区域的小高斯,我们需要覆盖必须新建的几何结构。为此,优先采用 Clone 的策略,直接复制一个同样大小的高斯,并沿着位置梯度方向移动它。
另一个方面,高方差区域中较大的高斯分布需要被分割成较小的高斯分布。我们将这些高斯分布替换为两个新的高斯分布,并将它们的尺寸缩减为原来的 1/ϕ (ϕ = 1.6)。同时,我们使用原始3DGS作为概率密度函数来采样初始化它们的位置。
在第一种情况下,我们识别并处理的是需要同时增加系统总体体积和高斯数量的情形; 而在第二种情况下,我们保持总体体积不变,但增加高斯数量。与其他体积表示类似,我们的优化可能会在靠近输入相机的位置产生 floaters ; 在我们的框架中,这可能导致高斯密度不合理的增加。为了有效抑制高斯数量的增长,我们每隔 N = 3000 次迭代将所有高斯 α 的值重置为接近 0.然后,优化过程会仅在必要的位置重新提高 α ,同时结合前述的剔除机制,移除那些𝛼<𝜖_𝛼的高斯。高斯可能会收缩或者扩张,并与其他高斯发生大量重叠,但我们会定期移除那些在世界空间中过大的高斯。我们的模型中的高斯始终是欧几里得空间中的基本元; 并与其他方法不同,我们不需要对远距离或大尺寸高斯进行空间压缩、扭曲或投影等处理策略。
Fast Differentiable Rasterizer for Gaussians
我们的目标是实现快速的整体渲染和快速排序,以允许近似的 α 混合 (包括各向异性 splat),同时避免以往方法中对可接收梯度的 splat 数量存在硬性限制。
为了实现这些目标,我们设计了一种基于 tile 的高斯 splat 光栅化器,用于处理高斯斑点,该方法的灵感来自近期的软件光栅化方法。该方法对整个图像的单元进行预排序,从而避免了以往 α - 混合方案中逐像素排序所带来的高开销,我们的快速光栅化器能够在较低额外内存开销(每像素仅常数级开销)的情况下,对任意数量的混合高斯高效反向传播。整个光栅化流水线完全是可微的,并且在完成2D投影后,可以像以往的 2D Splatting 方法一样光栅化各向异性 splat。
具体流程如下: 我们首先将屏幕划分为 16 × 16 的 tile,然后对3DGS进行视锥体裁剪以及按 tile 的裁剪。具体来说,我们只保留 99% 置信区间与视锥体相交的高斯。此外,我们还是用了一个 guard band 来直接剔除极端位置的高斯 (例如均值非常接近近裁剪面或远远超出视锥体的高斯),因为它们的2D协方差投影会变得不稳定。随后,我们根据每个高斯与多少 tile 重叠,对其进行实例化,并为每个实例分配一个结合视空间深度和 tile ID 的键值。接着,我们使用一次高效的GPU基数排序对这些高斯进行排序。需要注意的是,此过程不再进行额外的逐像素排序,而是直接基于这一初始排序进行混合。因此,在某些配置下 α - 混合是近似的; 但当 splat 的尺寸接近像素大小时,这种近似误差可以忽略不计。我们发现这一设计显著提升了训练和渲染性能,同时在收敛场景中不会产生可见伪影。
完成排序后,我们为每个tile生成一份列表,通过确定深度排序后首个和最后一个投影到该tile的高斯来构建。光栅化时,我们为每个tile启动一个线程块。每个线程块首先协作地将一批高斯加载到共享内存中,然后针对给定像素按从前到后的顺序遍历列表,积累颜色和 α 值,从而在数据加载/共享和计算处理两方面都最大化并行度。当某个像素的 α 达到目标饱和度时,对应线程即停止处理。在固定间隔下,会检查tile中所有线程; 当所有像素都已饱和(即 α 达到 1)时,整个tile中止。
在光栅化过程中, α 的饱和度是唯一的停止标准。与以往的方法不同,我们不限制能够接受梯度更新的混合图元数量。这样可以使方法适应任意且变化的深度复杂度,并准确学习场景,而无需进行场景的特定的超参数调节。因此,在反向传播阶段,我们必须恢复前向过程中每个像素所混合的完整点序列。一种方法是将每像素的混合点列表以任意长度存储到全局内存中,但这会带来动态管理的开销。为避免这一问题,我们选择再次便利每个tile的列表; 可以复用前向过程中排序后的高斯数组和 tile 范围。为了便于梯度计算,我们在反向阶段采用从后到前的遍历顺序。
遍历从影响 tile 中任意像素的最后一个点开始,再次协作地将点加载到共享内存中。此外,只有当某点的深度小于或等于该像素在前向过程中最后一个贡献点的深度时,该像素才会开始执行(代价较高的)重叠测试和点处理。第 4 节中描述的梯度计算需要在原始混合过程中每一步的累计不透明度值。与其在反向传播中显式遍历逐步缩小的不透明度列表,我们仅存储前向过程结束时的总累计不透明度即可恢复这些中间值。具体而言,每个点存储其在前向过程中得到的最终累计不透明度 α;在反向的从后到前遍历中,我们将该值除以每个点自身的 α,即可得到用于梯度计算的所需系数。


Implementation , results and evaluation
结果自不必说,为当时最先进
关于代码讲解,强烈推荐
Reference
【较真系列】讲人话-3d gaussian splatting全解(原理+代码+公式)【1】 捏雪球
3D Gaussian Splatting for Real-Time Radiance Field Rendering