3D 高斯泼溅技术简介
3D 高斯泼溅是一种在《用于实时辐射场渲染的 3D 高斯泼溅》一文中所描述的光栅化技术,它允许从少量图像样本中学习并实时渲染逼真的场景。本文将解析其工作原理以及它对图形学未来的意义。
什么是 3D 高斯泼溅?
3D 高斯泼溅的核心是一种光栅化技术。这意味着:
- 拥有描述场景的数据。
- 将数据绘制在屏幕上。
这类似于计算机图形学中的三角形光栅化,后者用于在屏幕上绘制许多三角形。
然而,这里绘制的不是三角形,而是高斯函数。这是一个经过光栅化的单一高斯函数,为了清晰起见,绘制了边框。
它由以下参数描述:
- 位置:它所在的位置 (XYZ)
- 协方差:它如何被拉伸/缩放 (3x3 矩阵)
- 颜色:它的颜色 (RGB)
- Alpha:它的透明度 (α)
在实践中,会同时绘制多个高斯函数。
这是三个高斯函数。那么七百万个高斯函数呢?
这是每个高斯函数以完全不透明的方式进行光栅化后的样子。
以上是关于 3D 高斯泼溅的简要概述。接下来,让我们详细了解论文中描述的完整流程。
工作原理
1. 从运动中恢复结构 (Structure from Motion)
第一步是使用“从运动中恢复结构”(SfM) 方法,从一组图像中估算出一个点云。这是一种从一组 2D 图像估算 3D 点云的方法。这可以通过 COLMAP 库来完成。
2. 转换为高斯函数
接下来,每个点都被转换为一个高斯函数。这已经足以进行光栅化了。然而,只能从 SfM 数据中推断出位置和颜色。为了学习一个能产生高质量结果的表示,我们需要对其进行训练。
3. 训练
训练过程使用随机梯度下降 (Stochastic Gradient Descent),类似于神经网络,但没有层。训练步骤如下:
- 使用可微分高斯光栅化将高斯函数光栅化为图像(稍后会详细介绍)
- 根据光栅化图像与真实图像之间的差异计算损失
- 根据损失调整高斯参数
- 应用自动化的致密化和修剪
步骤 1-3 在概念上非常直接。步骤 4 涉及以下内容:
- 如果某个高斯函数的梯度很大(即它错得太离谱),则分裂/克隆它
- 如果高斯函数很小,则克隆它
- 如果高斯函数很大,则分裂它
- 如果一个高斯函数的 alpha 值变得太低,则移除它
这个过程帮助高斯函数更好地拟合精细的细节,同时修剪掉不必要的高斯函数。
4. 可微分高斯光栅化
如前所述,3D 高斯泼溅是一种光栅化方法,它将数据绘制到屏幕上。然而,一些重要的元素还包括:
- 快
- 可微分
光栅化器的原始实现可以在这里找到。光栅化过程包括:
- 从相机视角将每个高斯函数投影到 2D。
- 按深度对高斯函数进行排序。
- 对于每个像素,从前到后迭代每个高斯函数,将它们混合在一起。
论文中描述了其他优化措施。
光栅化器必须是可微分的,这一点也至关重要,这样才能用随机梯度下降进行训练。然而,这只与训练相关——训练好的高斯函数也可以用非可微分的方法进行渲染。
谁会关心这个?
为什么 3D 高斯泼溅技术会受到如此多的关注?显而易见的答案是,结果本身就说明了一切——它能实时呈现高质量的场景。然而,故事可能不止于此。
关于高斯泼溅还能做些什么,还有许多未知数。它们可以被动画化吗?即将发表的论文《动态 3D 高斯:通过持续动态视图合成进行跟踪》表明它们可以。还有许多其他未知数。它们能处理反射吗?它们可以在没有参考图像训练的情况下进行建模吗?
最后,对具身人工智能 (Embodied AI) 的研究兴趣日益增长。在这个人工智能研究领域,最先进的性能仍然比人类性能低几个数量级,其中大部分挑战在于表示 3D 空间。鉴于 3D 高斯泼溅能产生非常密集的 3D 空间表示,这对具身人工智能研究可能有什么影响?
这些问题引起了人们对该方法的关注。其实际影响尚待观察。
图形学的未来
那么,这对图形学的未来意味着什么?让我们将其分为优点和缺点:
优点
- 高质量、逼真的场景
- 快速、实时的光栅化
- 训练相对较快
缺点
- 高显存使用率(查看需 4GB,训练需 12GB)
- 磁盘占用大(一个场景 1GB+)
- 与现有的渲染管线不兼容
- 静态(目前如此)
到目前为止,原始的 CUDA 实现尚未被适配到生产渲染管线中,如 Vulkan、DirectX、WebGPU 等,因此其影响尚待观察。
目前已经有了以下适配:
这些要么依赖于远程流式传输 (1),要么依赖于传统的基于四边形 (quad-based) 的光栅化方法 (2-5)。虽然基于四边形的方法与数十年的图形技术兼容,但可能会导致较低的质量/性能。然而,查看器 #5 表明,尽管采用基于四边形的方法,优化技巧仍可带来高质量/性能。
那么,我们会在生产环境中看到 3D 高斯泼溅被完全重新实现吗?答案是很可能。主要瓶颈是对数百万个高斯函数进行排序,这在原始实现中使用 CUB 设备基数排序 来高效完成,这是一种仅在 CUDA 中可用的高度优化的排序方法。然而,只要投入足够多的努力,在其他渲染管线中实现这种性能水平是完全可能的。
如果您有任何问题或想参与其中,请加入 Hugging Face Discord!