引言

在 3D 重建和渲染的快速发展世界中,我们正目睹着两个关键因素之间的拉锯战: 速度质量 。 一方面,我们有 3D 高斯泼溅 (3DGS) ,它以利用光栅化进行实时渲染的能力席卷了全球。另一方面,我们有基于射线的高斯泼溅 (RayGS) 等高保真方法,它们提供了卓越的视觉质量——尤其是在复杂的几何结构和视点相关效果方面——但受限于沉重的计算负担,使其难以在实时应用中运行,特别是在虚拟现实 (VR) 中。

对于探索计算机视觉的本科生和硕士生来说,这种权衡是一个典型的工程问题。你是选择以 100 FPS 运行但有视觉伪影的方法,还是选择看起来完美但只有 5 FPS 的方法?

由 Meta Reality Labs 的 Samuel Rota Bulò 及其同事撰写的研究论文 “Hardware-Rasterized Ray-Based Gaussian Splatting” (硬件光栅化的基于射线的高斯泼溅) 提出了一种拒绝妥协的解决方案。他们提出了一种利用标准 GPU 中的硬件光栅化管线来渲染 RayGS模型的方法。结果如何?一种既保留了基于射线方法的数学精确性和视觉保真度,又实现了适合 VR 帧率的渲染引擎——比之前的基于射线的实现快了 40 倍

在这篇深度文章中,我们将解构他们是如何做到这一点的。我们将探索将 3D 高斯交集映射到硬件友好结构的数学原理,“提升”四边形到 3D 空间的几何学,以及如何在虚拟世界移动时处理锯齿问题。

背景: 泼溅之战

要理解这项创新,我们首先需要了解基准。3D 高斯泼溅将场景表示为一团 3D 高斯 (椭球体) ,每个高斯都有位置、旋转、缩放、不透明度和颜色。

渲染方程

无论具体方法如何,确定像素颜色的核心机制都遵循体渲染方程。它是沿射线分布的高斯颜色贡献的加权和,其中权重取决于不透明度和透射率 (光线被前方高斯阻挡了多少) 。

显示颜色总和的渲染方程,由不透明度和透射率加权。

这里,\(\mathcal{R}\) 是最终的像素颜色,\(\xi\) 是特定高斯的颜色,而 \(\omega\) 是该高斯的渲染不透明度。标准 3DGS 和 RayGS 之间的核心区别完全在于这个不透明度 \(\omega\) 是如何计算的。

标准 3DGS vs. RayGS

渲染不透明度源自高斯的“先验”不透明度 (\(o_i\)) 及其偏离度 (\(\mathcal{D}\)) ,后者表示射线距离高斯中心的远近。

基于偏离度的渲染不透明度方程。

标准 3DGS: 近似法

在原始的 3DGS 论文中,3D 高斯被投影到 2D 图像平面上。渲染器使用仿射变换 (线性化) 近似透视投影。这会在屏幕上产生一个 2D 椭圆。

使用 2D 投影的标准高斯泼溅的偏离度方程。

这种方法非常快,因为它完美地映射到了基于图块的光栅化器上。然而,这种线性化假设了针孔相机模型,并且当高斯靠近相机或以大角度观看时会引入误差。

RayGS: 精确解

基于射线的高斯泼溅 (RayGS) 放弃了投影近似。相反,它计算视线穿过 3D 高斯时的最大密度确切点

基于射线的高斯泼溅的偏离度方程。

这里,\(\tau(x)x\) 代表沿射线 \(x\) 高斯密度最高的特定点。这个公式在几何上是精确的。它避免了标准 3DGS 中出现的“弹出”伪影和不一致性,尤其是在靠近物体导航时。

下图展示了实际差异。注意标准 GS 模型 (顶部) 中的尖刺和不一致的几何形状,对比 RayGS 模型 (底部) 中平滑、正确的几何形状。

渲染中出现的伪影对比: GS 模型 (顶部) 与 RayGS (底部) 。

问题在于: 计算精确的射线-高斯交集计算成本昂贵。之前的 RayGS 实现依赖于基于 CUDA 的光线追踪,这比标准 3DGS 使用的硬件加速光栅化要慢得多。

核心方法: 硬件光栅化的 RayGS

研究人员的目标是在快速、标准的顶点-片元着色器管线中实现高质量的 RayGS 数学运算。

要使用硬件光栅化,通常需要向 GPU 提供一个多边形 (通常是三角形或四边形) 进行绘制。在标准 3DGS 中,这很容易: 高斯的 2D 投影是屏幕上的一个椭圆,所以你只需在它周围画一个 2D 四边形。

然而在 RayGS 中,高斯的“支撑域” (可见区域) 并不是从线性投影导出的简单 2D 形状。与高斯相交且密度足够的射线集合形成了一个复杂的形状。

顶点着色器: 寻找包围四边形

这篇论文的核心是一个几何推导,允许顶点着色器计算出一个完美包围高斯可见部分的 3D 四边形

我们需要找到所有触及高斯可见体积边界 (由截止值 \(\kappa\) 定义) 的射线集合 \(\mathcal{E}\)。

代表图元支撑边界射线的集合 E 的定义。

直接在 3D 空间中为这个集合 \(\mathcal{E}\) 寻找包围盒是很困难的。作者通过在这个复杂的集合 \(\mathcal{E}\) 和 单位圆 \(\mathbb{S}_1\) 之间发现一个 同构 (保持结构的映射) 来解决这个问题。

几何直觉

想象一下射线锥和高斯椭球体之间复杂的交集。作者推导出一个变换 \(\Phi\),将这个复杂的 3D 几何形状映射到一个简单的 2D 单位圆上。

  1. 原始空间: 射线和高斯存在于标准的 3D 空间中。
  2. 变换: 通过应用一系列旋转和缩放 (涉及高斯的协方差矩阵 \(\Sigma\)) ,他们将 \(\mathcal{E}\) 中的向量映射到单位球面上,并最终将分量隔离到单位圆上。

射线集合 E 与单位圆之间同构的示意图。

上图可视化了这个变换。通过将问题映射到“单位圆世界” (子图 d) ,寻找包围盒变得微不足道——它只是圆周围的一个正方形。

创建 3D 四边形

一旦在单位圆周围定义了单位正方形,作者使用逆变换 \(\Phi^{-1}\) 将该正方形映射回真实的 3D 空间。这产生了一个包围高斯可见体积的 3D 四边形。

通过同构映射 2D 正方形获得的 3D 四边形示例。

然而,有无数个正方形可以包围一个圆 (以任何角度旋转) 。哪一个是最好的?作者通过优化以找到在 3D 空间中跨越最小面积的四边形 (如上图红色所示) 。这种紧密的贴合最小化了片元着色器必须处理的像素数量,从而节省了计算时间。

他们通过求解特征向量问题来找到这个最佳方向:

寻找最佳四边形方向 u1 的优化问题。

该方程在单位圆上找到向量 \(u\),当映射回 3D 时,该向量会产生最长的轴。短轴则与其正交。

顶点着色器中四边形顶点 (\(V_{ray}\)) 的最终计算如下所示:

计算射线四边形顶点的方程。

这个公式允许顶点着色器输出一个 3D 四边形。至关重要的是,因为这个四边形存在于 3D 中 (而不只是 2D 屏幕坐标) ,它能与相机的视锥体正确交互。然而,作者指出必须小心处理近平面裁剪。如果四边形与相机的近平面相交,必须将其完全剔除以避免视觉上的不连续性。

近平面裁剪的不良影响,显示出剧烈的不连续性。

片元着色器: 计算不透明度

一旦光栅化器确定了哪些像素落在 3D 四边形内,片元着色器就会接管。它的工作是计算该特定像素射线的精确不透明度。

因为四边形是使用严格的 RayGS 公式构建的,片元着色器不需要进行昂贵的射线步进或迭代搜索。它可以解析地计算精确的偏离度 \(\mathcal{D}_{ray}\)。

推导结果为片元着色器提供了一个惊人简单的公式。通过插值在顶点处计算的值 (\(Z_{ray}\)) ,可以使用点积计算偏离度:

片元着色器中计算射线偏离度的方程。

效率是关键。复杂的射线-椭球体相交数学运算被“烘焙”进了四边形顶点和插值常数中,使得片元着色器每个像素要做的工作非常少。

解决锯齿问题: RayGS 的 MIP

在 VR 和游戏中,“闪烁”或锯齿边缘 (混叠) 会破坏沉浸感。当我们用每个像素一条射线来采样 3D 场景时,就会发生这种情况。像素代表一个区域,而不是一个点。如果高斯很小或很远,单条射线可能会完全错过它,或者侥幸击中它,导致随着相机的移动出现闪烁。

标准 3DGS 有处理此问题的方法 (MIP-Splatting) ,但 RayGS 没有——直到这篇论文出现。

策略

作者提出了一种“多尺度”方法。他们不是将射线视为无限细的线,而是将像素视为 2D 高斯分布。他们将 3D 高斯图元投影到与射线正交的平面上,并将其与像素的覆盖范围进行卷积 (平滑) 。

由此产生的分布 \(P_{MIP}\) 描述了射线击中高斯的概率,并考虑了像素的大小 (\(\sigma_x\)) 。

MIP 概率分布方程。

这实际上使得高斯在远处时变得“更模糊”或更大,确保像素捕获其平均贡献,而不是嘈杂的点采样。

对于硬件实现,他们将其简化为一个调制因子,根据距离调整高斯的不透明度和协方差矩阵:

基于 MIP 的不透明度调制近似方程。

MIP 的视觉影响

这项技术的影响是显著的。在下图中,请看自行车的辐条。

  • 左上 (No MIP): 辐条呈锯齿状且断裂 (混叠) 。
  • 右上 (MSAA): 多重采样抗锯齿 (Multi-Sample Anti-Aliasing) 略有帮助,但昂贵且不完美。
  • 右下 (MIP-VKRayGS): 辐条平滑且连续。

MIP 公式的优势,显示混叠与抗锯齿渲染的对比。

实验与结果

研究人员实现了这种方法 (称为 VKRayGS , 即 Vulkan Ray-Based Gaussian Splatting) ,并将其与最先进的基于 CUDA 的渲染器 (GOF) 进行了比较。

速度对比

性能提升是巨大的。在标准基准数据集 (MipNeRF360 和 Tanks&Temples) 上,VKRayGS 的帧率平均比竞争方法高出 40 倍

表格对比了 GOF 和 VKRayGS 的速度 (FPS) 和质量指标。

看这张表,像“bicycle”这样的场景从 GOF 在 RTX2080 上无法游玩的 4 FPS 变成了 VKRayGS 上流畅的 177 FPS 。 这是离线渲染和 VR 就绪应用之间的区别。

质量对比

速度的提升是否以牺牲质量为代价?并没有明显的牺牲。渲染逻辑在数学上等同于较慢的射线投射方法。指标 (PSNR, SSIM) 上的微小差异归因于细微的实现细节 (如裁剪平面) ,而不是方法的根本缺陷。

从定性上看,结果几乎无法区分。

MipNeRF360 场景: 在“bicycle”和“garden”等场景中,快速光栅化器 (右) 的视觉保真度与慢速光线追踪器 (左) 相匹配。

GOF 和 VKRayGS 渲染的 MipNeRF360 场景并排对比。

Tanks & Temples: 户外场景也是如此。光照、几何形状和纹理细节都得到了保留。

GOF 和 VKRayGS 渲染的 Tanks&Temples 场景并排对比。

结论与启示

论文 “Hardware-Rasterized Ray-Based Gaussian Splatting” 填补了神经渲染领域的一个重要空白。通过在数学上架起射线交集世界与硬件加速光栅化世界之间的桥梁,作者解锁了适用于实时应用的高保真 3DGS。

关键结论:

  1. RayGS 更优越: 它比标准 3DGS 更好地处理几何结构,避免了弹出伪影和近相机畸变。
  2. 同构是关键: 将射线-高斯交集映射到单位圆,使得高效计算最佳 3D 包围四边形成为可能。
  3. 光栅化致胜: 通过将工作负载从通用 CUDA 计算转移到专用的图形管线 (顶点/片元着色器) ,性能突飞猛进 (40 倍加速) 。
  4. MIP 很重要: 集成依赖于尺度的平滑处理对于动态环境中的清晰、无锯齿渲染至关重要。

对于学生和开发者来说,这项工作凸显了理解问题底层几何原理的力量。让它变快的不是暴力优化,而是一种巧妙的数学变换,允许使用标准的、高度优化的硬件工具。