标题:3D Gaussian Splatting for Real-Time Radiance Field Rendering
作者:Bernhard Kerbl、Georgios Kopanas、Thomas Leimkühler和George Drettakis,来自法国Inria、Université Côte d'Azur和德国Max-Planck-Institut für Informatik。
发表时间:2023年8月,ACM Transactions on Graphics上,卷号42,编号4
摘要
提出了一种名为3D Gaussian Splatting的新方法,用于实时辐射场渲染,这种方法可以在只需要很少的优化时间的同时,实现与之前方法相当甚至更好的视觉质量。
本文提出的3D Gaussian场景表示方法,结合了实时可微分渲染器,显著提高了场景优化和新视角合成的速度。
实验表明,在与InstantNGP(Müller et al., 2022)相同的训练时间下,该方法可以达到相似的视觉质量,甚至在某些情况下超过了Mip-NeRF360(Barron et al., 2022)。
此外,本文还提出了三个关键元素以实现最新的实时、高质量辐射场渲染:
- 首先,采用了一个点云派生的摄像机校准,通过连续的体积路径追踪来优化场景的3D Gaussian表示;
- 其次,设计了一种稳定的感知优化/密度控制算法来控制3D Gaussians,明显改善了渲染的优化和一致性;
- 最后,开发了一种灵活的感知渲染算法,支持动态视点和场景元素变化,可以实现良好的实时渲染质量和实时渲染速度。
关键词
新型视觉合成、辐射场、3D Gaussians、实时渲染
引言
引言部分首先指出,尽管使用如NeRF方法能够在几个小时内达到视觉上令人满意的结果,但是在达到最佳视觉质量方面,例如使用Mip-NeRF360方法,通常需要更长的优化时间。而本文提出的3D Gaussian Splatting方法在较短的训练时间内就能够实现快速但较低质量的辐射场方法,且在实时渲染性能方面有所提升。
本文强调了3D Gaussian作为一种灵活而表现力丰富的场景表示方法,并指出通过结构化光动作(Structured Motion, SM)校准的相机与Structure-from-Motion生成的点云相结合,可以作为场景表示的一部分。本文提出的实时渲染方法使用最新的GPU来提升3D Gaussian的优化和新视角合成速度。该方法的关键元素包括:
- 引入各向异性3D Gaussian作为高质量、紧凑、无结构和精确的场景表示方法。
- 一个优化3D Gaussian属性的方法,例如形状、光度和方向,通过连续的体积路径追踪来优化它们的表示,并且可以适应GPU。
- 一个快速、可见性感知的传播算法,允许各向异性的splatting和快速反向传播,以及通过跟踪场景遍历来实现排序和遮挡处理。
Related Work
-
传统场景重建与渲染:早期的新视角合成算法基于光场和结构光扫描,通过捕获照片集合来合成新视角图像。随后提到了体积渲染和基于模型的连续体积路径追踪等技术,并指出这些技术在过去几年中有了显著的改进。
-
神经渲染与辐射场:这部分概述了用于新视角合成的深度学习技术,如卷积神经网络(CNNs)的使用和基于体积软件的方法,指出这些方法虽然提升了渲染质量,但在速度和存储方面仍存在挑战。
文中提到了一些基于MLP的方法,如InstantNGP、Plenoxels和Frédoxels,这些方法可以代表稠密的外观和体积数据,但它们在表示方向效果方面存在限制。这些方法虽然在表示空间上更加紧凑,但渲染图像质量有限,部分原因是结构化光动作(SM)编码的选择,以及渲染时必须使用大量昂贵的GPU友好的3D Gaussians(解释:渲染过程中需要利用大量的3D Gaussian函数来实现高质量的图像,“GPU友好”意味着这种方法或算法可以高效地在GPU上执行,充分利用GPU的并行处理能力。但是,“昂贵”的意味着,尽管算法对GPU优化,实现了计算效率,但它依然需要大量的计算资源,可能会导致高显存消耗和处理器负荷,因此在成本和资源消耗方面比较高。)。然而,无需神经组件的方法可以实现更快的渲染速度和更好的质量。
这里,又进一步讨论了基于点的渲染和辐射场技术,这些技术能高效地渲染断开和非结构化的几何体,如点云。传统的点云渲染通常采用固定大小的点,对于简单形状可以实现高效的渲染,但是在处理大规模或复杂场景时会出现问题,比如点云的稀疏和遮挡处理问题。
同时,还提到了Lasser和Zollhöfer在2021年提出的点云基渲染方法,该方法通过排序和α混合实现了快速且精确的光栅化,并避免了全体积渲染的一些缺点。
通过比较上述方法,作者团队强调了他们提出的3D Gaussian Splatting方法的优势,特别是在实时渲染和处理复杂场景时的有效性。
Overview
3D Gaussian Splatting方法的输入和处理流程:
- 输入数据:来自结构化光扫描(Structured Light Scan, SLS)和范围查找(Range Finding)的图像集,这些图像集产生了一个稀疏的点云作为侧面的信息源。
- 点云表示:每个点通过位置(均值)、协方差矩阵和球谐函数系数来定义,这构成了一种紧凑而各向异性的体积样条,可以用来表示3D场景。
- 处理过程:使用方向性视觉通道(Directivity Visual Channel, DVC)和球谐函数来创建场景的辐射场表示。
- 优化过程:通过优化位置、协方差和球谐函数密度参数来创建3D Gaussian表示,优化流程包括使用分块的方法(tile-based approach)来提高渲染效率和速度。
关键优势:通过使用3D Gaussians,可以有效处理包括复杂背景和深度变化大的场景在内的完整场景。并且,这种方法能够无需法线信息就实现结构和深度复杂性的高质量渲染,这对于稀疏点云数据尤其重要,因为在这种数据中估计法线是非常有挑战性的。此外,方法还提到了一种高效的体积渲染技术,这种技术能够通过快速排序和遮挡处理来提高渲染速度和质量,同时限制了可以接收梯度的高斯数量,这有助于更好地控制渲染过程中的资源消耗。
上面紫色文字的原理,论述如下:
在3D图形渲染中,高斯函数通常用来表示空间中的模糊点,或者在这种情况下,用来表示一个有体积的小区域。3D Gaussian具有均值(位置),协方差(表征形状和尺度),以及可能的其他参数(如颜色、亮度等)。在论文中提到的上下文中,使用3D Gaussians作为场景的体积表示可以理解为以下几个数学和图形渲染的概念:
-
位置(均值): 每个高斯函数都有一个中心点,这个中心点是它在3D空间中的均值。在图形渲染中,这可以代表一个物体表面上的点或空间中的一个特征点。
-
协方差: 协方差矩阵描述了点的扩散或模糊的程度,以及它在不同方向上的扩展。在3D中,这个矩阵是3x3的,表示每个坐标轴方向上的扩散以及它们之间的相关性。这可以用来表示物体表面的曲率或者体积渲染中的模糊度。
-
球谐函数(Spherical Harmonics, SH)系数: 这些系数用来表示高斯函数的强度分布,可以用来表示一个区域内的光照分布和反射特性。
通过将这些3D Gaussians整合到场景中,可以创建一个连续的体积表示,它不仅仅包括了物体的表面,还包括了物体内部和外部的光照和阴影效果。这种方法的优势包括:
-
体积渲染(Volume Rendering): 在3D渲染中,体积渲染是一种技术,可以渲染透明或半透明的物质,如云、烟、雾或火焰。使用3D Gaussians进行体积渲染意味着可以模拟光线穿过这些体积物质时的散射和吸收过程。
-
光线-高斯相交(Ray-Gaussian Intersection): 当光线穿过一个用高斯函数表示的区域时,会根据高斯的密度分布计算光线的衰减。这种方法可以用来模拟光线在不同密度介质中传播的效果。
-
光线积分(Ray Integration): 对于每条穿过场景的光线,通过对交互的高斯函数沿光线路径进行积分,可以计算出最终像素的颜色和亮度。这个过程涉及到对高斯函数的权重和贡献进行积分,以产生平滑的渐变和逼真的光照效果。
-
各向异性效果(Anisotropic Effects): 由于3D Gaussians可以有不同的协方差形状,它们可以用来模拟各向异性的光照效果,如毛发或织物的方向性反射。
-
无需精确法线(No Need for Exact Normals): 在传统的表面渲染中,需要精确计算每个表面点的法线来正确渲染光照和阴影。但是,使用3D Gaussians,场景的体积特性允许在没有精确法线的情况下,通过高斯函数的重叠和集成来近似这些效果,尤其是在处理复杂或动态变化的表面时。
-
渲染效率(Rendering Efficiency): 虽然处理大量的3D Gaussians可能需要大量计算资源,但是与传统的体积渲染相比,这种方法可以通过利用现代GPU的并行处理能力来提高效率。
综上所述,使用3D Gaussians来处理复杂场景和深度变化大的场景,允许创建出既精细又连续的视觉效果,这在计算机图形学和视觉效果产业中具有重要的应用价值。
差分化3D高斯Splatting
- 目标:优化场景表示以允许高质量的新视角合成,同时从稀疏集合(如结构光扫描(Structured Light Scan, SLS))的图像开始。
- 方法:使用3D高斯作为一种基元,这种基元继承了点的属性,同时也允许快速的体积渲染而无需法线。这样,即使在有大量结构和深度复杂性的背景情况下,也能够处理完整、复杂的场景。
- 3D高斯的表示:通过位置(均值)、协方差矩阵和强度,即SH(球谐函数)系数的拉东场来定义,允许高度各向异性的体积样条表示3D场景。
- 优化方法:使用瓦片式光栅化器(tile-based rasterizer),这是一种高效的体积渲染方法,可以快速排序和快速遮挡处理,同时限制了能够接收梯度的高斯数量。
作者强调,其方法的关键优势在于可以不需要法线来实现3D场景的体积渲染,这在稀疏点云情况下尤其重要,因为在这种情况下估计法线非常困难。另外,3D高斯的参数是通过梯度下降来优化的,这一过程不容易受到约束,可以创建各向异性的协方差矩阵来优化体积渲染。
论文还讨论了如何通过将3D高斯投影到2D空间以实现渲染,以及如何通过仿射变换的雅克比矩阵来转换协方差矩阵。这些步骤使得优化过程能够适应不同形状的捕获数据,从而在一个相对紧凑的表示中结果更佳。论文中还提到了如何独立优化3D高斯的比例和方向,通过缩放矢量和四元数来表示旋转,以确保结果的有效性和精确性。
最后,作者指出这种方法避免了自动微分带来的显著开销,并在附录A中提供了精确的导数计算细节。这种优化方法使3D高斯能够适应捕获场景中不同形状的几何结构,同时保持了紧凑的数据表示形式。
Optimization with Adaptive Density Control--优化与自适应密度控制
这部分描述了如何通过优化3D Gaussians的集合来改进场景的表示,以及如何动态调整这些高斯函数的密度来更好地重建场景。
5.1 优化
优化过程是基于连续的渲染迭代,通过不断调整3D Gaussians的参数来改善训练视图中的场景表示。这个过程需要处理由于不完美的数据采集导致的几何畸变,以及3D Gaussians的位置和协方差参数可能不准确的问题。使用的优化技术包括随机梯度下降(Stochastic Gradient Descent)和自定义的CUDA内核来进行特定的优化操作。
为了提高优化的效率,使用了快速的分块光栅化方法,这是计算过程中的一个关键环节。此外,还使用了一个损失函数,结合了常规的L1损失和D-SSIM(结构相似性度量)损失,来平衡几何保真度和视觉相似度。
5.2 自适应密度控制
作者介绍了如何自适应地控制3D Gaussians的密度。开始时,从结构化光扫描中得到的点集合出发,并逐步调整高斯函数集合的密度,这允许从初始的稀疏数据集过渡到一个更密集的表示。这个过程包括在地形特征明显的区域(“重建不足”的区域)添加更多的高斯函数,以及在已经过度重建的区域减少高斯函数的数量。
这里使用α值来调控高斯函数的数量,以防止在优化过程中创建过多的高斯函数。α值的调整基于一个预定义的阈值,当高斯函数的数量超过这个阈值时,就会使用剔除机制来移除那些贡献较小的高斯函数。(这里可以仔细在源码里找找)
此外,为了处理小规模几何结构的不足重建问题,采用了复制(在重建不足的区域)和分裂(在过度重建的区域)高斯函数的策略。这些操作使得优化过程能够更精细地调整高斯函数的分布,以更精确地匹配场景的几何结构。具体地,这个过程包括以下步骤:
- 在重建不足的区域,如果小尺度的几何特征没有被足够覆盖,算法会克隆现有的高斯函数,即复制一个相同的高斯函数以增加局部密度,从而更好地捕捉细微的细节。
- 对于过度重建的区域,如果小尺度的几何被一个大的高斯函数所覆盖,算法会将其分裂为两个较小的高斯函数,这样可以减少单一高斯函数覆盖过多细节的情况,避免模糊和不必要的重叠。
这种自适应的密度控制策略不仅可以增加细节的丰富性,也有助于避免过多的高斯函数对计算资源的消耗。α值的动态调整和高斯函数的合理分布,使得模型在不同的迭代中逐渐收敛,最终得到一个既紧凑又精确的3D场景表示。
优化过程中,通过增加α值来提高某些高斯函数的重要性,同时允许采用剔除方法来移除那些低于预设α阈值的高斯函数。尽管高斯函数可能会随着优化过程中的调整而增大或缩小,并与其他高斯函数产生重叠,但作者定期进行重建和调整,以确保在视觉空间中保留有重要贡献的高斯函数,同时优化整体的几何表现。
通过这种方法,3D Gaussians作为欧几里得空间中的基元,在所有时间内都保持一致,与其他方法(如基于投影或扭曲的策略处理大型高斯函数的方法)相比,这种方法避免了复杂的变换,使得渲染过程更加直接和高效。
FAST DIFFERENTIABLE RASTERIZER FOR GAUSSIANS--快速差分光栅化器
这部分详细描述了如何实现一个高效的差分渲染流程,用于处理3D Gaussians的渲染和优化。
这一部分的核心内容是介绍了一个光栅化器,它对于每个高斯函数的处理是可微分的,允许在优化过程中计算梯度并进行反向传播。
以下是这一部分内容的总结:
-
高效的光栅化器: 该光栅化器可以快速处理场景中的大量3D Gaussians,使其适用于实时渲染。光栅化器的设计允许它在渲染过程中考虑到高斯函数的位置、大小和形状,以及它们如何投影到视图平面上。
-
差分性能: 光栅化器的差分能力意味着它能够根据最终图像中的像素误差反向调整3D Gaussians的参数。这是通过在光栅化过程中计算梯度并将这些梯度反向传播到相应的高斯参数来实现的。
-
优化梯度计算: 为了提高计算效率并减少计算时间,该方法可能包括自定义的CUDA内核,这使得梯度计算过程能够充分利用现代GPU硬件的并行处理能力。
-
适用于复杂场景: 由于光栅化器的高效性和可微分性,它适用于具有复杂几何形状和深度变化的场景。这使得算法能够适应各种类型的视觉内容,从简单的物体到复杂的自然场景。
-
支持实时渲染和优化: 由于光栅化器的快速和高效性,它不仅支持实时渲染,还支持实时优化。这意味着可以在用户交互的同时进行视觉效果的实时调整和改善。
这一部分的主要贡献是提供了一种可微分且高效的光栅化技术,它可以在实时渲染的同时支持复杂场景表示的优化,这对于实时图形应用和虚拟现实等场景尤其重要。通过这种技术,可以实现在保持高渲染质量的同时,优化和调整场景表示以实现更佳的视觉效果。