在过去几年里,计算机图形学领域一直为神经辐射场 (NeRFs) 所着迷。这些方法提出了一种突破性的方式来捕捉和探索3D场景——仅需几张照片,就能从任意新视角生成惊人逼真的图像。
这些成果令人叹为观止,但代价是巨大的计算成本: 训练一个高质量的NeRF可能耗时数天,而渲染一张高分辨率图像也可能需要数秒,实时探索根本无法实现。
这带来了一个令人沮丧的取舍:
- 慢但高质量: 如 Mip-NeRF360 能生成极致的细节,但训练需数十小时,渲染速度也极其缓慢。
- 快但质量较低: 如 Instant-NGP 和 Plenoxels 将训练时间削减到几分钟,但常常牺牲精细细节和视觉保真度。
对于虚拟现实、游戏或电影级可视化等真正沉浸式体验,我们亟需同时具备顶尖质量和实时帧率。
迎来了2023年的一项突破: 用于实时辐射场渲染的3D高斯溅射技术。
该方法不仅是微小改进,而是一次巨大飞跃,它实现了照片级真实感的渲染,训练仅需数分钟,且——最令人惊叹的是——可在实时下渲染高分辨率视图。
图1: 作者的方法实现实时渲染 (高达135 fps) ,质量与 Mip-NeRF360 (0.071 fps) 相当或更优,且训练时间仅为其一小部分 (51分钟 vs 48小时) 。
本文将深入解析3D高斯溅射技术的工作机制——探讨其三大核心支柱:
- 一种基于各向异性3D高斯函数的新颖场景表示。
- 可同时构建并精化场景的自适应优化策略。
- 一个为GPU高度优化的极速可微光栅化器。
背景: 通往实时辐射场之路
在深入高斯溅射技术本身之前,我们先看看促使其诞生的技术背景。
NeRF时代: 美丽的代价
传统 NeRF 将场景表示为一个连续函数——通常是MLP (多层感知机) ,输入为3D位置和观察方向,输出为颜色和密度。渲染过程需要体积射线步进: 从每个像素射出一条射线,对网络进行数百次查询以累积颜色与不透明度。
核心的体积渲染方程为:
\[ C = \sum_{i=1}^{N} T_i \big(1 - \exp(-\sigma_i \delta_i)\big) \mathbf{c}_i \]\[ \text{with} \quad T_i = \exp\left(-\sum_{j=1}^{i-1} \sigma_j \delta_j\right) \]这一过程可生成优美连续的图像,但计算开销巨大,实时交互渲染几乎不可行。
追求速度: 网格与哈希结构
Plenoxels 和 Instant-NGP 等新系统将特征存储在结构化数据 (体素网格、哈希网格) 中,从而减少对大型神经网络的依赖,大幅降低训练与渲染时间。然而它们依然依赖射线步进,并且质量有时受制于固定分辨率的网格。
基于点的替代方案
借鉴早期计算机图形学思想,基于点的渲染使用离散点 (或“溅射点”) 投影到图像平面并进行混合。点的混合公式与体积渲染惊人相似:
\[ C = \sum_{i \in \mathcal{N}} c_i \alpha_i \prod_{j=1}^{i-1} (1 - \alpha_j) \]每个点具有颜色 \(c_i\) 和不透明度 \(\alpha_i\),前方的点会遮挡后方的点。两种公式的相似性是关键: 意味着我们可以用可高效渲染的离散图元替代连续神经场。
3D高斯溅射方法: 三大核心创新
图2: 流程概览: 由稀疏的运动恢复结构 (SfM) 点开始,构建优化后的3D高斯集合,并通过自定义光栅化器实时渲染。
1. 表示方法: 灵活的3D高斯函数
该方法不依赖体素或神经网格,而是将场景建模为3D高斯函数集合——世界空间中的椭球形“模糊斑点”。每个高斯包括:
- 位置 (\(\mu\)): 其在3D空间的中心。
- 协方差 (\(\Sigma\)): 形状与方向,可实现各向异性——拉伸、压缩或旋转以贴合表面与细节。
- 不透明度 (\(\alpha\)): 用于混合。
- 颜色 (球谐系数) : 使用球谐函数编码与视角相关的外观。
其形状定义为:
\[ G(x) = e^{-\frac12 x^T \Sigma^{-1} x} \]直接优化 \(\Sigma\) 可能导致无效矩阵。为解决此问题,作者存储:
- 缩放向量 \(s\)
- 旋转四元数 \(q\)
并将其转换为有效协方差矩阵:
\[ \Sigma = R S S^T R^T \]该方案自然支持各向异性,能实现紧凑且精确的场景表示。
图3: 缩小优化后的高斯可揭示其拉长的形状。它们与真实表面对齐,提供紧凑且高保真的表示。
2. 优化: 自适应密度控制
训练从稀疏SfM点开始,早期模型过于粗糙。自适应密度控制会依据视图空间位置梯度策略性地新增或移除高斯。
两种关键操作:
- 克隆 (欠重建) : 缺失细节时,克隆较小的高斯并轻微移动以填补空白。
- 分裂 (过重建) : 较大的高斯覆盖了过多细致几何时,将其拆分成两个较小的高斯。
图4: 克隆增加欠重建区域覆盖,分裂增加过重建区域细节。
剪枝会移除不透明度低于阈值的高斯。克隆、分裂与剔除在混合损失函数的指导下循环进行,确保表示高效演化:
\[ \mathcal{L} = (1 - \lambda)\mathcal{L}_1 + \lambda \mathcal{L}_{\text{D-SSIM}} \quad \text{with} \quad \lambda = 0.2 \]3. 渲染器: 快速的基于图块的可微光栅化器
高斯溅射将缓慢的射线步进替换为GPU友好的光栅化器:
- 投影: 3D高斯在相机视图中投影为2D溅射点。
- 分块: 将图像平面划分为小图块 (如16×16像素) 。
- 排序: 每个高斯实例 (按图块) 分配深度+图块键,通过一次全局GPU基数排序实现前到后的顺序。
- 前向 (光栅化) : 每个图块并行遍历高斯列表,像素完全不透明时停止计算。
- 反向 (梯度) : 不存储每像素全部贡献溅射点,而是按排序列表自后向前遍历,从最终累积不透明度重建所需中间值。
该设计对每像素溅射点贡献数量无上限,对于深度复杂场景尤为重要。
实验与结果
定量性能
表1: 3D高斯溅射技术实现了与 Mip-NeRF360 相当或更优的质量,训练约40分钟,渲染速度超过130 FPS。
亮点:
- Ours-30K 模型质量可达或超越 Mip-NeRF360,训练速度约快 70×,渲染速度快 2000×。
- *Ours-7K *(训练约7分钟) 质量与 Instant-NGP 相当,延长训练可进一步提升。
定性对比
图5: 在未见视图上,高斯溅射常比 Mip-NeRF360 呈现更锐利细节且伪影更少。
训练进展
图6: 部分场景在7K迭代时已达高质量,额外训练可优化背景细节并减少伪影。
原理分析: 消融研究洞见
各向异性的价值
图10: 各向异性高斯函数更好地贴合表面,以更少的点捕获精细细节。
无限梯度的优势
图9: 将每像素梯度限制为10个溅射点 (左) 会产生伪影;完整方法 (右) 可避免此问题。
致密化的平衡
图8: 移除克隆或分裂步骤会降低重建质量,凸显自适应控制的关键性。
局限性
如同其他辐射场方法,高斯溅射在捕捉不充分的区域仍可能表现欠佳。
图11: 在稀疏覆盖区域,Mip-NeRF360 会出现漂浮物;高斯溅射可能产生粗糙斑块状的溅射点。
尽管内存占用已远低于早期点渲染方法,但仍多于紧凑型NeRF变体。在本原型中,大型场景可能需要超过20GB GPU显存——未来优化有望减少此需求。
结论: 范式转移
3D高斯溅射技术实现了实时、顶尖质量的辐射场渲染——这一成就曾被认为在没有连续神经场时无法实现。
通过融合:
- 显式各向异性图元,兼具灵活性与紧凑性
- 自适应优化,动态精化场景
- GPU架构下的高度并行光栅化
……它同时实现了前所未有的速度与画质。
这一方法连接了经典图形学 (光栅化、溅射) 与现代神经场景表示,为VR、AR、游戏及电影制作等交互式应用开辟了新的可能。
它为神经渲染中长期存在的速度与质量权衡提供了有力解答——并或许为下一代实时照片级真实感图形绘制了蓝图。