Gaussian Frosting:高斯糖霜,可编辑的实时渲染辐射场
Gaussian Frosting 高斯糖霜(简称 Frosting)
[!abstract]
我们提出了 Gaussian Frosting,这是一种新的基于 Mesh 的表示,用于实时高质量渲染和编辑复杂的 3D 效果。我们的方法建立在最近的 3DGS 框架的基础上,该框架优化了一组 3D 高斯以近似图像的辐射场。
我们建议在优化期间首先从高斯中提取基础 Mesh ,然后在 Mesh 周围构建和细化具有可变厚度的自适应高斯层,以更好地捕捉曲面附近的精细细节(fine details)和体积效果,例如头发或草。我们将这一层称为高斯糖霜,因为它类似于蛋糕上的糖霜涂层。材质越绒软(fuzzier,毛发柔软卷曲的),糖霜就越厚。 我们还引入了高斯参数化以强制它们留在糖霜层内,并在变形、重新缩放、编辑或对 Mesh 动画处理时自动调整其参数。
我们的表示允许使用 GS 进行高效渲染,以及通过修改基础 Mesh 进行编辑和动画。我们证明了我们的方法在各种合成和真实场景上的有效性,并表明它优于现有的基于曲面的方法。我们将发布我们的代码和基于网络的查看器作为额外的贡献。
Keywords: Gaussian Splatting Mesh Differentiable rendering
图 1:我们提出通过覆盖有由 3D 高斯构成的不同厚度的“糖霜”层的 Mesh 来表示曲面。 这种表示捕捉了由猫的头发或草等绒软材质以及平坦曲面产生的复杂体积效果。它仅由 RGB 图像构建,可以使用传统动画工具进行实时渲染和动画处理。在上面的示例中,我们能够为 Buzz 和小猫制作动画,改变它们的原始姿势 (a),同时保留高质量渲染 (b):与 SuGaR 不同,可以看到非常精细的绒毛/草的细节,例如小猫的头发以逼真的方式覆盖巴兹的腿 (c)。
1 引言
3DGS 最近征服了 3D 重建和基于图像的渲染(IBR)领域。通过用大量微小高斯表示场景,3DGS 可以快速重建和渲染,同时很好地捕捉精细细节和复杂的灯光效果。与早期的神经渲染方法(例如 NeRFs)相比,3DGS 在重建和渲染阶段都更加高效。
然而,与 NeRF 一样,原版 3DGS 不允许对重建场景进行简单编辑。高斯是非结构化的,彼此分离,并且不清楚设计师如何操纵它们,例如为场景设置动画。最近,SuGaR 展示了如何从 3DGS 的输出中提取 Mesh 。然后,通过限制高斯留在 Mesh 上,可以使用传统的计算机图形工具来编辑场景以操纵 Mesh。但通过将高斯扁平化(flattening)到到 Mesh 上,SuGaR 失去了 3DGS 用于绒软材质和体积效果可能达到的渲染质量。在本文中,我们介绍了高斯糖霜,它是 3D 场景的混合表示,可作为 Mesh 进行编辑,同时提供至少与 3DGS 相当、有时优于 3DGS 的渲染质量。
糖霜的关键思想是用包含高斯的层来扩充(augment) Mesh 。糖霜层的厚度会根据场景的材质进行局部调整:对于平坦的曲面,该层应较薄,以避免出现不良的体积效果;对于绒软材质,该层应较厚,以实现真实感渲染,如图 2 所示,使用 Frosting 表示,我们不仅可以检索高精度的可编辑 Mesh ,还可以实时渲染复杂的体积效果。
图 2:示例中糖霜层厚度的可视化。较厚的层显示为较亮的值。我们的方法会自动为绒软区域(例如小熊猫毛绒的毛皮)构建厚的糖霜层,并为桌子或地板等平坦曲面自动构建薄的糖霜层。
调整糖霜层的厚度可以在曲面附近需要更多体积渲染的区域分配更多高斯,从而在场景中实现高斯的有效分布。 正如我们在论文中所演示的,使用自适应厚度比使用预定义的恒定厚度可以获得更高的性能,并减少 Mesh 动画时的伪影。
糖霜让人想起自适应壳表示(Adaptive Shells)[40],它依赖于从有向距离场(SDF) 中提取的两个显式三角形 Mesh 来控制体积效果。 尽管如此,糖霜将优于自适应壳的渲染质量与 3DGS 重建和渲染的速度效率结合在一起,同时由于它依赖于单个 Mesh 而易于编辑。
虽然糖霜表示很简单,但定义糖霜层的局部厚度具有挑战性。 为了提取 Mesh ,我们本质上依赖于 SuGaR,我们使用一种技术([[#7 改进曲面重建]])对其进行了改进,以自动调整关键超参数。
为了估计糖霜厚度,我们引入了一种方法,根据 3DGS 最初检索到的 Mesh 周围的高斯,定义该 Mesh 每个顶点处糖霜层的内外边界。
最后,我们用随机采样的高斯填充糖霜层,并优化这些限制在层内的高斯。我们还提出了一种简单的方法,可以在 Mesh 动画时自动地实时调整高斯的参数。
总之,我们提出了一种简单但功能强大的曲面表示,可以捕获复杂的体积效果,可以使用传统工具进行编辑,并且可以实时渲染。我们还提出了一种基于 GS 最新进展的从图像构建这种表示的方法。作为额外贡献,我们将发布我们的代码,包括可在浏览器中使用的查看器。
图 3:场景组合。使用 Blender 中的 Mesh 编辑工具,我们能够组合多个场景 (a) 中的各种元素来构建一个全新的场景 (c)。我们还使用 Blender 中的索具工具(rigging tool)改变了角色的姿势 (b)。与 SuGaR 等基于曲面的方法类似,Frosting 可用于编辑和合成场景,但可以更好地渲染复杂的体积效果和绒软材质,例如头发或草。
2 相关工作
基于图像的渲染 (IBR) 目标是从给定的一组图像创建场景的表示,以便生成场景的新图像。人们已经提出了不同类型的场景表示,从显式和可编辑的(如三角形 Mesh 或点云)到隐式或不可编辑的(如体素 Mesh 、多平面图像或神经隐式函数)。
体积 IBR 方法: IBR 的最新突破是神经辐射场 (NeRF) ,它使用多层感知机(MLP) 来模拟密度和颜色的连续体积函数。 NeRF 可以通过使用体积光线步进来渲染具有高质量和视角相关效果的新视角。然而,NeRF 速度慢且内存消耗大。有几项工作试图通过使用离散体积表示(如体素 Mesh 和哈希表)来存储可学习的特征来提高 NeRF 的效率和训练速度,这些特征可作为更小的 MLP 的输入 [5,15,24,37,45],或者改进通过使用分层采样策略来提高渲染性能[2,13,29,46]。其他作品还建议修改 NeRF 的辐射度表示,并包含显式光照模型,以提高具有镜面材质的场景的渲染质量 [38,3,21,36,47]。然而,大多数体积方法依赖于隐式表示,与三角形 Mesh 相比,这些隐式表示不适合编辑,而大多数标准图形硬件和软件都是针对三角形 Mesh 定制的。
基于曲面的 IBR 方法:在从运动恢复结构 (SfM) [ 35] 和多视图立体 (MVS) [ 10] 启用曲面 3D 重建之后,三角形 Mesh 已成为一种流行的 3D 表示,用于生成场景的新视角 [41,4,12] 。基于深度学习的 Mesh 表示[30, 31]也已被用于使用显式曲面 Mesh 来改进视角合成;然而,尽管基于 Mesh 的方法可以实现非常高效的渲染,但它们在捕获复杂且非常精细的几何形状以及绒软材质方面遇到了困难。
混合 IBR 方法:一些方法使用混合体积表示来恢复适合下游图形应用程序的曲面 Mesh ,同时有效地建模依赖于视图的外观。具体来说,一些工作优化了神经辐射场,其中密度被隐式有向距离场 SDF 取代,这为底层几何提供了更强的正则化(regularization)[25,42,39,22,9,8]。然而,这些方法大多数都不是针对实时渲染的。为了缓解这个问题,其他方法通过在使用专用的依赖于视图的外观模型优化后将渲染计算“烘焙”到提取的 Mesh 中来大大加速渲染[7,43,28]。尽管这些基于曲面的方法在优化期间使用由 MLP 表示的体积函数对曲面进行编码,但与体积方法相比,它们在捕获精细细节或绒软材质方面存在困难。
自适应壳(Adaptive Shells)[40]是一种最新的方法,它通过使用真正的混合曲面体积方法将 NeRF 的体积渲染限制在对象周围的薄层,从而显着提高了渲染质量。该层由两个显式 Mesh 界定,这些 Mesh 是在优化基于 SDF 的辐射场后提取的。与单个平面 Mesh 相比,该层的可变厚度还提高了渲染质量。该方法通过操作定义了层的两个显式 Mesh ,将全体积方法的高质量渲染与基于曲面的方法的可编辑性结合起来。然而,自适应壳依赖于神经 SDF [39],其在重建精确曲面的能力方面存在一些限制,并且需要超过 8 个小时来优化单个合成场景,这比最近的 GS 方法要长得多。
** GS **。高斯溅射 [17] 是一种新的体积表示,其灵感来自基于点云的辐射场 [20, 32],它的优化速度非常快,并且允许以非常好的质量进行实时渲染。其最大的优势之一是其显式的 3D 表示,这使得编辑任务成为可能,因为每个高斯单独存在,并且可以轻松地实时调整。一些外观编辑和分割方法已经被提出[6,14,18,44],但是点云中缺乏结构使得 3D 艺术家或动画师几乎不可能轻松地修改、雕刻或添加动画。三角形 Mesh 仍然是这些应用的标准 3D 结构。最近的一项工作 SuGaR [11] 通过将高斯与曲面对齐并从中提取 Mesh 来扩展此框架。高斯最终被展平并固定在 Mesh 的曲面上,这提供了一种将 Mesh 的可编辑性与 GS 的高质量渲染相结合的混合表示。然而,SuGaR 仍然是基于曲面的表示,在重建和渲染绒软材质和体积效果方面的能力有限,导致与原生 GS 相比性能下降。
3 3DGS 和曲面重建
我们的方法依赖于原始的 3DGS 方法 [17] 进行初始化,并依赖 SuGaR [11] 将高斯与场景曲面对齐并促进 Mesh 的提取。我们在本节中简要描述 3DGS 和 SuGaR,然后在下一节中描述我们的方法。
3.1 3DGS 简介
3DGS 将场景表示为一组高斯。每个高斯 $g$ 都配有均值 $\mu_g∈ℝ^3$ 和正定协方差矩阵 $\Sigma_g∈ℝ^{3×3}$ 。协方差矩阵由缩放向量 $s_g∈ℝ^3$ 和编码高斯旋转的四元数 $q_g∈ℝ4$ 参数化。
此外,每个高斯都有一个由不透明度 $\alpha_g∈[0,1]$ 表示的与视图相关的辐射率和一组定义向所有方向发射的颜色的球谐坐标。为了从给定的视点渲染图像,光栅化器将 3D 高斯“泼溅”为平行于图像平面的 2D 高斯,并根据分布的不透明度和深度来混合这些分布。 这种渲染速度非常快,这是 3DGS 相对于 NeRF 中的体积渲染的优势之一,例如 [23,24,2]。
GS 可以看作是辐射场的传统体积渲染的近似,其密度函数 $d$ 计算公公式为:
$$
d(p)=\sum_g\alpha_g\exp\left(-\frac{1}{2}(p-\mu_g)^T\Sigma_g^{-1}(p-\mu_g)\right)\tag{1}
$$
我们使用原版 3DGS 优化来初始化高斯糖霜方法:使用 SfM [35] 算法(如 COLMAP [34, 33])生成的点云来初始化高斯,需要计算相机位姿。然后,使用仅由像素级 L1 距离和结构性更强的 D-SSIM 项组合而成渲染 loss,对高斯参数(3D 均值(means)、缩放向量、四元数、不透明度和球谐坐标)进行优化,以使渲染图像与 GT 相匹配。
3.2 SuGaR Mesh 提取
原版 3DGS 没有明确鼓励高斯与场景的真实曲面对齐的正则化项。我们的高斯糖霜表示依赖于近似该曲面的 Mesh ,以便可以通过传统工具进行编辑。为了获得这个 Mesh ,我们依靠 SuGaR [11] 中提出的方法,并通过自动选择关键超参数来改进该方法。
SuGaR 提出了一个正则化项,鼓励在 GS 的优化期间将 3D 高斯与场景的真实曲面对齐,还提出了一个 Mesh 提取方法。执行正则化后,优化提供的高斯大部分与曲面对齐,尽管并不完美:我们注意到,在实践中,正则化高斯与提取的 Mesh 之间存在较大差异,表明存在需要体积渲染的绒软材质或曲面。 因此,我们利用这种差异作为评估糖霜应该更厚的地方的线索。
4 从图像创建糖霜层
在本节中,我们将描述高斯糖霜创建方法:首先,我们使用 SuGaR 提取具有最佳分辨率的可编辑曲面。然后,我们详细介绍如何使用这个基于曲面的模型返回到围绕 Mesh 构建的体积但可编辑的表示(volumetric but editable representation)。 这种表示适应场景的复杂性及其对更多体积效果的需求。最后,我们描述如何参数化和细化这种表示。图 4 提供了概述。
图 4:创建一层高斯糖霜。为了构建我们提出的 Frosting 表示,我们首先使用渲染 loss 优化 GS 表示,而无需任何额外的约束,让高斯自己定位。我们将这些高斯称为无约束高斯(unconstrained)。然后,我们对这些高斯进行正则化,以强制它们与曲面对齐,并提取一个 Mesh 作为 Frosting 的基础。
接下来,我们使用曲面对齐高斯(称为正则化高斯 regularized) 的对齐偏差(misalignment)来识别需要更多体积渲染的区域,并围绕 Mesh 的顶点 $v_i$ → 构建搜索间隔 $J_i$ 。最后,我们使用无约束高斯的密度函数来细化间隔,从而产生糖霜层。我们最终在层内采样了一组新的、密集化的高斯。
4.1 forward 前向过程:从体积到曲面
我们首先在短时间内优化无约束的 GS 表示,让高斯自行定位。我们将此类高斯称为无约束高斯(unconstrained)。我们将这些高斯函数放在一边,并应用 SuGaR 中的正则化项来强制高斯与真实曲面的对齐。我们将这些高斯函数称为正则化高斯(regularized)。
一旦我们获得了正则化高斯,我们就可以从 GS 表示中提取曲面 Mesh 。该曲面 Mesh 作为我们表示的基础。像 SuGaR [11] 一样,我们然后在 GS 密度函数的可见水平集(visible level set)上采样点,并应用泊松重建。
在补充材料中,我们描述了自动估计泊松重建所使用的一个关键超参数(即八叉树深度 $D$ )的良好值(good value)的技术。正如我们将在实验部分中展示的那样,在应用泊松重建时为 $D$ 选择正确的值可以极大地提高 Mesh 质量和模型的渲染性能。图 5 说明了这一点。
图 5:SuGaR 从 Shelly 数据集中提取的 Mesh 的比较,根据场景的复杂程度,我们可以自动调整泊松重建中的八叉树深度 D。 。我们的技术(底部)极大地减少了许多场景的曲面伪影,例如使用 [11]中的默认值时曲面上的孔和椭圆体凹凸。
4.2 backward 反向过程:从曲面到体积
提取基础 Mesh 后,我们构建一个厚度可变、在该 Mesh 周围包含高斯的糖霜层。我们希望该层在曲面附近需要更多体积渲染的区域更厚,例如头发或草等绒软材质。相反,该层在场景中与明确的平坦曲面(例如木材或塑料)对应的部分附近应该非常薄。
图 6:我们如何定义糖霜层的内外边界。参见第 4.2 节中的文字。
如图 6 所示,为了定义该层,我们为提取的基础 Mesh $M$ 的每个顶点 $v_i$ 引入两个值 $\delta_i^{\mathrm{in}}$ 和 $\delta_i^{\mathrm{out}}$ 。这给出了两个分别具有顶点 $(\boldsymbol{v}_i+\delta_i^\mathrm{in}\boldsymbol{n}_i)_i$ 和 $(\boldsymbol{v}_i+\delta_i^\mathrm{out}\boldsymbol{n}_i)_i$ 的曲面,其中 $n_i$ 是顶点 $v_i$ 处的 Mesh 法线。这两个曲面定义了糖霜层的内外边界。请注意,我们不必显式构建它们,因为它们直接依赖于基础 Mesh 以及 $\delta_i^{\mathrm{in}}$ 和 $\delta_i^{\mathrm{out}}$ 。
为了找到 $\delta_i^{\mathrm{in}}$ 和 $\delta_i^{\mathrm{out}}$ 的良好值,我们最初尝试直接使用无约束高斯,即在应用 SuGaR 正则化项之前获得的高斯。不幸的是,如果没有正则化,即使对于“非绒软”曲面, GS 也倾向于检索厚的高斯层,这将导致 $\delta_i^{\mathrm{in}}$ 和 $\delta_i^{\mathrm{out}}$ 的值过大。此外,无约束高斯通常包含许多透明漂浮物(floater)和其他离群高斯(outlier)。这种高斯也可能使偏移偏向不必要的大值。
另一方面,仅使用正则化高斯函数来设置 $\delta_i^{\mathrm{in}}$ 和 $\delta_i^{\mathrm{out}}$ 可能会错过绒软区域,因为这些高斯通过正则化变得更加平坦。
因此,我们的解决方案是考虑无约束高斯和正则化高斯。 更确切地说,我们通过寻找无约束高斯的等值面,根据它们的厚度来估计糖霜层厚度,但是为了确保我们考虑接近场景曲面的等值面,我们搜索接近正则化高斯的等值面:即使在受 SuGaR 正则化项的影响,高斯模型与具有绒软细节的曲面周围的几何形状也不能很好地对齐。 因此,正则化高斯的局部厚度可以指示材质的绒软程度。
图 6 说明了我们如何修复 $\delta_i^{\mathrm{in}}$ 和 $\delta_i^{\mathrm{out}}$ :
为了限制搜索,我们为每个顶点 $v_i$ 定义第一个区间 $I_i=[-3\sigma_i,3\sigma_i]$ ,其中 $\sigma_i$ 是最接近 $v_i$ 的正则化高斯在 $n_i$ 正方向上的标准差。
$I_i$ 是 $t$ 的 1D 高斯函数沿法线的 99.7 置信水平的置信区间。绒软部分通常会导致较大的 $I_i$ 。我们可以使用 $I_i$ 来限制对无约束高斯等值面的搜索。通过在 $I_i$ 内沿 $n_i$ 查找正则化高斯函数的等值面,可以获得更可靠的搜索区间 $J_i$ :
$$
\epsilon_i^\mathrm{in}=\inf(T),\epsilon_i^\mathrm{out}=\sup(T),\text{其中}T={t\in I_i|d_r(\boldsymbol{v}_i+t\boldsymbol{n}_i)\geq\lambda}\tag{2}
$$
其中,$d_r$ 是公式 (1) 中定义的正则化高斯的密度函数。在实践中,我们使用等值面水平 $\lambda=0.01$ ,即接近于零。最后,我们可以将内部和外部移位(shifts) $\delta_i^{\mathrm{in}}$ 和 $\delta_i^{\mathrm{out}}$ 计算为:$$
\delta_i^\mathrm{in}=\inf(V),\delta_i^\mathrm{out}=\sup(V),\text{其中}V={t\in J_i|d_u(\boldsymbol{v}_i+t\boldsymbol{n}_i)\geq\lambda}\tag{3}
$$使用 $\epsilon_{i}^{\mathrm{in}}$ 和 $\epsilon_{i}^{\mathrm{out}}$ 定义区间 $J_{i}\colon J_{i}=\begin{bmatrix}\epsilon_{i}^{\mathrm{mid}}-k\epsilon_{i}^{\mathrm{half}},\epsilon_{i}^{\mathrm{mid}}+k\epsilon_{i}^{\mathrm{half}}\end{bmatrix}$ ,其中 $\displaystyle \epsilon_{i}^{\mathrm{mid}}=\frac{\epsilon^{\mathrm{in}}+\epsilon^{\mathrm{out}}}{2}\mathrm{,}\epsilon_{i}^{\mathrm{half}}=\frac{\epsilon^{\mathrm{out}}-\epsilon^{\mathrm{in}}}{2}$ 。
我们取 $k=3$ ,因为它给出的区间足够大,可以包含大多数无约束高斯,同时拒绝离群高斯。
图 7:使用高斯糖霜渲染复杂场景。
- 第一行:渲染
- 第二行:恢复的法线贴图
- 第三行:估计的糖霜厚度。请注意,正如预期的那样,头发和草等绒软材质上的糖霜很厚,而第四列桌子等平坦曲面上的糖霜则非常薄。
4.3 糖霜优化
一旦我们构建了糖霜层的内外边界,我们就初始化该层内的一组密集高斯,并使用 3DGS 渲染 loss 对其进行优化作为无约束高斯。
为了确保高斯在优化期间留在糖霜层内,我们引入了新的高斯参数化(parameterization)。此外,这种参数化可以在编辑场景时轻松调整高斯参数。
4.3.1 参数化 parameterization
让我们考虑基础 Mesh $M$ 的三角形面,其顶点由 $v_0,v_1,v_2$ 及其相应的法线 $n_0,n_1,n_2$ 表示。从无约束高斯函数中提取内部和外部移位 $\delta_i^{\mathrm{in}}$ 和 $\delta_i^{\mathrm{out}}$ 后,我们获得了六个新顶点 $(\boldsymbol{v}i+\delta_i^\mathrm{in}\boldsymbol{n}i){i=0,1,2}$ 和 $(\boldsymbol{v}i+\delta_i^\mathrm{out}\boldsymbol{n}i){i=0,1,2}$ ,它们分别属于糖霜的内部和外部边界。
具体来说,这六个顶点界定出一个不规则三棱柱。我们将这种多面体称为棱柱形单元(prismatic cells,后文简称 cell) 。我们参数化位于 cell 内的高斯 $g\in\mathcal{G}$ 的 3D mean $\mu_g\in\mathbb{R}^3$ ,其中一组六个重心坐标分为两个子集 $(b{g}^{(i)}){i=0,1,2}$ 和 $(\beta_{g}^{(i)}){i=0,1,2}$:
$$\mu_g=\sum{i=0}^2\left (b_g^{(i)}\left (\boldsymbol{v}_i+\delta_i^\mathrm{out}\boldsymbol{n}_i\right)+\beta_g^{(i)}\left (\boldsymbol{v}_i+\delta_i^\mathrm{in}\boldsymbol{n}i\right)\right)\tag{4}$$
其中重心坐标符合 $\sum{i=0}^2(b_g^{(i)}+\beta_g^{(i)})=1$。通过使用重心坐标强制高斯留在相应的 cell 内,并保证优化过程中表示的稳定性。在实践中,我们对参数应用 softmax 激活来优化以获得总和为 1 的重心坐标。
4.3.2 初始化
对于用户提供的给定**高斯预算 $N$**,我们通过在糖霜层中采样 N 个三维中心 $\mu_g$ 来初始化场景中的 N 个高斯。具体来说,在对单个高斯进行采样时,我们首先以与其体积成正比的概率随机选择一个 cell 。然后,我们对总和为 1 的随机坐标进行采样。这种采样方式可以在几何形状绒软和复杂的区域分配更多的高斯,因为这些区域需要更多的体积渲染。不过,图层中的平面部分也可能需要大量高斯来恢复纹理细节。因此,在实践中,我们在 cell 中实例化了 N/2 个概率均匀的高斯,以及 N/2 个概率与单元体积成正比的高斯。 ^3qxo5u
我们用无约束表示中最接近高斯的颜色来初始化高斯的颜色。然而,我们不使用无约束高斯函数来初始化不透明度、旋转和缩放因子,就像在实践中一样,遵循 3DGS [17] 中的策略,这些参数可以提供更好的性能:我们假设糖霜层内部高斯的位置和配置已经是一个很好的初始化,并且重置不透明度、缩放因子和旋转有助于高斯模型重新开始,避免以前无约束高斯模型遇到的潜在局部最小值。
与原始 GS 密集化化过程相比,我们的表示可以更好地控制高斯数量,因为用户可以自行决定在糖霜层中实例化的高斯数量。 这些高斯将以非常有效的方式散布在整个糖霜中,适应整个场景中体积渲染的需要。
4.3.3 优化高斯糖霜
我们重新加载无约束高斯并应用我们的方法来计算糖霜的内外边界。然后,对于给定的高斯预算 $N$,我们在糖霜中初始化 $N$ 高斯并优化表示,同时保持高斯数量不变。请注意,与原版 3DGS 相比,这可以精确控制高斯的数量。
4.3.4 糖霜的编辑、变形和动画
Editing, Deforming, and Animating the Frosting
在对基础 Mesh 进行变形时,由于使用了重心坐标,高斯的位置会在糖霜层中自动调整。
为了自动调整高斯的旋转和缩放因子,我们提出了一种与 SuGaR 基于曲面的调整不同的策略:
- 在一个中心为 $c$、顶点为 $v_i$ 且 $0 ≤ i < 5$ 的给定 cell 中,我们首先通过计算矢量 $(c - v_i)$ 的旋转和缩放来估计每个顶点 $v_i$ 的局部变换。
- 然后,我们使用高斯 $g$ 的重心坐标,根据所有 6 个顶点的变换计算出 $\mu_g$ 点的平均变换,并应用该平均变换调整 $g$ 的旋转和缩放因子。
- 请注意,在实践中还要对球谐进行调整,以确保发射辐射度的一致性取决于应用于高斯的平均旋转。
[!quote] 细节
- 为了计算顶点 $v_i$ 的局部旋转,我们使用了轴角表示法 (axis-angle),其中轴角是向量 $(c - v_i)$ 的先前值和当前值之间的归一化叉乘。
- 顶点 $v_i$ 处的局部重缩放 (rescaling)变换计算为沿轴 $(c - v_i)$ 用适当因子缩放但其他轴保持不变的变换。
- 要更新高斯 $g$ 的缩放因子和旋转,我们首先要在高斯的三个主轴上分别应用这六种变换。然后,我们使用高斯中心 $\mu_g$ 的重心坐标对得到的轴进行平均。最后,我们对得到的三个轴进行正交化处理。
5 实验
5.1 实现细节
我们使用 PyTorch [26] 实现了我们的方法,并在单个 GPU Nvidia Tesla V100 SXM2 32 Go 上对表示进行了优化。根据场景的复杂程度,在单个 GPU 上优化一个完整的、可编辑的 Frosting 模型需要 45 到 90 分钟。这种优化方法比文献中与 Frosting 最相似的方法(即 Adaptive Shells [40])要快得多,后者在单个 GPU 上处理合成场景需要 8 小时,而处理真实场景则需要 1.7 倍的迭代时间。
**提取曲面 Mesh **:在重建真实场景时,我们沿用原生 3DGS [17] 的方法,首先使用 COLMAP 估算摄像机位姿,然后提取点云进行初始化。对于已知摄像机位姿的合成场景,我们只使用随机点云进行初始化。然后,我们对无约束 GS 表示进行 7000 次迭代优化。我们将这些高斯保存在一旁,并应用 SuGaR 的正则化项,直到迭代 15000 次。最后,我们计算出最佳八叉树深度参数 ̄ $\bar{D}(γ = 100)$,并按照文献[11]中的描述,应用泊松曲面重建从正则化高斯中提取 Mesh 。
优化高斯糖霜:给定高斯预算 $N$,我们在糖霜层中初始化 $N$ 个高斯,并对其进行 15000 次额外的迭代优化,这样总共进行了 30000 次迭代,与 3DGS [17]类似。原版 3DGS 优化通常会产生 100 万到 500 万个高斯。在实践中,我们对真实场景使用 $N = 500$ 万,对合成场景使用 $N = 200$ 万。
5.2 复杂场景中的实时渲染
为了评估高斯糖霜的渲染质量,我们计算了标准指标 PSNR、SSIM 和 LPIPS [48],并将其与几种基准进行比较,其中一些基准只关注新视角合成 [1, 2, 17, 23, 24, 39, 45],其他基准则与 Frosting 一样,依赖于可编辑的表示法 [7,11,27,28,40,43]。我们在包含合成场景和真实场景的几个具有挑战性的数据集上计算了指标。
图 8:使用原生 Gaussian Splatting [17](中)和 Gaussian Frosting(右)重建的 Shelly 数据集 [40] 中绒软材质的特写视图。
Shelly 数据集:我们首先在 Adaptive Shells [40] 中引入的数据集 Shelly 上将 Frosting 与最先进的方法进行比较。Shelly 包含六个合成场景,其中的绒软材质具有挑战性,基于曲面的方法很难准确重建。如表 1 和图 8 所示,Frosting 在所有三个指标上都优于其他方法。Frosting 甚至在很大程度上优于原版 Gaussian Splatting,后者不受任何曲面约束,只专注于优化渲染质量。事实上,与 3DGS [17] 中提出的策略相比,Frosting 层内的高斯采样提供了更有效的高斯密集化,它针对靠近曲面的高难度绒软区域,并在需要体积渲染的地方分配了更多的高斯。
NeRFSynthetic 数据集: 表 1 比较了 NeRFSynthetic 数据集[23],该数据集由八个合成场景组成。Frosting 在可编辑方法中表现最佳,超过了 SuGaR [11],与原版 3DGS 和其他辐射场方法的效果相当。
表 1:在合成数据集 Shelly [40] 和 NeRFSynthetic [23] 上对渲染质量的定量评估。在所有方法中,Frosting 是最好的,甚至优于只关注渲染的不可编辑模型。与无约束 3DGS [17]相反,我们的表示法可以通过针对具有挑战性的绒软区域,更有效地对高斯进行密集化处理。
Mip-NeRF 360:我们还在 Mip-NeRF 360 数据集 [2] 的真实场景上将 Frosting 与最先进的方法进行了比较。该数据集包含的图像来自七个具有挑战性的真实场景,但都是在理想的照明条件下拍摄的,并提供了非常好的相机校准数据和初始 SfM 点。结果见表 2 和图 7。在所有可编辑的方法中,Frosting 的性能最好,与原版 3DGS 相比,Frosting 的效果较差,但也很有竞争力。当 3DGS 的初始化非常好,有大量的 SfM 点时,高斯糖霜密集化带来的好处就不那么有效了,而像 3DGS 那样在没有额外约束条件的情况下优化高斯,性能会略有提高。
表 2:Mip-NeRF 360 数据集[2]上渲染质量的定量评估。在使用显式 Mesh 恢复可编辑辐射场的方法中,Frosting 的效果最好,其性能可与 NeRF 方法和原版 3DGS 媲美。
5.3 编辑、合成和动画
图 9:使用 Frosting 制作动画的示例。我们可以使用 Blender 中的 rigging tool 为左图中的雕塑制作动画。
如图 1、图 3 和图 9 所示,我们的 Frosting 表示法可在编辑、重新缩放、变形、组合或动画基础 Mesh 时自动适应。Frosting 提供的编辑、组合和动画功能与基于曲面的方法(如 SuGaR[11])类似,但由于其具有可变厚度的糖霜层,能适应场景中的体积效应和绒软材料,因此性能要好得多。
5.4 消融实验:Octree Depth
为了演示我们自动计算泊松重建的最佳八叉树深度 ̄ $\bar{D}$ 的技术如何提高 Frosting 的性能,我们在表 4 中提供了我们的完整模型与使用与 SuGaR 相同的预定义深度参数的 Frosting 版本之间的渲染性能比较。这种技术以更少的三角形实现了同等甚至更好的渲染性能。
表 4:泊松曲面重建中八叉树所使用的两种不同深度计算方法的消融情况。我们比较了使用高值预定义深度(如文献 [11] 所述)和自动计算深度的渲染性能。我们的技术会根据场景的复杂程度系统地选择最佳深度,避免 Mesh 中出现伪影,从而以更少的三角形平均数量获得同等或更好的渲染性能。
5.5 消融实验:糖霜层厚度
表 5:比较计算糖霜层厚度的不同策略。我们比较了合成场景和真实场景中的渲染性能(PSNR ↑),这取决于我们如何计算和改进糖霜层的厚度。具体来说,我们首先表明,使用自适应厚度比使用恒定厚度更能提高性能。尽管使用较大的恒定厚度可以提高像 Shelly[40]这样材质非常模糊的场景的性能,但这降低了平面场景的性能,并且在编辑场景时会产生伪影,如图 10 所示。相比之下,我们的方法能自动适应曲面类型。我们还证明,要想获得最佳性能,必须使用无约束高斯来细化厚度。
我们还在表 5 中提供了一项消融实验,比较了计算糖霜层厚度的不同策略。具体来说,我们首先评估了恒定厚度冰霜层的渲染性能。我们对小、中、大厚度值进行了重复实验,使用不同的内部和外部偏移量 $\delta^{in}$ 和 $\delta^{out}$ 来计算恒定厚度。我们发现,使用自适应厚度比使用恒定厚度更能提高性能,这是因为:
- 一些绒软材料需要较厚的糖霜才能准确渲染
- 一些平面使用很薄的糖霜渲染效果更好
因此,即使使用较大的恒定厚度可以提高像 Shelly[40]这样绒软材质场景的性能,但却会降低平面场景的性能。此外,如图 10 所示,使用自适应厚度而非大值恒定厚度有助于大大减少伪影。
我们还表明,要想获得最佳性能,就必须使用无约束高斯来细化霜冻的厚度。 为此,我们跳过了细化过程,并评估 $\delta^\mathrm{in}=\epsilon^\mathrm{in},\delta^\mathrm{out}=\epsilon^\mathrm{out}$ 时 Frosting 图层的渲染性能。这导致性能降低,如表 5 所示。
图 10:与恒定厚度的比较。我们为 Frosting 计算自适应厚度的策略对于在编辑场景时保持最佳性能并避免伪影至关重要。如右图所示,使用恒定厚度可能会在动画角色时产生伪影:在该场景中使用恒定的大厚度时,位于骑士右膝盖附近的高斯参与了右手的重建,这在移动手部时会产生伪影。
6 总结
我们提出了一种简单但功能强大的曲面表示,它与目前的其他表示相比具有许多优势,同时还提出了一种从图像中提取曲面的方法。
我们的实现方法有一个局限,那就是采用了简单的形变模型(deformation model),因为它是片线性的(piecewise linear)。不过,用更复杂的、基于物理的形变模型来取代它应该很简单。
另一个限制是,我们的模型比普通 GS 模型要大,因为我们必须包含重心坐标和 Mesh 顶点。最近关于压缩 3DGS 的研究可能会有所帮助(⭐优化方向)。我们相信,除了基于图像的渲染之外,Frosting 表示还能派上用场。例如,它可以用于更广泛的计算机图形应用中,实时渲染复杂的材料。
7 改进曲面重建
我们改进了 SuGaR 的曲面重建方法,提出了一种自动调整泊松曲面重建阶段超参数的方法 [16]。
泊松曲面重建首先恢复底层占位场(occupancy field) : $\chi:\mathbb{R}^3\mapsto[0,1]$,然后在 $\chi$ 上应用步进(marching)算法,这样就能获得比密度函数更好的 Mesh 重建效果。由于行进算法只应用于靠近点云的体素,因此这种方法具有很高的可扩展性。
为了估算 $\chi$ ,泊松曲面重建将场景离散为 $2^D \times 2^D \times 2^D$ 的单元,方法是将深度为 $D\in\mathbb{N}$ 的八叉树调整为输入样本。**$D$ 是用户提供的一个超参数:$D$ 越大, Mesh 的分辨率越高。**
默认情况下,SuGaR[11]对任何场景都使用大深度 $D = 10$,因为它能保证高水平的细节。但是,如果相对于场景中几何图形的复杂程度和细节的大小,分辨率过高,高斯的形状就会在 Mesh 曲面上显示为椭圆形的凹凸,并产生不正确的凹凸或自交(bumps or self-intersections)。更重要的是,当 $D$ 与高斯的密度和采样点云相比过大时,几何图形中也会出现孔洞。
因此,我们引入了一种自动选择 $D$ 的方法。一个简单的策略是调整八叉树的深度,使单元的大小大致等于或大于场景中高斯的平均大小,并根据用于重建的点云的空间范围进行归一化。遗憾的是,这在实际应用中效果并不好:我们发现,无论场景是真实的还是合成的,也无论代表场景的高斯数量是多少, GS 优化都会系统地趋向于不同大小的高斯集合,因此不同场景之间的大小分布没有明显的差异或模式。
我们注意到,高斯之间的距离更能代表场景的几何复杂性,因此是固定 D 的可靠线索。的确如此,如果高斯之间的距离很近,那么就可以使用大尺寸的高斯来重建一个大而精细的形状。相反,如果高斯的中心相距太远,那么渲染出来的几何图形就会显得粗糙。(这与高斯的大小无关)
因此,为了首先评估场景的几何复杂度,我们建议计算场景中每个高斯 $g$ 与其最邻近高斯之间的距离。我们利用这些距离来定义以下几何复杂度得分 $CS$:
$$
CS=Q_{0.1}\left(\left{\min_{g’\neq g}\frac{|\mu_g-\mu_{g’}|2}{L}\right}{g\in\mathcal{G}}\right) \tag{5}
$$
- $\mathcal{G}$ 是场景中所有 3D 高斯的集合
- $L$ 是用于泊松重建的点云边界框(bounding box)最长边的长度
- $Q_{0.1}$ 是返回一个列表的 0.1-quantile(分位数?) 的函数。我们使用 0.1-quantile 而不是平均值,是因为有邻近高斯的高斯一般都能反映场景中的细节,这比使用整体平均值能提供更可靠、噪声更小的标准。此外,我们还使用了 quantile 而非最小值,以便对极端值保持稳健。
简而言之,这个复杂度得分 $CS$ 是场景中最接近的高斯之间的典型距离(canonical distance),即重建场景细节的邻近高斯之间的距离。
由于八叉树中单元的归一化长度为 $\displaystyle2^{-\bar{D}}$,而这一分数代表了代表场景细节的高斯之间的典型归一化距离,因此我们可以为泊松重建算法计算出一个自然的最佳深度 $\bar{D}$:
$$
\bar{D}=\begin{bmatrix}-\log_2{(\gamma\times CS)}\end{bmatrix} \tag{6}
$$
其中,$\gamma>0$ 是一个不依赖于场景及其几何复杂性的超参数。该公式保证了单元的大小尽可能接近但大于 $\gamma\times CS$。降低 $\gamma$ 的值可以提高重建的分辨率。但对于给定的 $\gamma$,无论数据集或场景的复杂程度如何,该公式都能确保重建的场景具有相似的平滑度。
因此,选择 $\gamma$ 比调整 $\bar{D}$ 容易得多,因为它不依赖于场景。在实践中,我们对所有场景都使用 $\gamma = 100$。我们的实验验证了这种固定 $\bar{D}$ 的方法可以获得更高的渲染性能。
8 初始化糖霜层
8.1 糖霜层中得 GS
在糖霜较厚的部分采样更多的高斯:![[《Gaussian Frosting》#^3qxo5u]]
无边界场景中的收缩(Contracting)体积:在真实的无边界场景中,远离场景中心的三维高斯尽管在最终渲染中的参与度有限,但其体积却可能非常大。这会导致在远离训练摄像机姿势的糖霜层中采样不必要的大量高斯。为了解决这个问题,我们建议按照落差(反距离)disparity (inverse distance)而不是距离的比例来分配远处的高斯。在实际对高斯进行采样时,我们首先要收缩棱柱形单元的体积。我们通过向糖霜层内外边界的顶点应用连续变换 $f:\mathbb{R}^3\to\mathbb{R}^3$。然后,我们计算由此产生的 “收缩的”棱柱形单元的体积,并如前所述,使用这些调整后的体积对糖霜层内的高斯进行采样。变换函数 $f$ 的目的是收缩远离场景中心的棱柱形单元的体积。我们使用与 Mip-NeRF 360 [2] 中引入的收缩变换类似的公式来定义 $f$:
$$
f(x)=\begin{cases}x&\text{if}\quad|x-c|\le l\c+l\times\left(2-\frac{l}{|x-c|}\right)\left(\frac{x-c}{|x-c|}\right)&\text{if}\quad|x-c|>l\end{cases}\tag{7}
$$
其中 $c\in\mathbb{R}^3$ 是包含所有训练相机位置的 bounding box 的中心,$l\in\mathbb{R}_{+}$ 等于同一 bounding box 对角线长度的一半。我们选择摄像机位置的边界框作为参考尺度,是因为 3DGS [17] 和 SuGaR [11] 都使用相同的参考尺度来调整学习率和区分无边界场景中的前景和背景。
8.2 避免糖霜层自交
自交:self-intersections
在本文中,我们通过在基本 Mesh 的顶点 $v_i$ 上添加内部和外部移位 $\delta_i^{\mathrm{in}}$ 和 $\delta_i^{\mathrm{out}}$ 来定义糖霜层的内外边界。这样就形成了两个边界曲面,其顶点分别为 $(\boldsymbol{v}_i+\delta_i^\mathrm{in}\boldsymbol{n}_i)_i$ 和 $(\boldsymbol{v}_i+\delta_i^\mathrm{out}\boldsymbol{n}_i)_i$ ,在实际操作中,我们希望尽量减少糖霜层内的自交,特别是避免棱柱单元之间的相交。虽然自交不会直接影响渲染质量,但在场景编辑或动画制作过程中可能会导致伪影。
请考虑不同单元相交的情况。在这种情况下,移动基本 Mesh 的特定三角形可能不会影响与周围单元相交的所有高斯:有些高斯可能属于与不同三角形相关联的棱形单元,由于它们无法跟随局部运动或场景编辑而产生假象。为了减少自交,我们采用了一种间接方法来初始化移位 $\delta_i^{\mathrm{in}}$ 和 $\delta_i^{\mathrm{out}}$。我们不直接使用最终计算值,而是从等于零的移位开始,逐步增加移位,直到达到最终值。一旦检测到棱柱单元的内顶点(或外顶点)与另一个单元相交,我们就停止进一步增加其内移位(或外移位)。 这一简单直接的过程大大减少了糖霜层中的自交,同时保持了渲染性能。通过这种方法,我们可以确保糖霜层在保持高效渲染能力的同时,不会出现不必要的伪影。