深度解析 Scaffold-GS:结构化 3D 高斯与视角自适应渲染
1. 引言:3DGS 的”结构缺失”问题
1.1 3D Gaussian Splatting 的成功与局限
3D Gaussian Splatting(3DGS) 自 2023 年问世以来,以其卓越的渲染质量和实时速度迅速成为神经渲染领域的新标杆:
| 特性 | 3DGS 的优势 |
|---|---|
| 渲染质量 | 媲美甚至超越 NeRF 的新视角合成质量 |
| 渲染速度 | ~100 FPS(1080p),远快于 NeRF 的逐点采样 |
| 可微渲染 | 端到端可训练,无需手工设计 |
| 初始化 | 基于 SfM 点云,自然利用几何先验 |
然而,3DGS 存在一个根本性缺陷:
3DGS 允许高斯”自由漂移和分裂”来拟合每个训练视角,忽视了底层场景几何结构,导致大量冗余高斯和视角变化鲁棒性差。
1.2 冗余问题的具体表现
| 问题 | 具体表现 | 后果 |
|---|---|---|
| 过度膨胀 | 高斯为适应每个视角而膨胀 | 存储膨胀、渲染效率下降 |
| 忽视几何 | 高斯分布与场景几何无结构对应 | 视角变化时容易产生伪影 |
| 视角过拟合 | 视角依赖效果被烘焙到参数中 | 新视角合成质量下降 |
| 大面积纹理 | 纹理稀疏区域需要大量高斯填充 | 效率低下 |
| 多尺度场景 | 不同观察距离需要不同密度高斯 | 3DGS 容易产生针状伪影 |
1.3 Scaffold-GS 的核心思想
Scaffold-GS(CVPR 2024)的核心洞察:
用稀疏体素网格中的锚点(Anchor Points)来引导神经高斯的分布,让高斯在结构约束下自适应地响应视角变化。
与 3DGS 的核心区别:
| 方面 | 3DGS | Scaffold-GS |
|---|---|---|
| 高斯分布 | 无结构、自由漂移 | 由锚点引导、有结构 |
| 属性预测 | 训练时直接优化 | 推理时由 MLP 动态预测 |
| 视角适应 | 参数烘焙 | 视角相关 MLP 解码 |
| 存储方式 | 每个高斯的完整属性 | 仅存储锚点 + MLP 权重 |
| 高斯数量 | 数十万~数百万 | 显著更少 |
2. 核心架构:双层层级结构
2.1 为什么需要双层结构?
3DGS 的问题在于”单层”——每个高斯独立存储所有属性,没有层级组织来捕捉场景结构。
Scaffold-GS 引入双层结构:
第一层:锚点层(Anchor Layer) └── 稀疏体素网格中的锚点 ├── 位置 x_v(体素中心) ├── 局部上下文特征 f_v ∈ R^32 ├── 缩放因子 l_v ∈ R^3 └── k 个可学习偏移量 O_v ∈ R^(k×3)
第二层:神经高斯层(Neural Gaussian Layer) └── 从锚点"生长"出来的神经高斯 ├── 位置 μ(锚点 + 偏移 × 缩放) ├── 不透明度 α(MLP 预测) ├── 颜色 c(MLP 预测) ├── 旋转 q / 四元数(MLP 预测) └── 缩放 s(MLP 预测)2.2 整体管线流程
输入:SfM 点云(COLMAP) ↓ ┌─────────────────────────────┐ │ Step 1: 锚点初始化 │ │ SfM 点云 → 体素化 → 锚点网格 │ │ 每个锚点:位置、特征、缩放、偏移 │ └────────────┬────────────────┘ ↓ ┌─────────────────────────────┐ │ Step 2: 视角裁剪 │ │ 只保留视锥体内的锚点 │ │ (仅激活可见锚点) │ └────────────┬────────────────┘ ↓ ┌─────────────────────────────┐ │ Step 3: 神经高斯生成 │ │ 每个锚点 → k 个神经高斯 │ │ MLP 预测:α, c, q, s │ │ 输入:锚点特征 + 视角位置/方向 │ └────────────┬────────────────┘ ↓ ┌─────────────────────────────┐ │ Step 4: 不透明度过滤 │ │ α < τ_α 的神经高斯被丢弃 │ │ (仅保留有意义的高斯) │ └────────────┬────────────────┘ ↓ ┌─────────────────────────────┐ │ Step 5: 瓦片光栅化渲染 │ │ 与 3DGS 相同的渲染管线 │ └────────────┬────────────────┘ ↓ 新视角图像3. 锚点初始化:从 SfM 到稀疏体素网格
3.1 体素化过程
Scaffold-GS 首先将 SfM 点云 进行体素化:
其中 是体素大小, 是体素中心集合。
为什么要体素化?
| 原始 SfM 点云 | 体素化后 |
|---|---|
| 稀疏且不规则 | 规则分布的网格 |
| 密度不均匀 | 均匀覆盖场景 |
| 无结构信息 | 天然编码空间邻域关系 |
| 可能存在空洞 | 通过插值填补 |
3.2 锚点的属性
每个锚点 配备以下属性:
| 属性 | 维度 | 描述 |
|---|---|---|
| 位置 | 体素中心(由体素化决定) | |
| 局部特征 | 可学习的局部上下文特征 | |
| 缩放因子 | 控制神经高斯分布范围 | |
| 偏移量 | 个可学习的位置偏移 |
3.3 多分辨率视角自适应特征增强
核心创新:锚点特征不是固定的,而是视角相关的。
对于每个锚点 ,构建特征库:
其中 表示特征被下采样 倍(实现:slicing 和 repeating)。
给定相机位置 和锚点位置 :
通过小型 MLP 预测权重,然后加权融合:
这一设计让锚点能够根据观察距离和方向,自适应地融合不同分辨率的特征,从而更准确地预测神经高斯属性。
4. 神经高斯动态推导
4.1 神经高斯的参数化
每个神经高斯由以下参数定义:
| 参数 | 含义 | 预测方式 |
|---|---|---|
| 位置 | 高斯中心 | 锚点 + 偏移 × 缩放 |
| 不透明度 | 透明度 | MLP 预测 |
| 颜色 | RGB(可选球谐) | MLP 预测 |
| 旋转 | 四元数(协方差) | MLP 预测 |
| 缩放 | 各向异性缩放 | MLP 预测 |
4.2 位置计算
对于锚点 ,其 个神经高斯的位置为:
其中 是可学习的偏移量, 是该锚点的缩放因子。
4.3 属性 MLP 预测
神经高斯的属性由对应的 MLP 在推理时动态预测:
MLP 结构(所有 MLP 一致):
LINEAR(in_dim, 32) → ReLU → LINEAR(32, out_dim)4.4 不透明度预过滤
为提高效率,仅保留不透明度超过阈值的高斯:
这大幅减少了渲染时的计算量,使得 Scaffold-GS 能保持与 3DGS 相当的渲染速度。
5. 锚点精细化:生长与修剪
5.1 为什么需要精细化?
初始锚点由 SfM 点云体素化得到,可能存在以下问题:
| 问题 | 原因 | 影响 |
|---|---|---|
| 纹理稀疏区域空洞 | SfM 在低纹理区域点云稀疏 | 场景覆盖不完整 |
| 观察不足区域 | 部分区域训练视角少 | 新视角质量差 |
| 冗余锚点 | 体素化可能过于密集 | 存储浪费 |
Scaffold-GS 通过**生长(Growing)和修剪(Pruning)**策略解决这些问题。
5.2 生长策略:基于梯度的锚点添加
核心思想:在高斯梯度较大的区域添加新锚点——这意味着”需要更多细节”。
步骤:
- 将神经高斯空间量化到体素中(大小 )
- 对每个体素,计算 次迭代的神经高斯平均梯度
- 如果 ,在该体素中心添加新锚点
多分辨率生长:
更小的体素用于更精细的层次,更大的阈值防止过于密集。
随机消除:对候选锚点应用随机消除,防止锚点过快增长。
5.3 修剪策略:移除无效锚点
核心思想:移除无法产生有意义神经高斯的锚点。
步骤:
- 累积锚点的神经高斯不透明度
- 如果 ,移除该锚点
5.4 精细化管线图
初始锚点(来自 SfM 体素化) ↓ ┌─────────────────────────────┐ │ 训练过程中 │ │ • 累积神经高斯梯度 │ │ • 累积神经高斯不透明度 │ └────────────┬────────────────┘ ↓ ┌────────────┴────────────────┐ ↓ ↓Growing(梯度大) Pruning(不透明度低) ↓ ↓添加新锚点 移除无效锚点 ↓ ↓ └────────────┬────────────────┘ ↓ 精细化后的锚点网格6. 训练目标与损失函数
6.1 总损失函数
Scaffold-GS 的总损失函数:
| 损失项 | 权重 | 作用 |
|---|---|---|
| 1.0 | 重建损失,确保像素级准确性 | |
| 0.2 | 结构相似性损失,保持结构完整性 | |
| 0.001 | 体积正则化,防止高斯过度重叠 |
6.2 体积正则化的意义
体积正则化项定义:
其中 是向量元素的乘积(即缩放向量 的三个分量之积)。
几何意义:鼓励神经高斯小而紧凑,减少不必要的重叠:
- 大的 → 大的 → 大的损失
- 重叠的高斯 → 冗余渲染 → 大的 惩罚
6.3 可学习参数
Scaffold-GS 的可学习参数:
| 参数 | 描述 | 数量 |
|---|---|---|
| 锚点特征 | 每个锚点的局部特征 | |
| 锚点缩放 | 每个锚点的分布范围 | |
| 偏移量 | 每个锚点的 个偏移 | |
| MLP 权重 | 共享(场景无关) |
关键:MLP 权重是场景无关的,同一个 MLP 可以用于所有场景。大幅减少了每个场景的存储需求。
7. 与 3DGS 的详细对比
7.1 渲染质量对比
Mip-NeRF360 数据集:
| 方法 | PSNR (↑) | SSIM (↑) | LPIPS (↓) |
|---|---|---|---|
| 3DGS | 28.69 | 0.870 | 0.182 |
| Mip-NeRF360 | 29.23 | 0.844 | 0.207 |
| Scaffold-GS | 28.84 | 0.848 | 0.220 |
Tanks & Temples 数据集:
| 方法 | PSNR (↑) | SSIM (↑) | LPIPS (↓) |
|---|---|---|---|
| 3DGS | 23.14 | 0.841 | 0.183 |
| Scaffold-GS | 23.96 | 0.853 | 0.177 |
Deep Blending 数据集:
| 方法 | PSNR (↑) | SSIM (↑) | LPIPS (↓) |
|---|---|---|---|
| 3DGS | 29.41 | 0.903 | 0.243 |
| Scaffold-GS | 30.21 | 0.906 | 0.254 |
7.2 效率对比
渲染速度与存储压缩:
| 数据集 | 方法 | FPS | 存储 (MB) | 存储压缩比 |
|---|---|---|---|---|
| Mip-NeRF360 | 3DGS | 97 | 693 | 1× |
| Mip-NeRF360 | Scaffold-GS | 102 | 156 | 4.4× |
| Tanks & Temples | 3DGS | 123 | 411 | 1× |
| Tanks & Temples | Scaffold-GS | 110 | 87 | 4.7× |
| Deep Blending | 3DGS | 109 | 676 | 1× |
| Deep Blending | Scaffold-GS | 139 | 66 | 10.2× |
Scaffold-GS 在渲染速度相当的情况下,实现了 4~10 倍的存储压缩!
7.3 复杂场景的鲁棒性
Scaffold-GS 在以下挑战场景中表现出色:
| 挑战场景 | 3DGS 的问题 | Scaffold-GS 的优势 |
|---|---|---|
| 薄几何结构 | 产生针状伪影 | 锚点约束提供更可靠的形状 |
| 纹理稀疏区域 | 需要大量高斯填充 | 更紧凑的表示,细节更可靠 |
| 光照效果 | 过拟合特定光照 | 视角自适应预测更鲁棒 |
| 观察不足区域 | 新视角模糊 | 锚点结构填补空洞 |
| 多尺度内容 | 远近距离需要不同密度 | 多分辨率特征自然处理 |
8. 关键数学公式汇总
- 3D 高斯定义:
- 协方差矩阵分解:
- 瓦片光栅化混合:
- 体素化锚点初始化:
- 神经高斯位置计算:
- 视角自适应特征融合:
- 属性 MLP 预测:
- 总训练损失:
- 体积正则化:
9. 实现细节
9.1 默认超参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| (每个锚点的神经高斯数) | 10 | 用于所有实验 |
| MLP 隐藏层维度 | 32 | 所有 MLP |
| MLP 层数 | 2 | LINEAR → ReLU → LINEAR |
| 梯度累积迭代数 | 100 | 用于锚点精细化 |
| 默认生长阈值 | 复杂场景用 | |
| 修剪不透明度阈值 | 0.5 | 累积不透明度低于此值则修剪 |
| 0.2 | SSIM 损失权重 | |
| 0.001 | 体积正则化权重 |
9.2 MLP 结构可视化
输入:\hat{f}_v (32D) + δ_vc (1D) + \vec{d}_vc (3D) ↓ 拼接 → 36D ↓ LINEAR(36, 32) → ReLU → LINEAR(32, out_dim) ↓ 输出:α_i / c_i / q_i / s_i9.3 多分辨率特征库实现
特征库通过 Slicing 和 Repeating 实现:
原始特征 f_v: [f_0, f_1, f_2, ..., f_31] (32D) ↓下采样 2 倍: [f_0, f_2, f_4, ..., f_30] (16D) → 补零到 32D ↓下采样 4 倍: [f_0, f_4, f_8, ..., f_28] (8D) → 补零到 32D ↓拼接 → [f_v, f_{v_{\downarrow_1}}, f_{v_{\downarrow_2}}] ↓加权融合(MLP 预测权重)10. 总结与展望
Scaffold-GS 的核心贡献
- 双层层级结构:锚点引导神经高斯分布,兼顾结构约束和局部自适应
- 视角自适应属性预测:MLP 动态解码视角相关的神经高斯属性
- 多分辨率特征融合:锚点特征根据观察距离和方向自适应调整
- 锚点精细化策略:基于梯度的生长和基于不透明度的修剪
- 显著存储压缩:4~10 倍压缩比,同时保持甚至提升渲染质量
当前局限
| 局限 | 描述 | 潜在改进方向 |
|---|---|---|
| 初始化依赖 SfM | 需要 COLMAP 提供初始点云 | 自监督初始化或神经网络预测 |
| MLP 推理开销 | 每个神经高斯都需要 MLP 推理 | 特征缓存或更高效的解码器 |
| 场景规模限制 | 单场景表示,大规模场景需分块 | 层次化多场景组织 |
| 动态场景 | 仅支持静态场景 | 引入时间维度的表示扩展 |
未来研究方向
| 方向 | 描述 | 相关工作 |
|---|---|---|
| 大规模场景 | Scaffold-GS 锚点特征可用于场景理解 | Street Gaussians, Rural Radiance Fields |
| 动态场景 | 加入时间维度的结构化表示 | Dynamic 3DGS,时空锚点 |
| 局部编辑 | 利用锚点的语义特征进行局部修改 | Gaussian Editor |
| 物理仿真 | 锚点结构支持更自然的物理属性附加 | PhysicsGS |
| 生成式扩展 | 用 Scaffold-GS 作为 3D 生成的目标表示 | Scaffold-LRM |
在 3DGS 家族中的位置
Scaffold-GS 是 3DGS 最重要的改进之一,它引入的结构化思想影响了后续大量工作:
3DGS (2023) ├── Scaffold-GS (2024) ← 结构化高斯、视角自适应 │ ├── 引入了"锚点"的概念 │ ├── MLP 动态预测属性 │ └── 生长/修剪策略 ├── GaussianEditor (2024) ├── Street Gaussians (2024) ├── GES (2024) └── ... (更多后续工作)Scaffold-GS 证明了”结构化”是 3DGS 进化的关键方向之一。 通过引入锚点层级和视角自适应机制,它不仅解决了 3DGS 的冗余问题,还为 3DGS 在大规模场景理解、局部编辑、动态场景等更广泛的应用奠定了基础。
参考资料
- Lu, T., Yu, M., Xu, L., Xiangli, Y., Wang, L., Lin, D., & Dai, B. (2024). “Scaffold-GS: Structured 3D Gaussians for View-Adaptive Rendering.” CVPR 2024, pp. 20654-20664.
- Kerbl, B., Kopanas, G., Leimkühler, T., & Drettakis, G. (2023). “3D Gaussian Splatting for Real-Time Radiance Field Rendering.” ACM TOG (SIGGRAPH).
- Barron, J. T., Mildenhall, B., Tulsiani, S., & Tagliasacchi, A. (2021). “Mip-NeRF 360: Unbounded Anti-Aliased Neural Radiance Fields.” CVPR 2022.
- Xu, Q., Xu, Z., Philip, J., Bi, S., Shu, Z., Sunkavalli, K., & Ngiam, J. (2023). “Point-NeRF: Point-based Neural Radiance Fields.” arXiv.
- Fridovich-Keil, S., Yu, A., Tancik, M., Chen, Q., Recht, B., & Kanazawa, A. (2022). “Plenoxels: Radiance Fields without Neural Networks.” CVPR 2022.
- Müller, T., Evans, A., Schied, C., & Keller, A. (2022). “Instant Neural Graphics Primitives with a Multiresolution Hash Encoding.” ACM TOG (SIGGRAPH).
- Schönberger, J. L., & Frahm, J.-M. (2016). “Structure-from-Motion Revisited.” CVPR 2016 (COLMAP).
- Wang, Z., Wu, S., Xie, W., Chen, M., & Prisacariu, V. A. (2023). “NeRF—: Neural Radiance Fields without Known Camera Parameters.” arXiv.
- “city-super/scaffold-gs.” GitHub: city-super/scaffold-gs.
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!

