论文地址:https://arxiv.org/abs/2308.04079
项目:https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/
代码:git clone https://github.com/graphdeco-inria/gaussian-splatting —recursive

一、文章概述

1.问题导向

  • 辐射场:辐射场是三维空间中光分布的表示,它捕捉光如何与环境中的表面和材料相互作用。
  • 显式辐射场:相反,显式辐射场直接表示离散空间结构中的光分布,
  • 隐式辐射场:隐式辐射场表示场景中的光分布,而不明确定义场景的几何体。
    显式表达方法(点、网格、体素)的连续性质有助于优化,但渲染所需的随机采样成本高昂,并且可能会导致噪声。隐式表达(NeRF)耗费计算资源巨大,运行速度慢。3D GS 表示从隐式辐射场到显式辐射场的转变。它通过利用3D高斯作为灵活高效的表示,利用了这两种方法的优势。

    2.目标

    提出一个实时且能够高质量渲染场景的方法,通过结合离散和连续表示方法的优势,不仅克服了传统方法在噪声和渲染质量方面的限制,而且极大地提高了渲染速度。

    3.摘要

    辐射场方法最近彻底改变了用多张照片或视频捕获的场景的新颖视角合成。然而,要获得高视觉质量,仍然需要训练和渲染成本高昂的神经网络,而最近更快的方法不可避免地要牺牲速度来换取质量。对于无界和完整的场景(而不是孤立的对象)和1080p分辨率的渲染,目前还没有一种方法可以达到实时显示速率。我们引入了三个关键元素,使我们能够在保持有竞争力的训练时间的同时获得最先进的视觉质量,并重要的是允许在1080p分辨率下进行高质量的实时(≥30 fps)新颖视图合成。首先,从摄像机标定过程中产生的稀疏点开始,我们用3D高斯球表示场景,它保留了场景优化中连续体积辐射场的理想性质,同时避免了在空空间中不必要的计算;其次,我们对3D高斯线进行交错优化/密度控制,特别是优化了各向异性协方差,以获得准确的场景表示;第三,我们开发了一种支持各向异性飞溅的快速可见性感知渲染算法,既加快了训练速度,又允许实时渲染。我们在几个已建立的数据集上演示了最先进的视觉质量和实时渲染。

    4.贡献

    1.引入各向异性3D高斯球作为辐射场的高质量、非结构化表示。
    2.一种3D高斯属性的优化方法,与自适应密度控制交织在一起,为捕获的场景创建高质量的表示。
    3.一种适用于GPU的快速可微渲染器。

    二、方法解析

    2.1 系统pipeline


    输入:点云
    输出:渲染图像
  1. 从初始的sfm点云出发,以每个点为中心生成3DGS。
  2. 用相机参数把点投影到图像平面上(splatting)。
  3. 从splatting的痕迹中tile-based光栅化,得到渲染图像,将渲染图像和GT求LOSS,反向传播。
  4. 自适应的密度控制模块根据传递到点上的梯度,来决定是否需要对3DGS做分割或者克隆。梯度传递到3DGS里面对其存储的那几个参数进行更新。

    2.2 3D Gaussian 球表示三维模型

    使用 3D Gaussian 球表示三维模型,效果如下,其主要分为两步1、构建雪球 2、抛雪球。高斯抛雪球表示三维场景效果如下
  • 构建雪球
    直接使用球体来表示三维模型效果并不好,如下图所示,就像《我的世界》用方块来表示世界一样不能精细的表达场景,因为每个体的边缘过于僵硬。一个有效解决是让边缘变得模糊,这时便想到了高斯分布,重要信息的地方权重大一些,边缘信息的权重小一些。我们在冬天捏雪球时,也是雪球中间的地方最硬。
  • 抛雪球
    “Splatting” 是一种计算机图形学中常用的渲染技术。它的基本思想是将点云中的每个点视为一个二维的、具有一定大小和属性的粒子(或称为“splat”),然后将这些粒子投影到屏幕上并绘制成像素,以生成最终的图像。把场景用球体表示后,如何将3D空间转化为2D视角,作者用的抛雪球这个名字很形象。我们可以想象一个朝一面墙抛雪球的场景,雪球扁扁的贴到墙上,越中心的位置雪越多。我们假设空间中有很多雪球,我们依次将其抛到墙上,最后就将3D雪球转化到2D墙面。我们发现一些雪球的边缘地方慢慢会被其他雪球覆盖和吞噬,上述过程就是高斯抛雪球的核心思想。

    2.3 快速渲染优化

    3D 高斯的参数(协方差、位置、不透明度、球谐函数)被优化,以适应给定的图像序列和视角。这一步骤可以使用梯度下降或其他优化算法来实现,目标是最小化重建误差。使用自适应密度控制(ADC)来调整 3D 高斯的数量和分布,以达到最佳的渲染效果。
  • 自适应密度控制
    创建了一个密集的三维高斯函数集合,精确地表示自由视图合成的场景,从SfM估计的初始稀疏点开始,然后自适应控制高斯分布的数量及其密度(单位体积),允许我们从初始稀疏的高斯集密集,更好地代表场景。当小规模几何体(黑色轮廓)未被充分覆盖时,我们克隆相应的高斯。底行(过度重建):如果小规模几何体由一个大的板表示,我们将其分成两部分。
  • 排序
    在这一步骤中,投影的 2D 高斯被按照其深度值进行排序,以便在后续的渲染过程中正确地处理遮挡关系。之后进行Alpha Blending,也就是混合 alpha 合成来计算整体图像的最终颜色。
  • 分块
    为了提高排序的效率,可以使用空间划分或其他加速技术来减少排序的复杂度。例如,可以将图像平面划分为多个块,然后对每个块内的 2D 高斯进行排序。考虑到一个高斯投影可能会覆盖多个砖块,一种有效的处理方式是复制这个东西,并为每个复制出的高斯分配一个唯一的标识符,即与之相交的 Tile 的 ID。这样,每个砖块都与一个或多个高斯相关联,这些高斯标识了该砖块在图像中的位置和重要性。通过这种方式,3DGS 能有效地降低计算复杂度,同时还保持了图像处理的效率和准确性。
    整体的优化流程如下

    参考文献

  1. https://blog.csdn.net/qq_28087491/article/details/135629371?ops_request_misc=&request_id=&biz_id=102&utm_term=3DGS&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-135629371.142^v100^pc_search_result_base4&spm=1018.2226.3001.4187
  2. https://zhuanlan.zhihu.com/p/680669616
  3. https://blog.csdn.net/qq_45752541/article/details/132854115?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171508860616800222870718%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171508860616800222870718&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-132854115-null-null.142^v100^pc_search_result_base4&utm_term=3D%20Gaussian%20Splatting%20&spm=1018.2226.3001.4187