返回 导航

其他

hangge.com

三维高斯泼溅3DGS技术原理详解(附:工程化训练流程说明)

作者:hangge | 2026-04-01 09:30
    在三维重建与新视角合成中,长期存在“高质量难以兼顾实时性”的矛盾:传统多视几何渲染高效,但在复杂光照与细节表达上受限;以 NeRF 为代表的神经隐式方法画质出色,却训练和渲染成本高,难以实时交互。 
    2023 年提出的 3D Gaussian Splatting3DGS) 为此提供了新思路。它以大量半透明彩色高斯体直接表示场景,在保持高视觉质量的同时实现了高效、实时渲染,使基于照片的高保真三维重建首次能够在桌面级硬件上流畅交互。下面我将详细介绍 3DGS 相关技术原理以及基本的训练流程。

1,什么是 3DGS?

(1)3DGS 是一种把场景用大量三维高斯元(3D Gaussians)来显式表示,并通过将这些三维高斯投影为二维椭圆斑点(splat)来进行快速可微渲染的技术。

(2)3DGS 把体渲染(如 NeRF 那类隐式体渲染)和显式几何(点云 / mesh)之间做了一种折中:既保留了对连续体(连续光场/不规则表面)的好拟合能力,又能用光栅化式的 splattingGPU 上实时渲染,从而实现比传统 NeRF 快很多的训练/渲染效率和交互速度。

2,3DGS 与 NeRF 的对比

(1)相较于 NeRF3DGS 存在如下优势:
  • 实时渲染:由于 splatting + 光栅化,能达到交互级帧率(多倍于即时 NeRF 的速度)。
  • 显式结构:可直接访问每个 Gaussian,用于编辑、LOD、导出为点云/体素等。

(2)相较于 NeRF3DGS 存在如下不足和局限:
  • 视角依赖效果(特别是高光、反射)的表达能力可能逊于带复杂隐式视向编码的 NeRF;为此有后续工作提出混合模型(比如在色/不透明度上结合 NeRF 风格编码)。
  • 高质量结果通常需要更多的 Gaussians(占用内存)、以及良好的密度控制策略。

3,3DGS 的核心环节与技术

(1)稀疏点云初始化 (Structure from Motion)
  • 一切的开始需要一个“毛坯房”。系统会先通过多张照片,利用 SfM (运动恢复结构) 算法计算出一组稀疏的 3D 点云。这些点告诉程序:哪里大概有东西。

(2)将点变为“高斯椭球” (3D Gaussians
  • 这是 3DGS 的灵魂。系统在每个点的位置放置一个 3D 高斯分布。我们可以把它想象成一个可以拉伸、旋转、变色的“半透明椭圆气泡”。
  • 每个高斯球由四个关键属性定义:
    • 中心位置 (Position, μ):它在空间中的坐标 (x, y, z)。
    • 协方差 (Covariance, Σ):决定了它的形状和大小(是长条状、饼状还是圆球状)。
    • 不透明度 (Opacity, α):它是实心的还是接近透明的。
    • 颜色/球谐函数 (Color/Spherical Harmonics):决定了它在不同视角下看起来是什么颜色(以此模拟金属光泽或阴影)。

(3)泼溅投射与快速光栅化 (Splatting & Rasterization)
  • 泼溅(Splatting)这个词非常形象,就像把一勺带有颜色的奶油“啪”地一下甩在透明玻璃板上。
    • 投影: 将 3D 的高斯球投影到 2D 的相机平面上,变成 2D 的椭圆。
    • 排序: 根据离相机的远近,对这些椭圆进行快速排序。
  • 分块光栅化: 3DGS 使用了一种极其高效的 GPU 算法。它将屏幕分成很多 16 * 16 的小块(Tiles),只渲染对该区域有贡献的高斯球。这使得它的渲染速度能轻松达到 100+ FPS

(4)自适应控制 (Optimization & Densification)
  • 刚开始的高斯球可能很粗糙。系统会不断对比“渲染出的画面”和“真实照片”:
    • 克隆 (Clone):如果某个区域细节不够,就在那里多复制几个高斯球。
    • 分裂 (Split):如果一个高斯球太大了,就把它拆成两个小的。
    • 修剪 (Pruning):如果某个球接近透明或对画面没贡献,就把它删掉。

4,3DGS 的训练流程(从照片到 3D 场景)

(1)先准备一组从不同角度拍摄的照片,这些照片是场景的“视觉依据”,用于后续的训练。注意如果三个要点:
  • 覆盖度: 确保从高、中、低不同视角拍摄,保证图片之间有 60% - 80% 的重叠。
  • 清晰度: 避免快速晃动导致的“运动模糊”,模糊的图片会产生大量“浮空碎片(Floaters)”。
  • 光照: 尽量保持光照恒定,避免强烈的反光表面。

(2)3DGS 本身不会估计相机位姿,因此需要先用 COLMAP 对这些图像做结构重建(SfM + MVS):
  • 计算特征匹配:找到不同照片中的相同点。
  • 恢复相机位姿:每张照片的拍摄位置和方向。
  • 生成稀疏点云:场景中关键点的三维坐标。

(3)运行训练脚本,3DGS 程序会自动开始在稀疏点云的基础上生成高斯球并进行优化。具体过程如下:
  • 从每个训练图像视角出发,用相机参数渲染场景。
  • 将每个高斯椭球体投影到图像平面(称为 splatting)。
  • 计算渲染图与真实照片的误差(L2 PSNR)。
  • 反向传播,更新每个椭球的位置、颜色、大小、方向和不透明度
  • 这个过程让所有椭球体的集合逐渐“拟合”出真实世界。

(4)最后训练完成后,就可以得到支持旋转浏览的高斯点云(成千上万个彩色椭球体)。我们可以使用专门的 3DGS 查看器来查看 .ply 格式的 3D 高斯模型文件。
提示:一个精细的场景(3 万次迭代)产生的 point_cloud.ply 通常在 几百 MB1GB 之间。如果发现文件只有几 MB,那说明训练可能还没开始或参数设置有误。
评论

全部评论(0)

回到顶部