Gaussian Splatting
高斯泼溅用数百万个 3D 高斯体从照片重建逼真的 3D 场景,并支持实时渲染。涵盖训练、NeRF 和采集。
高斯泼溅(也称 3D 高斯泼溅,3DGS)是一种从普通照片重建逼真的 3D 场景并实时渲染新视角的技术。它将场景表示为数百万个 3D 高斯体,即具有位置、形状、不透明度和视角相关颜色的柔和椭球体;绘制图像时,会将它们投影(“泼溅”)到屏幕上并进行混合。该技术在 SIGGRAPH 2023 上通过论文《用于实时辐射场渲染的 3D 高斯泼溅》首次提出,其图像质量达到最佳神经辐射场 (NeRF)的水平,同时能以每秒 30 帧或更高速度渲染 1080p 画面;此前没有其他方法能在大型、无界场景中实现这一点。它是一种新视角合成和3D 重建方法。
高斯泼溅的工作原理#
每个高斯体都存储 59 个可学习数值:一个 3D 位置、一个 3D 尺度和一个包含 4 个数值的旋转四元数,它们共同定义协方差(形状和方向);此外还有一个不透明度,以及 48 个球谐函数系数(每个颜色通道 16 个),可让颜色随观察方向变化,从而捕捉反射和光泽。训练从运动恢复结构 (SfM)在相机标定过程中生成的稀疏点云开始,并在每个点上放置一个高斯体。每轮迭代都会渲染一个训练视角,使用加权的 L1 和 D-SSIM 损失将其与真实照片进行比较,再通过可微渲染器进行梯度下降,更新每个高斯体。每经过 100 轮迭代,自适应密度控制会在重建不足的区域复制较小的高斯体,将覆盖过多细节的大高斯体拆分,并移除几乎透明的高斯体;论文中的每个场景最终包含 100 万至 500 万个高斯体。
渲染一帧时,渲染器会将每个 3D 高斯体投影到图像平面上的 2D 椭圆,将屏幕划分为 16×16 像素的图块,使用一次GPU基数排序,按深度对每个图块中重叠的高斯体排序,然后针对每个像素从前到后进行 alpha 混合。由于场景是由基本图元组成的显式列表,渲染过程类似游戏引擎的光栅化器,无需针对每个像素运行神经网络。
高斯泼溅与 NeRF 和网格的比较#
NeRF 将场景隐式存储在神经网络的权重中,并通过沿每条相机射线在许多点查询该网络来渲染场景。高斯泼溅则显式存储场景,因此渲染只需排序和混合。在原论文所用的相同硬件上,Mip-NeRF360 平均需要 48 小时训练,每帧渲染约需 10 秒;高斯泼溅充分训练 35–45 分钟后,图像质量便能达到或略微超过它,并可实时渲染。显式表示需要占用内存:每个高斯体有 59 个数值,包含 300 万个高斯体的场景约需存储 700 MB 的 32 位浮点数;在原始实现中,训练大型场景时 GPU 峰值内存可能超过 20 GB。泼溅也没有定义明确的表面,因此需要碰撞几何或 CAD 风格编辑的应用仍需使用后续方法将其转换为网格;动态场景则需要4D 高斯泼溅等扩展。
采集高斯泼溅数据#
一次采集是一组在静态场景周围移动时拍摄的重叠照片或视频帧。采集过程中移动的物体(如路人或汽车)会出现在部分帧中,却不出现在其他帧中;优化过程会试图用称为漂浮伪影的半透明瑕疵来解释这些物体。因此,训练流水线支持使用掩码排除移动物体;Nerfstudio 的数据格式接受黑白掩码,其中黑色表示忽略相应像素。YOLO26实例分割模型会自动分割每一帧中的所有人,生成这些掩码。
import cv2
from ultralytics import YOLO
# 加载 YOLO26 实例分割模型
model = YOLO("yolo26n-seg.pt")
# 只分割人(COCO 类别 0),这是采集中漂浮伪影的常见来源
results = model("https://ultralytics.com/images/bus.jpg", classes=[0], retina_masks=True)
result = results[0]
# 白色标记用于训练的静态场景,黑色标记需要忽略的人
people = result.masks.data.sum(dim=0) > 0
keep_mask = (~people).cpu().numpy().astype("uint8") * 255
cv2.imwrite("bus_mask.png", keep_mask)保存的 bus_mask.png 保持照片的完整分辨率,因为 retina_masks=True会以原始图像尺寸返回掩码,并且画面中的每个人都是黑色。
应用场景#
- 房地产与虚拟导览: 用手机或无人机拍摄住宅、博物馆或历史遗址,就能将其转化为场景,让访客在浏览器或 VR 头显中自由探索,并保留地板和窗户上的反射效果。
- 视觉特效与虚拟制作: 影视和游戏团队将真实场景采集为泼溅数据,并将其用作逼真的背景和布景参考。
- 数字孪生与地图绘制: 地理空间平台会与传统 3D 瓦片一起,流式传输城市、建筑工地和基础设施的大型泼溅重建数据。
- 驾驶与机器人仿真: 对真实驾驶过程的重建,使自动驾驶汽车团队能够从新的相机位置重新渲染记录的场景,以测试感知模型。
gsplat等开源库提供用于训练泼溅模型的 CUDA 光栅化器;Khronos Group 也已批准 KHR_gaussian_splatting,这是用于存储高斯泼溅数据的 glTF 2.0 扩展,由 Cesium、Esri、Niantic Spatial、NVIDIA、Huawei 和 Autodesk 的贡献者共同开发。










