引言

在计算机视觉这一快速发展的领域中,在计算机内部重建现实的探索在短短几年内取得了巨大的飞跃。我们从摄影测量学起步,发展到革命性的神经辐射场 (NeRF),最近又迎来了 3D 高斯泼溅 (3D Gaussian Splatting, 3DGS)。

3DGS 通过实现实时渲染和 NeRF 难以企及的快速训练速度改变了游戏规则。它不再将场景表示为连续的体素,而是表示为数百万个离散的 3D 高斯“团块”。虽然这对于有机、模糊的结构非常有效,但在处理人造世界时却遇到了障碍。看看你的周围——墙壁、桌子、屏幕和建筑物都是由锐利的边缘和平面定义的。从本质上讲,高斯函数是柔软、圆形且扩散的。试图用圆形团块来表示锋利的立方体,就像试图用水气球搭建乐高房子一样;你需要极其大量的气球来近似平面,而且效果永远不够完美。

这种局限性导致了内存膨胀,并在本应是硬边缘的地方产生了视觉伪影。但是,如果我们改变基本的构建块呢?如果我们不使用模糊的团块,而是使用一种天生就能理解边缘和体积的图元 (primitive) 呢?

这就是 3D 凸包泼溅 (3D Convex Splatting, 3DCS) 的核心贡献。

图 1: 用于新视图合成的 3D 凸包泼溅。这是一张高层对比图,展示了与高斯泼溅相比,3DCS 如何利用更少的图元实现更清晰的几何结构。

在这篇文章中,我们将深入探讨一篇新的研究论文,该论文提出用 3D 光滑凸包 (3D Smooth Convexes) 取代高斯。我们将探索这些新图元如何在保持我们期望的实时渲染速度的同时,实现更锐利的边缘、更好的表面表示和更低的内存使用率。

背景: 高斯的“模糊”问题

要理解为什么 3D 凸包泼溅是必要的,我们需要先看看当前最先进技术: 3D 高斯泼溅 (3DGS) 的局限性。

3DGS 使用数百万个 3D 高斯来表示场景。每个高斯本质上是一个椭球体,由其位置、旋转、缩放、不透明度和颜色定义。为了渲染图像,这些 3D 椭球体被投影到 2D 相机平面上 (泼溅) 并混合在一起。

虽然效率很高,但高斯在几何上存在两个主要限制:

  1. 缺乏物理边界: 从理论上讲,高斯函数是无限延伸的 (尽管它衰减得很快) 。它没有一个硬性的“停止点”。这使得它极其不适合表示平坦的墙壁或锐利的角落。
  2. 球体填充问题: 想象一下试图用网球填满一个方盒子。无论你把它们塞得多紧,球与盒子的角落之间总会有空隙。为了填补空隙,你需要越来越小的球。在 3DGS 中,这意味着系统必须生成数百万个微小的高斯,仅仅为了制造坚实、平坦表面的错觉。

这导致了一种权衡: 你要么接受“模糊”的边缘,要么通过使用数百万个图元来模拟锐度,从而导致内存使用量激增。

凸包登场

3D 凸包泼溅背后的研究人员提出了一种植根于几何学的解决方案: 3D 光滑凸包 (The 3D Smooth Convex)。

凸形状是一种体积,对于形状内的任意两点,连接它们的线段也完全位于形状内部。想想立方体、金字塔或十二面体。与高斯不同,凸形状可以有平坦的面和锐利的角。通过使用这些作为我们的渲染图元,我们可以仅用少数几个大的、平坦的凸包来表示一张桌子或一堵墙,而不是成千上万个微小的高斯。

图 2: 椅子建模的玩具实验。此图展示了凸包 (下排) 如何用比高斯 (上排) 少得多的参数捕捉椅子的锐利几何形状。

如上图所示,效率的提升是巨大的。要使用高斯获得椅子腿的清晰表示,你需要一团密集的点云。而使用凸包,一个拉长的形状就可以完美地表示整条腿。

核心方法: 3D 凸包泼溅

那么,我们要如何实际实现这一点呢?我们不能直接把标准的三角形网格扔进泼溅管道中,因为我们需要系统是可微的 (differentiable) 。 我们需要能够微调形状的参数,并看到它是如何改变图像的,从而让计算机“学习”场景的形状。

该方法依赖于一套复杂的流程,该流程在数学上定义这些形状,将它们投影到 2D,并进行渲染。

图 3: 凸包泼溅流程。该图概述了从 3D 点到 2D 投影、凸包提取,最后是用于渲染的指示函数的流程。

1. 定义 3D 光滑凸包

该论文建立在 CvxNet 的概念之上,CvxNet 使用平面来定义凸形状。然而,3DCS 采用了稍微不同的方法使其与泼溅兼容。

这种方法中的 3D 凸包不是直接定义平面,而是由一组 3D 点 (假设有 \(K\) 个点) 定义。形状是这些点的“凸包 (convex hull)”——想象一下把橡皮筋绕在一堆钉子上;橡皮筋内部的形状就是凸包。

光滑性的数学原理

标准的凸包具有无限锐利的角,这对优化来说是有问题的 (梯度很难流过尖锐的不连续点) 。为了解决这个问题,作者使用了光滑近似符号距离函数 (Smooth Approximate Signed Distance Function)

首先,他们定义了从一点到定义凸包的平面的距离 \(L_j(p)\):

公式 1: 符号距离公式。

然后,为了创建“光滑”的凸包,他们使用了 LogSumExp 函数。该函数聚合了构成凸包的所有平面的距离,但柔化了它们之间的交集。

公式 2: 使用 LogSumExp 的光滑近似符号距离函数。

在这里,参数 \(\delta\) (delta) 控制光滑度

  • 高 \(\delta\): 形状接近具有锐角的硬多面体。
  • 低 \(\delta\): 角落变得圆润和柔软。

指示函数 (锐度)

一旦我们定义了形状,我们需要知道它有多“致密”。它是一个实心物体,还是雾状的?这由使用 Sigmoid 激活的指示函数 (Indicator Function) 控制:

公式 3: 决定形状密度的指示函数。

在这里,参数 \(\sigma\) (sigma) 控制边界的锐度

  • 高 \(\sigma\): 从“内部”到“外部”的过渡是瞬间的 (像实心墙) 。
  • 低 \(\sigma\): 过渡是渐进的 (像云) 。

通过结合这两个参数,系统可以表示各种各样的形状,从坚硬的立方体到柔软、雾状的团块。

图 4: Delta 和 Sigma 对泼溅的影响。这个网格展示了改变光滑度 (delta) 和锐度 (sigma) 如何改变图元的外观,从柔软/扩散到坚硬/致密。

2. 泼溅过程: 从 3D 到 2D

在渲染中,我们不直接看 3D 形状;我们看到的是它在 2D 屏幕上的投影。3DGS 将 3D 椭球体投影为 2D 椭圆。3DCS 需要将 3D 凸包投影为 2D 凸多边形。

计算 3D 凸包然后投影它的计算成本很高。作者使用了一条巧妙的捷径:

  1. 投影点: 将定义 3D 形状的 \(K\) 个点使用标准透视投影分别投影到 2D 相机平面上。

公式 4: 3D 点到 2D 图像坐标的投影。

  1. 计算 2D 凸包: 一旦点到了 2D 平面上,使用一种称为 Graham 扫描 (Graham Scan) 的算法来找到这些 2D 点的凸包。这勾勒出了屏幕上的形状轮廓。

  2. 计算 2D 指示函数: 用于 3D 形状的数学公式 (LogSumExp) 在这里被复用到 2D 中。连接 2D 凸包点的线充当“平面”,允许系统计算形状内每个像素的颜色和不透明度。

投影形状的 2D 指示函数如下所示:

公式 7: 适配 2D 的光滑距离函数。 公式 8: 适配 2D 的指示函数。

注意到 \(d\) 项了吗?它根据与相机的距离缩放参数,以确保透视的正确性。

3. 光栅化

最后,我们在屏幕上有一组 2D 形状。光栅化器按深度 (离相机最近的优先) 对它们进行排序并混合它们的颜色。这使用了 NeRF 和 3DGS 中常见的标准 Alpha 混合公式:

公式 5: 用于混合重叠图元颜色的 Alpha 混合公式。

这一步是完全可微的,并在 CUDA 中实现以获得高性能。这意味着系统可以将渲染图像与地面真值照片进行比较,计算误差,并更新 3D 点的位置、它们的颜色和不透明度。

优化: 自适应致密化

一个场景很少简单到可以用初始的随机凸包集来表示。系统需要在必要的地方添加更多细节。

在 3DGS 中,高斯会被克隆或分裂。3DCS 使用类似但在几何上独特的方法。当优化检测到某个凸包未能充分表示某个区域 (基于梯度) 时,它会触发分裂 (Split)

图 5: 自适应凸包致密化方案。图示说明了单个凸包如何分裂成多个以原始定义点为中心的更小的凸包。

由 \(K\) 个点定义的单个凸包被分裂成 \(K\) 个新的、更小的凸包。这些新形状的中心对应于原始形状的点。这确保了新形状大致覆盖相同的体积,但现在可以自由独立移动并捕捉更精细的细节。

为了确保系统收敛,他们使用了一个损失函数,结合了 L1 距离 (像素差异) 、SSIM (结构相似性) 和掩码损失,以最小化使用的图元数量。

公式 6: 用于训练的组合损失函数。

实验与结果

这种几何复杂性值得吗?研究人员在标准基准测试中对比了 3DCS 与 3DGS、Mip-NeRF360 以及其他基于图元的方法 (如 2DGS 和 GES) : Tanks and TemplesDeep BlendingMip-NeRF360

几何保真度

第一个基本验证是看凸包是否真的比高斯更好地表示形状。

图 6: 使用图元重建简单形状。高斯与光滑凸包拟合简单几何形状 (三角形、正方形、圆形) 的对比。

如图 6 所示,光滑凸包 (下排) 可以用极少的点形成锐利的三角形和正方形。高斯 (上排) 即使添加更多数量也难以形成角落;它们天生就倾向于圆形。

定量性能

表 1 总结了主要结果。使用的指标包括 LPIPS (越低越好,衡量感知质量) 、PSNR (越高越好,衡量像素精度) 和 SSIM (越高越好,结构相似性) 。

表 1: 新视图合成方法的对比分析。3DCS 在 Tanks&Temples 和 Deep Blending 上在 LPIPS 和 PSNR 方面优于 3DGS,且内存使用量显著减少。

数据的主要结论:

  1. 卓越的质量: 3DCS 在几乎所有数据集上的 LPIPS 分数都优于 (更低) 3DGS。这意味着图像对人眼来说看起来更自然。
  2. 内存效率: 在 “Tanks&Temples” 数据集上,3DCS 在实现更高质量的同时,使用的内存大约是 3DGS 的一半 (282MB 对比 411MB) 。“Light” (轻量) 版本的 3DCS 使用的更少 (83MB) 。
  3. 速度: 虽然 3DCS 的训练和渲染速度比极速的 3DGS 慢 (由于更复杂的凸包计算) ,但它仍然比 Mip-NeRF360 快几个数量级。

室内与室外

该方法在结构化环境中表现最为出色。在 Mip-NeRF360 数据集中,研究人员将结果分为室内和室外场景。

表 2: Mip-NeRF 360 上的定量结果。3DCS 在富含硬边缘和平面表面的室内场景中显示出显著收益。

对于室内场景 (桌子、墙壁、房间) ,3DCS 显著优于 3DGS。这验证了凸包图元更适合人造几何结构的假设。

视觉对比

数据固然重要,但在计算机图形学中,视觉质量才是王道。

图 7: 定性比较。3DCS 与 3DGS 和 2DGS 的视觉输出对比。注意“火车 (Train)”和“卡车 (Truck)”场景中的清晰度。

在图 7 中,请看 Train 一行。3DGS 渲染中的背景结构模糊不清。3DCS 渲染则保留了建筑的硬线条。同样,在 Flowers 一行中,3DCS 比 3DGS 平滑后的表示更好地捕捉了草的高频细节。

另一个引人注目的对比是使用更少形状表示场景的能力。

图 11: 更少形状下的 3DCS 与 3DGS。这展示了当图元数量受限时,凸包泼溅如何保持结构完整性,而 3DGS 则溶解成一团模糊。

这张图 (图 11) 至关重要。它表明 3DCS 不仅仅是“不一样的泼溅技术”——它是一种语义上更好的分解 。 凸包自然地与实际物体 (如叶子或树桩) 对齐,而高斯只是创造了一层近似物体的雾。

效率对比

最后,让我们看看参数数量与质量 (LPIPS) 之间的权衡。

图 10: 参数数量 vs. LPIPS。图表显示,对于相同数量的参数,3DCS 始终能实现比 3DGS 更好的感知质量 (更低的 LPIPS) 。

红线 (3DCS) 始终位于蓝线 (3DGS) 下方。这意味着对于任何给定的内存或模型大小“预算”,凸包泼溅都能为你提供更好看的图像。

结论与启示

3D 凸包泼溅代表了“泼溅”领域的成熟。虽然 3D 高斯泼溅证明了我们可以实时渲染辐射场,但 3DCS 提出了一个重要问题: “高斯是完成这项工作的正确形状吗?”

答案似乎是: 并不总是。

通过采用 3D 光滑凸包,研究人员创建了一个系统,它:

  1. 尊重几何: 自然地处理硬边缘和平面表面。
  2. 节省内存: 更有效地表示体积,需要更少的图元。
  3. 保持质量: 在感知指标上优于高斯,特别是在室内、结构化场景中。

虽然与简单的高斯相比,它在渲染速度上略有下降,但为了获得的视觉保真度,这种权衡通常是值得的。这篇论文为未来的混合渲染引擎铺平了道路——也许未来的引擎会用凸包来渲染墙壁和物体,而用高斯来渲染烟雾和火焰。

对于计算机视觉的学生和研究人员来说,3DCS 是一个完美的例子,说明了重新审视基本假设 (如“我们应该使用什么图元?”) 如何能带来显著的性能突破。


本文中展示的所有图像和数据均直接来源于研究论文 “3D Convex Splatting: Radiance Field Rendering with 3D Smooth Convexes”。