如果你一直关注3D计算机视觉领域的快速发展,你无疑已经接触过 3D高斯泼溅 (3D Gaussian Splatting, 3DGS) 。 它凭借实时渲染速度和高质量的重建效果彻底改变了该领域。然而,就像任何新兴技术一样,它也有自己的阿喀琉斯之踵。对于3DGS来说,这个软肋就是镜子和发光物体

标准的3DGS难以渲染高光 (Highly Specular) 表面——比如抛光金属、玻璃或镜子,这些材料能清晰地反射周围环境。当你在3DGS场景中看镜子时,通常看到的不是附近茶壶或玩具车的清晰反射,而是一团模糊、不连贯的乱麻。

在这篇文章中,我们将深入探讨 SpecTRe-GS , 这是在CVPR上提出的一种解决该问题的新方法。研究人员提出了一种混合方案: 他们结合了高斯泼溅的速度和光线追踪 (Ray Tracing) 的物理准确性,以此来建模复杂的互反射 (inter-reflections) 。

Figure 1. Comparison of SpecTRe-GS against previous methods on a scene with highly reflective surfaces. Note the sharp reflection of the Rubik’s cube in the bowl.

如图1所示,区别非常明显。虽然以前的方法在反光碗上产生了幽灵般或模糊的伪影,但SpecTRe-GS捕捉到了附近魔方的清晰反射。让我们来看看他们是如何做到这一点的。

问题所在: 为什么3DGS讨厌镜子

要理解解决方案,我们首先需要了解原始3D高斯泼溅的局限性。

3DGS将场景表示为一团3D高斯 (椭球体) 。为了渲染颜色,它使用球谐函数 (Spherical Harmonics, SH) 。 SH非常适合表示平滑变化的视点相关颜色变化,就像天鹅绒随着你绕着它移动而改变亮度一样。然而,SH仅限于低频信号。

完美的镜面反射是高频信号。当你稍微移动头部时,镜中的图像会发生剧烈变化。要使用SH表示清晰的反射,你需要数量极其庞大的系数,这将导致内存使用量和计算成本激增。

此外,标准的3DGS独立处理每个高斯。它并不天生“知道”场景其余部分的几何形状。这使得在使用标准光栅化管线时,根本不可能计算互反射——即物体A在物体B的反光表面内可见。

解决方案概览

研究人员曾尝试以各种方式解决这个问题。有些人试图将反射烘焙到纹理中 (但这在你移动相机时会失效) 。其他人使用屏幕空间光线追踪 (SSRT) ,但这只能反射屏幕上当前可见的内容 (如果被反射的物体在相机视野之外,这种方法就会失效) 。

Table 1. A summary of related works and how they handle view-dependent appearance and global illumination.

如表1所总结,现有的绝大多数方法要么完全忽略互反射,要么将它们“烘焙”到模型中,这使得后续无法编辑场景 (例如,移动物体并看到其反射也随之移动) 。SpecTRe-GS旨在填补这一空白,实现高频、可编辑的3D光线追踪反射

核心方法: SpecTRe-GS

研究人员引入了一条从根本上改变发光物体渲染方式的管线。核心思想是将场景分离为两种类型的材质:

  1. 粗糙表面 (Rough Surfaces): 使用标准、高效的3DGS管线渲染。
  2. 高光表面 (Highly Specular Surfaces): 使用基于物理的光线追踪模块渲染。

Figure 2. Overview of the SpecTRe-GS pipeline. Notice the split path: standard splatting for rough surfaces (top) and efficient ray tracing for specular surfaces (bottom).

让我们拆解一下图2所示的架构。

1. 适用于高斯的渲染方程

SpecTRe-GS不仅仅依赖球谐函数,而是采用了基于物理的渲染 (PBR) 方程 。 对于场景中的高光部分,颜色不仅仅是一个存储的值;它是根据光线从表面反弹的情况计算出来的。

该反射模型将来自表面点 \(\mathbf{x}\) 的光分离为漫反射 (散射) 和镜面反射 (像镜子一样) 分量:

Equation 2: Total radiance is the sum of diffuse and specular components.

  • \(I_{\mathrm{diff}}\) 是漫反射颜色 (就像物体的基础色) 。
  • \(I_{\mathrm{spec}}\) 是清晰的反射。

为了计算镜面反射 \(I_{\mathrm{spec}}\),系统需要知道两件事: 表面的反射率是多少 (\(A_{\mathrm{spec}}\)),以及从反射方向 (\(\omega_{\mathrm{r}}\)) 射入的光是什么 (\(I_{\mathrm{i}}\))。

Equation 3: Specular component definition.

反射率 \(A_{\mathrm{spec}}\) 使用菲涅尔效应建模——这是物理术语,意思是“物体在掠射角下看起来更反光”。他们使用Schlick近似来计算:

Equation 4: Schlick’s approximation for Fresnel effect.

在这里,\(F_0\) 是存储在每个高斯上的可学习参数,表示当你直视材料时的反射率。

2. 追踪入射光线

最困难的部分是确定 \(I_{\mathrm{i}}\)——入射辐射度 。 这就是你在镜子里面实际看到的图像。在真实的物理环境中,光线来自两个来源:

  1. 直接光照 (Direct Lighting): 来自天空或环境贴图的光 (\(I_{\mathrm{dir}}\))。
  2. 间接光照 (Indirect Lighting): 从场景中其他物体反射的光 (\(I_{\mathrm{ind}}\))。

SpecTRe-GS通过从相机发射光线,使其从发光的高斯上反弹,并观察它接下来击中了什么来计算这一点。

Equation 5: Incident radiance combines direct environment lighting and indirect scene lighting based on visibility.

  • \(V_{\mathrm{i}}\) 是可见性 (如果光线没有击中任何东西直达天空则为1,如果被物体阻挡则为0) 。
  • 如果光线击中天空,我们采样环境贴图 (\(I_{\mathrm{dir}}\))。
  • 如果光线击中另一个物体,我们查询该物体的颜色 (\(I_{\mathrm{ind}}\))。

最后,系统使用掩码 \(M\) 结合标准渲染和这种新的镜面渲染。该掩码标识图像的哪些部分是高光的。

Equation 6: Blending the specular and rough surface renderings.

3. 点云中的高效光线追踪

工程上的挑战在于: 如何高效地对一团柔软、半透明的斑点进行光线追踪?

标准光线追踪器 (如Nvidia的OptiX) 作用于三角形 (网格) 。3DGS使用的是高斯。为了弥补这一差距,SpecTRe-GS构建了一个几何加速结构 (GAS)

他们没有对精确的高斯椭球体进行光线追踪 (这在数学上很繁重) ,而是用拉伸的二十面体 (一种有20个面的几何形状) 来近似每个高斯。这就充当了一个紧紧包裹高斯的“代理网格”。

Equation 7: Calculation of proxy mesh vertices for the GAS.

该公式根据高斯的协方差 (形状) 和旋转来缩放二十面体,确保网格代理与视觉斑点相匹配。

当光线击中此代理时,系统会通过解析计算精确的“交点”,以确保深度精确。使高斯沿光线的贡献最大化的深度 \(t\) 为:

Equation 8: Determining the exact intersection depth along a ray.

通过在硬件加速框架 (OptiX) 内使用这种代理几何体,SpecTRe-GS能够非常快速地追踪数百万条二次光线——仅比标准光栅化慢50%到100%,对于添加完整的全局光照来说,这是一个令人印象深刻的成绩。

4. 训练和几何增强

光线追踪是无情的。如果镜子的几何形状稍微有点凹凸不平,反射就会看起来扭曲呈波浪状。标准的3DGS通常会产生“蓬松”的几何形状,远看还可以,但在光线反弹方面表现糟糕。

为了解决这个问题,作者引入了一种具有特定损失函数的鲁棒训练策略:

Equation 9: The total loss function including color, distortion, normals, and smoothness.

这里的一个关键组件是 \(\mathcal{L}_{\mathrm{n}}\),即法线先验引导 。 他们使用预训练的单目法线估计模型 (StableNormal) 来猜测表面方向应该是什么,如果高斯的指向错误,就会受到惩罚。

Equation 10: Normal prior loss.

联合几何优化

仅仅惩罚法线是不够的。系统需要从反射本身学习几何形状。如果反射看起来不对劲,那镜子的角度肯定有问题。

为了实现这一点,作者对光线追踪的光线相对于表面法线进行微分。他们使用有限差分法来数值计算梯度:

Equation 11: Numerical gradient calculation for indirect lighting.

这有效地告诉系统: “那个红色立方体的反射太偏左了;稍微向右倾斜镜子来修正它。”

为了使其稳定,他们使用深度感知光线扰动 。 在计算梯度时,他们根据反射物体的距离来调整摆动光线的幅度。

Equation 16: Depth-aware perturbation for numerical stability.

最后,他们使用渐进式学习策略。他们开始时强烈依赖“法线先验”来获得大致正确的形状。随着训练的进行,他们衰减这种引导,让基于物理的渲染损失接管以微调细节。他们还抑制反光区域的残差颜色,以强制模型依赖光线追踪管线:

Equation 17: Residual suppression loss.

实验与结果

它真的有效吗?作者将SpecTRe-GS与最先进的方法进行了比较,包括标准3DGS、受Ref-NeRF启发的方法以及其他具有反射感知能力的泼溅技术。

视觉质量

视觉结果令人信服。在图3中,我们看到了合成场景的对比。

Figure 3. Qualitative comparison on synthetic scenes (Toaster, Mirror, Pot). SpecTRe-GS (Ours) produces clean, sharp reflections where other methods produce blur or noise.

仔细观察Mirror (镜子) 这一行 (中间) 。“Ground Truth” (真值) 显示了黄色物体的完美反射。

  • 3DGS-DRGShader 产生了反射,但通常是扭曲或模糊的。
  • 3iGSGOF 在高频细节上表现得很吃力。
  • SpecTRe-GS (Ours) 几乎完美地匹配了真值。

分量分解

证明模型正在学习“物理”而不仅仅是记忆像素的最有力证据之一是图像分解 。 我们可以要求模型向我们展示漫反射颜色或展示镜面反射。

Figure 4. Decomposing the scene into diffuse and specular components.

在图4中,看“Diffuse” (漫反射) 这一列。理想情况下,闪亮的金属头盔应该具有灰/黑色的漫反射颜色,所有的颜色都应该在“Specular” (镜面反射) 层中。

  • 3DGS-DR 将反射烘焙到了漫反射层中 (你可以在漫反射列的头盔上看到房间) 。
  • SpecTRe-GS 成功地分离了它们。漫反射头盔是深色哑光的,反射完全在镜面反射通道中。这允许以后进行逼真的重照亮。

定量数据

数据支持了视觉效果。作者测量了 PSNR (图像质量) 、SSIM (结构相似性) 和 LPIPS (感知相似性) 。

Table 2. Quantitative results showing SpecTRe-GS achieving best or second-best scores across almost all metrics.

SpecTRe-GS 获得了最高分,特别是在 “Reflective” (反光) 列中,该列专门衡量镜面区域内的质量。

真实世界表现

合成数据很好,但真实世界的数据是杂乱的。作者使用真实相机捕捉场景以测试鲁棒性。

Figure 5. Reconstruction of real-world scenes (Bowl and Pot). The geometry column shows the estimated depth/normals.

如图5所示,该方法恢复了准确的几何形状 (红/蓝热力图) ,并生成了令人信服的桌布上玩具的反射,即使相机姿态和光照并没有得到完美的控制。

消融实验

作者还进行了消融实验,以验证他们复杂管线的每个部分是否都是必要的。

Table 3. Ablation study results. Removing components like Normal Priors (w/o N.) or Joint Optimization (w/o J.) significantly drops performance.

数据显示,移除法线先验引导 (w/o N.) 会导致质量下降幅度最大。这证实了如果没有良好的几何形状初始猜测,光线追踪会因太不稳定而无法收敛。

结论与未来展望

SpecTRe-GS代表了基于点的渲染向前迈出的重要一步。通过将专用的光线追踪模块集成到3DGS框架中,它解决了渲染清晰、物理精确反射这一长期存在的问题。

其意义不仅仅在于“更漂亮的图片”。由于该方法分离了几何形状、材质属性和光照,它实现了强大的场景编辑功能。

Figure 6. Editing applications enabled by SpecTRe-GS. From left to right: Relighting, Object Deletion, Object Insertion, and Material Editing.

如图6所示,你可以:

  1. 重照亮场景: 更改环境贴图,头盔上的反射会自然更新。
  2. 删除物体: 如果你移除了头盔旁边的盒子,它也会从反射中消失 (这对于“烘焙”纹理来说是不可能的) 。
  3. 插入物体: 添加一个新的数字物体,它会反射在真实世界的镜子中。
  4. 编辑材质: 将头盔从光泽黑色变为哑光灰色。

虽然仍有一些局限性——它目前将镜面反射近似为理想镜面,并且二次反弹依赖于粗糙表面——但SpecTRe-GS证明了我们不必在高斯泼溅的速度和光线追踪的真实感之间做选择。我们可以两者兼得。