3D Gaussian Splats详细技术指南
3D Gaussian Splatting(简称 3DGS,俗称高斯泼溅 / 高斯溅射)是 2023 年由 Inria 团队提出的革命性实时辐射场渲染技术,它通过将三维场景表示为大量可优化的 3D 高斯椭球集合,在实现与 NeRF 相当的照片级渲染质量的同时,做到了 1080P 下 30FPS 以上的实时交互渲染,迅速成为三维重建、数字孪生、三维 GIS 领域的热门技术。
本文将从数据源、处理流程、数据结构、工具链,到三维 GIS 场景的加载与实现原理,进行全面详细的讲解。
一、数据源:原始数据从哪里来?
3DGS 的核心是从多视角观测数据中重建场景的辐射场,其原始数据源已经从最初的纯图像,扩展到了多传感器融合的多种类型:
1. 主流数据源:多视角图像
这是 3DGS 最经典、最成熟的输入源,也是原始论文采用的标准方案:
-
数据要求:围绕目标场景拍摄的一组无序 / 有序图像,要求相邻图像之间有足够的重叠度(通常要求 > 70%),覆盖场景的所有视角。
-
采集方式:可以是手持相机环绕拍摄、无人机航测序列、视频抽帧(通过 ffmpeg 等工具从视频中提取帧)。
-
适用场景:中小场景重建、文物数字化、室内场景建模,也是目前消费级 3DGS 应用的主流输入。
2. 扩展数据源:LiDAR 点云与多传感器融合
随着技术的发展,GIS 领域常用的激光雷达(LiDAR)数据也成为了 3DGS 的重要输入,解决了纯图像方案在几何精度、尺度歧义上的问题:
-
LiDAR 增强的 3DGS:通过 LiDAR 采集的高精度点云,为高斯初始化提供更准确的几何先验,同时在训练中加入深度约束,大幅提升大场景的几何精度。
-
多传感器融合:结合相机的图像信息、LiDAR 的深度信息、IMU 的位姿信息,实现自动驾驶、城市级测绘等场景的高精度重建,例如 LiDAR-3DGS、GeomGS 等方案。
-
优势:相比纯图像方案,LiDAR 辅助的 3DGS 能够更好地处理弱纹理区域、大尺度场景的尺度一致性问题,更符合 GIS 领域对几何精度的要求。
二、数据处理全流程:从原始数据到高斯模型
3DGS 的处理流程是一个从稀疏到稠密、从原始观测到优化参数的过程,整个流程可以分为四个核心步骤:
步骤 1:运动恢复结构(SfM)生成稀疏点云
这一步的目标是从原始输入中恢复相机的位姿和场景的稀疏几何结构,为后续的高斯初始化提供基础:
-
核心工具:通常使用 COLMAP 这一开源的 SfM 工具。
-
处理过程:
-
对输入图像提取特征点并进行匹配;
-
通过光束平差法(Bundle Adjustment)优化得到所有相机的外参(位姿)和内参;
-
三角化得到场景的稀疏点云,通常包含数千到数万个点。
-
-
输出结果:标准的 COLMAP 格式数据集,包含相机参数、图像位姿、稀疏点云,目录结构如下:
<your_dataset> ├── images/ # 原始输入图像 └── sparse/ └── 0/ ├── cameras.bin # 相机内参 ├── images.bin # 图像位姿 └── points3D.bin # 稀疏点云
步骤 2:高斯初始化
将上一步得到的稀疏点云,初始化为 3D 高斯的集合:
-
每个稀疏点云点,对应一个初始的 3D 高斯;
-
初始的位置就是点云的 3D 坐标;
-
初始的缩放、旋转、颜色、不透明度,根据点云的邻域信息和图像颜色进行初始化。
步骤 3:高斯参数优化与自适应密度控制
这是 3DGS 最核心的训练步骤,通过可微渲染的梯度下降,不断优化每个高斯的参数,同时自适应调整高斯的数量:
-
参数优化:通过可微分的光栅化渲染,将高斯渲染为 2D 图像,与原始输入图像计算损失,然后反向传播梯度,迭代优化每个高斯的位置、缩放、旋转、颜色、不透明度等参数。
-
密度控制:这是 3DGS 实现高质量重建的关键创新:
-
克隆与分裂:对于梯度较大的区域(通常是细节丰富的区域),会分裂或克隆高斯,增加高斯的数量,提升细节表现力;
-
\\ pruning(剪枝)\\:对于不透明度过低的高斯,会直接删除,减少冗余;
-
通过这个过程,高斯的数量会从初始的几千个,动态增长到百万甚至千万级,最终精确匹配场景的复杂度。
-
步骤 4:模型导出与格式转换
训练完成后,会得到优化后的所有高斯参数,此时可以导出为不同的格式,适配不同的部署场景:
-
原始的 PLY 格式:保留所有参数,用于存档和再处理;
-
压缩格式:如.splat、.ksplat、.spz 等,用于 Web、实时渲染等场景;
-
GIS 适配格式:转换为 3D Tiles,用于三维 GIS 场景的加载。
三、高斯数据的结构:数据到底是什么样的?
3DGS 的场景本质上是大量独立的 3D 高斯的集合,每个高斯都包含一套完整的参数,用来描述它的空间分布和视觉属性。
1. 单个高斯的核心参数
每个 3D 高斯都包含以下核心属性,这些属性会存储在文件中:
|--------|------------------------------|-----------------------------------------------------|
| 参数类型 | 具体字段 | 说明 |
| 空间位置 | x, y, z | 高斯中心的 3D 坐标,描述高斯在空间中的位置 |
| 缩放系数 | scale_0, scale_1, scale_2 | 三个轴向上的缩放因子,用来描述高斯的大小,经过指数映射后可以保证为正 |
| 旋转参数 | rot_0, rot_1, rot_2, rot_3 | 四元数,描述高斯的旋转方向,用来定义高斯的朝向,经过归一化后保证旋转的合法性 |
| 不透明度 | opacity | 高斯的 alpha 值,描述高斯的透明度,用于渲染时的 alpha 混合 |
| 颜色参数 | f_dc_0, f_dc_1, f_dc_2 | 球谐函数的 0 阶系数,也就是基础的 RGB 颜色,对应任意视角下的基础颜色 |
| 视角相关颜色 | f_rest_0 ~ f_rest_44 | 球谐函数的 1-3 阶系数,共 45 个参数,用来描述颜色随视角的变化,实现反射、高光等视角依赖的效果 |
注:原始的未压缩格式中,每个高斯的所有参数都是 float32 类型,单个高斯就占用了
3+3+4+1+3+45 = 59个 float,也就是 236 字节,这也是原始 PLY 文件体积较大的原因。
2. 主流文件格式对比
为了适配不同的场景,3DGS 衍生出了多种不同的文件格式,它们的特性对比如下:
|--------|---------------|---------------|-------------------|
| 特性 | PLY 格式 | .splat 格式 | .ksplat 格式 |
| 文件结构 | ASCII / 二进制混合 | 纯二进制分块 | 纯二进制 |
| 压缩率 | 低(无压缩) | 中(自定义压缩) | 高(LZ4 + 量化压缩) |
| 加载速度 | 慢(逐顶点解析) | 中(流式解析) | 快(直接内存映射) |
| 球面谐波支持 | 完整支持最高 3 阶 | 仅支持 0 阶(基础颜色) | 支持 0-3 阶可选 |
| 动态更新能力 | 差(需全量重加载) | 中(部分重加载) | 优(支持增量更新) |
| 内存占用 | 高(原始浮点存储) | 中(混合存储) | 低(量化存储) |
| 适用场景 | 存档、再处理、训练源 | Web 轻量渲染、快速预览 | 大规模场景、实时渲染、GIS 部署 |
-
PLY 格式:3DGS 的原生标准格式,也是行业的交换格式,保留了所有的参数,兼容性最好,但是体积大,加载慢,通常作为原始的存档文件。
-
.splat 格式:轻量的二进制格式,丢弃了高阶的球谐系数,体积小,加载快,适合快速预览和 Web 端的轻量应用。
-
.ksplat 格式:PlayCanvas 推出的压缩格式,通过量化和 LZ4 压缩,在保证质量的前提下,将文件体积压缩到 PLY 的 1/4 甚至更小,同时支持流式加载,是目前大规模场景部署的主流格式。
四、全流程涉及的工具链
从数据采集到 GIS 部署,3DGS 已经形成了一套完整的工具链:
1. 数据预处理工具
-
COLMAP:标准的 SfM 工具,用于从图像中恢复相机位姿和稀疏点云,是 3DGS 数据预处理的标准工具。
-
ffmpeg:用于从视频中提取图像帧,将视频转换为 3DGS 的输入图像序列。
-
aiData 工具链:针对多源传感器数据的标准化工具,用于将 LiDAR、IMU、相机的异构数据转换为统一的 3DGS 输入格式。
2. 训练与优化工具
-
官方 gaussian-splatting:Inria 团队的官方实现,是最基础的训练工具,支持标准的 3DGS 训练流程。
-
NerfStudio:集成了 3DGS 的一站式建模平台,提供了更友好的 UI 和更多的扩展功能,支持多传感器输入。
-
大疆智图:面向航测的商用工具,支持从无人机影像直接生成带 LOD 的 3DGS 模型,已经在测绘领域广泛应用。
-
SIBR_viewers:官方的实时查看器,用于训练过程中的实时可视化和结果查看。
3. 格式转换与编辑工具
-
SuperSplat:开源的 3DGS 编辑工具,支持查看、编辑、转换不同格式的高斯文件。
-
SplatTransform:格式转换工具,用于将 PLY 转换为各种压缩格式。
-
splat-3dtiles:开源转换工具,用于将高斯文件转换为 3D Tiles 格式,适配 GIS 场景。
-
GISBox:商用的 GIS 转换工具,支持一键将高斯文件转换为 3D Tiles,自动处理坐标转换。
4. GIS 适配与部署工具
-
CesiumLab:地理数据处理平台,支持 3DGS 数据的坐标配准和 3D Tiles 转换。
-
图新地球:国产 GIS 平台,原生支持 3DGS 数据的导入,支持自动读取坐标信息,支持多级 LOD 的高斯数据。
-
ArcGIS Pro:Esri 的专业 GIS 工具,从 3.6 版本开始原生支持 Gaussian Splat 图层,支持加载 3D Tiles 格式的高斯数据。
五、三维 GIS 场景中的加载:如何把高斯模型放到地图里?
3DGS 原生的是局部坐标的场景,而三维 GIS 是全球尺度的地理坐标系统,要将高斯模型集成到 GIS 场景中,需要解决坐标配准、格式适配、大场景加载三个核心问题。
1. 核心挑战:坐标系统一
3DGS 训练时使用的是局部的 ENU(东北天)坐标系,而 GIS 场景使用的是 WGS84 等地理坐标系,因此需要将局部的高斯坐标转换为地理坐标:
-
原点配准:首先确定局部 ENU 坐标系的原点对应的地理经纬度(也就是场景中心的经纬度);
-
坐标转换:将每个高斯的局部 (x,y,z) 坐标,通过 ENU 到地心坐标系(ECEF)的转换,转换为 GIS 引擎能够识别的地心坐标;
-
元数据存储:将坐标系统信息存储在 metadata.xml 或者 prj 文件中,供 GIS 工具读取,例如:
-
如果 PLY 文件内部没有坐标信息,GIS 工具会自动读取同级目录下的 metadata.xml,里面记录了投影信息和原点信息;
-
也可以手动配置工程坐标系,指定原点的经纬度,完成坐标配准。
-
2. 数据适配:转换为 3D Tiles 标准
为了适配 GIS 的大场景流式加载,需要将高斯数据转换为 3D Tiles 格式,这是三维 GIS 领域的通用流式数据标准:
-
空间分块:将整个场景的高斯点,按照空间位置分割为不同的瓦片(Tile),每个瓦片对应一个地理区域;
-
LOD 构建:为每个瓦片构建多级细节层次(LOD),远处加载低精度的高斯数据,近处加载高精度的,实现不同缩放级别下的流畅渲染;
-
数据压缩:使用 meshopt 等压缩算法对高斯数据进行压缩,减少网络传输和内存占用;
-
扩展支持:在 3D Tiles 中加入 KHR_gaussian_splatting 扩展,用来标识这是高斯数据,同时加入 ESRI_crs 扩展,用来记录坐标系统信息。
3. 主流 GIS 引擎的加载支持
目前主流的三维 GIS 引擎已经逐步原生支持 3DGS 数据:
(1)CesiumJS
Cesium 作为最流行的 Web 三维 GIS 引擎,已经通过分支和扩展支持了 3DGS:
-
原生扩展:Cesium 团队实现了 KHR_gaussian_splatting 扩展的支持,在独立分支中已经可以加载高斯格式的 3D Tiles;
-
流式加载:支持分块的流式加载,根据视锥体自动加载可见区域的瓦片,实现城市级大场景的流畅加载;
-
效果:可以将高斯模型和传统的倾斜摄影、地形、矢量图层无缝融合,实现照片级的数字孪生场景。
(2)ArcGIS Pro
Esri 的专业 GIS 工具,从 3.6 版本开始原生支持 Gaussian Splat 图层:
-
支持加载 JSON/3TZ 格式的 3D Tiles 高斯数据;
-
通过 ESRI_crs 扩展,支持任意坐标系统,不需要将数据转换为 WGS84,实现了坐标系统的灵活适配;
-
可以和其他 GIS 图层混合显示,支持发布为服务共享到 ArcGIS Online。
(3)国产 GIS 平台
-
图新地球:原生支持 PLY 和 3D Tiles 格式的高斯数据,支持自动读取 metadata.xml 的坐标信息,支持大疆智图导出的多级 LOD 高斯数据;
-
山海鲸可视化:实现了 3DGS 和 Cesium 的融合,支持将高斯模型转换为 3D Tiles,实现 Web 端的 GIS 场景加载。
4. 大场景的流式加载优化
针对城市级的超大规模高斯数据,GIS 场景下还做了专门的优化:
-
分而治之的训练:将大场景分割为多个小块,并行训练,解决原始 3DGS 训练内存不足的问题,例如 CityGaussian、DOGS 等方案;
-
八叉树视锥剔除:通过八叉树组织高斯数据,渲染时快速剔除视锥体之外的高斯,减少渲染负载;
-
渐进式加载:根据相机的距离,渐进加载不同精度的瓦片,实现从全球到厘米级的无缝缩放。
六、核心实现原理
1. 高斯场景表示的数学基础
3DGS 的核心是用 3D 高斯分布来表示场景,每个高斯的概率密度函数为: $$G(x) = e^{-\frac{1}{2}(x-\mu)^T \Sigma^{-1} (x-\mu)$$ 其中:
-
\\m$$ 是高斯的中心,也就是我们之前提到的 (x,y,z) 位置;
通过这种方式,场景被表示为大量的椭球的集合,这些椭球不是硬的几何面,而是软的概率分布,能够自然地表示半透明、精细结构等传统网格难以表示的内容。
2. 实时渲染的光栅化流程
渲染的时候,会将 3D 高斯投影到 2D 屏幕空间:
-
坐标投影:将高斯的 3D 中心投影到屏幕上,得到 2D 的中心;
-
协方差投影:将 3D 的协方差矩阵,通过相机的变换矩阵,投影到 2D 屏幕空间,得到 2D 的协方差矩阵,这个矩阵描述了投影后 2D 椭圆的形状;
-
深度排序:将所有的高斯按照深度从远到近排序,这是为了后续的 alpha 混合;
-
\\ tiled 光栅化 \\:将屏幕分割为 16x16 的小块,每个块处理影响它的高斯,通过快速的 GPU 并行计算,计算每个高斯对块内像素的颜色贡献;
-
alpha 混合:按照深度顺序,将高斯的颜色和不透明度混合到像素中,最终得到渲染的图像。
这个过程完全是 GPU 并行的,不需要神经网络的推理,因此能够实现极高的渲染速度,做到实时交互。
3. GIS 场景下的适配原理
在 GIS 场景中,除了上述的渲染流程,还加入了地理适配的逻辑:
-
坐标变换:在渲染的顶点着色器中,将高斯的地理坐标转换为裁剪空间坐标,和传统的 GIS 图层的坐标变换保持一致;
-
瓦片管理:和传统 3D Tiles 的瓦片管理逻辑一致,根据相机的位置和视锥体,动态加载和卸载不同的瓦片,实现大场景的流式加载;
-
LOD 选择:根据相机到瓦片的距离,自动选择不同精度的 LOD 层级,远处用低精度的高斯,减少渲染负载,近处用高精度的,保证细节。
总结
3D Gaussian Splats 技术通过创新的高斯场景表示,解决了传统三维重建技术质量和速度不可兼得的问题,而通过坐标配准、3D Tiles 适配,它已经能够无缝集成到三维 GIS 场景中,为数字孪生、城市建模、测绘地理信息领域带来了革命性的变化,能够以更低的成本、更快的速度,实现照片级的大规模三维场景重建与渲染。