引言

在神经渲染这一快速发展的领域,我们经常被迫在两条路之间做出选择: 物理准确性还是渲染速度

一方面,我们有像 NeRF (神经辐射场) 这样的光线追踪方法。它们一丝不苟地模拟光线穿过体积的过程,沿着光线积分密度。它们基于物理原理,能产生极其逼真的图像,但训练和渲染速度可能极其缓慢。

另一方面,我们有最近的超级明星: 3D 高斯泼溅 (3D Gaussian Splatting, 3DGS) 。 它速度极快,因为它将场景视为 3D 椭球体的集合,并使用光栅化技术将它们“泼溅 (splat) ”到屏幕上。然而,这种速度背后隐藏着代价。为了让数学计算适应实时光栅化,3DGS 做了一些数学近似。它本质上是将 3D 形状压扁成屏幕上的 2D 斑块,破坏了体渲染的物理规律。

但如果我们不需要做选择呢?如果我们既能保持光栅化的速度,又能恢复光线追踪的物理准确性呢?

这正是体积一致的 3D 高斯光栅化 (Volumetrically Consistent 3D Gaussian Rasterization) 背后的研究人员所实现的。在这篇文章中,我们将深入探讨他们如何找出标准高斯泼溅中的缺陷,并推导出一个闭式解析解来修正这些问题。其结果是一个渲染引擎,能够产生更锐利的边缘、更好的不透明表面,甚至可以用于计算机断层扫描 (CT 扫描) 等科学任务——同时保持极高的推理速度。

背景: 体渲染方程

要理解为什么标准 3D 高斯泼溅是一种近似,我们首先需要看看“基本真理”: 体渲染方程。这是 NeRF 使用的黄金标准。

当我们渲染一个像素时,本质上是从相机向场景投射一条光线 \(\boldsymbol{r}(t)\)。该像素的颜色 \(C(\boldsymbol{r})\) 取决于累积光线穿过的雾状体积的颜色和密度。

体渲染方程。

这里,\(\sigma(\boldsymbol{r}(t))\) 是光线上 \(t\) 点处的密度,\(c(\boldsymbol{r}(t), \boldsymbol{d})\) 是颜色。项 \(T(0,t)\) 代表透射率 (transmittance) ——即光线从起点传播到 \(t\) 点而不被遮挡的概率。

透射率至关重要。它的计算方式是累积密度的指数衰减:

透射率定义。

在像 3DGS 这样的基于点的场景表示中,密度 \(\sigma(\boldsymbol{x})\) 定义为许多 3D 高斯核 \(G_i\) 的总和,每个高斯核由不透明度系数 \(\kappa_i\) 加权:

定义为高斯之和的密度。

每个高斯核由其均值 \(\boldsymbol{\mu}\) (位置) 和协方差 \(\boldsymbol{\Sigma}\) (形状/尺度) 定义:

3D 高斯的定义。

标准 3DGS 如何“取巧”

严格计算上述积分需要沿着每条光线采样数百个点 (光线步进) ,这很慢。3DGS 通过使用泼溅 (Splatting) 技术绕过了这个问题。

3DGS 没有沿着光线对 3D 高斯进行积分,而是将 3D 椭球体投影到 2D 图像平面上。它使用 2D 公式来近似高斯的总贡献。光栅化中使用的标准 Alpha 混合公式如下所示:

Alpha 混合方程。

在标准 3DGS 中,Alpha 值 \(\alpha_i\) (即特定高斯在特定像素处看起来有多不透明) 是通过在像素坐标 \(p\) 处评估一个 2D 高斯来计算的:

3DGS 近似 Alpha 计算。

这里,\(\hat{G}_i\) 是一个 2D 高斯,它是通过近似相机投影 \(J\) (雅可比矩阵) 将 3D 协方差 \(\Sigma\) 压扁成 2D 协方差 \(\Sigma'\) 获得的:

3DGS 中的协方差投影。

问题所在: 这种投影依赖于仿射近似,并忽略了深度积分。它假设光线上雾的“厚重程度”可以用一个平坦的 2D 印记来表示。正如我们将看到的,这使得高斯无法看起来真正“实体化”,并在边缘处引入了伪影。

核心方法: 体积积分

这篇论文的关键洞察在于我们不需要进行泼溅 。 我们可以保留光栅化管线 (对高斯进行排序并从前向后绘制) ,但我们可以用 3D 高斯沿光线的精确解析积分来替换近似的 2D 投影。

1. 重新推导 Alpha 混合

首先,作者证明了体渲染方程确实可以表示为 Alpha 混合,前提是我们假设高斯是经过排序的且没有显著重叠。

如果我们将高斯之和代入体渲染积分中,我们得到:

高斯之和的体渲染。

假设高斯是按从前到后的顺序排列的,我们可以将这个积分拆分为离散的贡献。第 \(i\) 个高斯的颜色贡献由所有先前高斯的透射率 (\(\prod \overline{T}_j\)) 及其自身的内部吸收加权:

分离的体渲染方程。

这里,\(\overline{T}_j\) 是穿过第 \(j\) 个高斯的总透射率。

穿过单个高斯的透射率。

作者随后进行了一个巧妙的数学代换。他们意识到,密度乘以透射率的积分实际上就是透射率的变化量。这完美地简化并表明 Alpha 值 \(\alpha_i\) 恰好等于 \(1 - \overline{T}_i\):

从透射率推导 Alpha。

这让我们回到了熟悉的 Alpha 混合方程:

熟悉的 Alpha 混合方程。

这为什么重要? 它证实了我们可以使用光栅化器的快速 Alpha 混合引擎来求解体渲染方程。我们只需要正确地计算 \(\alpha_i\)。标准 3DGS 使用 2D 投影近似来计算 \(\alpha_i\)。而本文通过实际求解积分 \(\int \kappa_i G_i(\boldsymbol{r}(t)) dt\) 来计算 \(\alpha_i\)。

2. 解析解

那么,我们如何在不进行昂贵采样的情况下沿着光线积分 3D 高斯呢?

一个 3D 高斯,当限制在一条线 (光线) 上时,就变成了 1D 高斯 。 作者推导出了沿光线方向 \(\boldsymbol{d}\) 的 1D 高斯 \(g_j(t)\) 的参数:

沿光线的 1D 高斯。

均值 \(\gamma_j\) (高斯在光线上的中心位置) 和标准差 \(\beta_j\) (它在光线上的扩散程度) 可以使用光线起点 \(\boldsymbol{o}\) 和方向 \(\boldsymbol{d}\) 以闭式形式计算出来:

1D 高斯的参数。

现在,我们只需要积分这个 1D 高斯,从它进入光线到离开光线。

1D 高斯的积分。

方便的是,高斯函数的积分是已知的: 它就是误差函数 (Error Function, erf) 。 由于高斯衰减很快,我们可以从 \(-\infty\) 积分到 \(+\infty\) 来获得总光学深度。这给了我们穿过高斯的透射率的闭式解:

解析透射率解。

这就是“魔法公式”。通过计算这个值,我们确切地知道 3D 高斯遮挡了多少光线,这考虑了其完整的 3D 形状,且无需任何光线步进采样。

3. 视觉化差异

下图展示了标准 3DGS 方法与这种新体积方法之间的区别。

Alpha 计算的视觉对比。

在第一行 (3DGS) 中,Alpha 仅仅是峰值的最大密度值。在第二行 (Ours) 中,Alpha 源自曲线下的面积

这种区别对于渲染实体对象有着巨大的影响。

  • 3DGS (泼溅): 高斯被投影为 2D 斑块。它仅在其最中心处是完全不透明的 (\(\alpha=1\)) 。当你远离像素中心时,不透明度像钟形曲线一样下降。这使得很难表现平坦、坚固的墙壁。
  • Ours (体积): 如果你增加密度或增加高斯沿光线的长度,曲线下的面积就会增加。积分结果产生了一个“平顶”的不透明度分布。这意味着高斯可以看起来像一个边缘清晰的实心不透明圆盘,而不仅仅是一个模糊的斑块。

下图完美地展示了这种行为:

不透明度与密度和尺度的关系。

  • 图表 (a): 在提出的方法 (实线) 中,沿光线延伸高斯 (增加 \(S_z\)) 使其更加不透明。在 3DGS (虚线) 中,沿视线方向拉伸高斯对 2D 投影没有任何影响。
  • 图表 (b): 增加所提出方法中的密度会产生宽阔平坦的完美不透明高原。3DGS 只是让峰值变高,但形状仍然是一个狭窄的尖峰。

实验与结果

这种更好的数学方法真的能带来更好的图像吗?作者将他们的解析 Alpha 计算集成到了标准的 3DGS CUDA 光栅化器中进行了测试。

视图合成性能

该方法在 Mip-NeRF 360、Tanks & Temples 和 DeepBlending 等标准基准上进行了测试。

视图合成的定性结果。

在上面的定性结果中,请注意 Room 场景。3DGS 版本 (右) 难以创建实心的不透明表面,导致外观有些“浑浊”。提出的方法 (中) 渲染出了与真实情况 (左) 更加匹配的坚固、一致的表面。在 FlowersStump 场景中,新方法捕捉到了被 3DGS 近似模糊掉的更精细的高频细节。

最引人注目的演示之一是“正方形拟合”测试。研究人员尝试优化一组高斯来表示一个简单的平坦正方形。

拟合分段常数形状。

标准 3DGS (c) 无法生成锐利的正方形。因为每个基元都产生柔和的 2D 高斯泼溅,边缘是模糊的,中心也不完全均匀。体积方法 (b) 创建了一个近乎完美的正方形,因为积分允许高斯像不透明的“砖块”一样起作用。

在定量方面,该方法在 LPIPS (衡量图像看起来有多“自然”) 和 SSIM (结构相似性) 等感知指标上优于标准 3DGS 和其他基于光栅化的方法。

定量表格 1。

虽然 FPS (每秒帧数) 略低于原始 3DGS (在 Mip-NeRF360 上为 136 vs 159) ,但它仍处于实时范围内,明显快于光线追踪方法。

应用: 断层扫描

这种物理一致性最令人兴奋的应用或许是在计算机断层扫描 (CT) 中。

在 X 射线 CT 中,目标是从 2D 投影重建内部 3D 密度。这严格依赖于光衰减的物理原理 (比尔-朗伯定律) 。

用于断层扫描的比尔-朗伯定律。

因为标准 3DGS 是一种并不严格遵循密度积分的近似,所以它在科学重建方面的“开箱即用”性能很差。以前,研究人员必须发明专门的归一化方法 (如 \(R^2\)-Gaussian) 来修正这个问题。

然而,因为提出的方法就是体积分的解析解,所以它无需任何修改即可用于断层扫描。

断层扫描视觉结果。

如下表所示,该方法在使用更少点数的情况下,匹配了最先进的专用断层扫描求解器 (如 \(R^2\)-Gaussian) 。

断层扫描定量结果。

局限性

没有哪种方法是完美的。虽然这种方法修正了积分物理原理,但它仍然依赖于光栅化框架,该框架假设基元是经过排序的且不重叠。

实际上,柔和的高斯云确实会重叠。作者将他们的方法与严谨 (但缓慢) 的光线步进参考进行了比较,以查看光栅化假设在何处失效。

与光线步进的比较。

如第 3 行所示,当基元严重重叠时,光栅化假设 (顺序计算 Alpha) 与真实的体积总和略有偏差。然而,在第 4 行 (随机云) 中,我们可以看到对于一般场景,误差极小。

此外,由于该方法更擅长渲染不透明实体,有时它可能会好得过头了。如果相机标定略有偏差 (姿态错误) ,标准 3DGS 会通过模糊图像来隐藏错误。提出的方法试图渲染坚硬的不透明表面,导致在几何体未完美对齐时出现“悬浮”伪影。

标定不良导致的失败案例。

结论

“体积一致的 3D 高斯光栅化”填补了神经渲染领域的一个重要空白。它证明了我们不需要为了光栅化的速度而牺牲物理准确性。通过将近似的 2D 泼溅数学替换为精确的 3D 积分,作者创建了一个具有以下特点的渲染引擎:

  1. 更准确: 产生更锐利的边缘和更好的实心表面。
  2. 更通用: 开箱即用,能够胜任断层扫描等科学任务。
  3. 依然快速: 保持实时帧率。

这项工作奠定了数学基础,可能使高斯泼溅从漂亮的图片扩展到严谨的科学可视化和重建任务中。