3D 图形世界的发展一日千里。多年来,我们一直追逐着创造与现实无异的数字场景的梦想。神经辐射场 (NeRF) 的出现带来了一次重大飞跃,它能通过少量照片生成惊艳的、照片级逼真的视图。但 NeRF 有一个问题: 它非常慢。
随后,在 2023 年,3D 高斯泼溅 (3D Gaussian Splatting) 横空出世,改变了一切。它以极快的实时速度提供了媲美 NeRF 的质量。突然之间,高保真 3D 渲染在交互式应用中成为可能。然而,这项新技术有一个致命弱点: 闪亮、反光的表面。抛光金属、光滑塑料、釉面陶瓷——这些物体常常看起来扁平、模糊,或者干脆就是错的。高斯泼溅简单的颜色模型无法捕捉光线在反射表面上的复杂、与视角相关的变化。
这正是论文 GaussianShader: 3D Gaussian Splatting with Shading Functions for Reflective Surfaces 所要解决的问题。问题是: 我们能否将高斯泼溅的速度与复杂的着色模型相结合,以渲染出优美逼真的反射,同时又不牺牲性能?
答案是肯定的。GaussianShader 将一个简化但功能强大的着色函数直接集成到高斯泼溅框架中。如图 1 所示,与原始方法相比,它显著提高了反射物体的渲染质量,同时其训练速度比现有的反射建模方法 (如 Ref-NeRF) 快了几个数量级。
图 1. GaussianShader 在反射表面上实现了高保真效果 (a),同时在速度和准确性方面与其他方法相比保持了很好的平衡 (b)。
在本文中,我们将探讨 GaussianShader 的工作原理——它如何用材质属性扩展 3D 高斯体,如何解决在点云中估计表面法线的棘手问题,以及如何将这些创新融合为一个兼顾真实感与实时速度的系统。
从 NeRF 到高斯泼溅: 基础
为了理解 GaussianShader 的贡献,让我们先回顾一下它所基于的技术。
神经辐射场 (NeRF) 将场景表示为一个神经网络,该网络将 3D 坐标和观察方向映射到颜色和密度。通过从相机发出射线并沿途对该网络进行数百万次采样,NeRF 可以生成细节丰富的图像——代价是极高的计算量。
3D 高斯泼溅则转向了一种显式的、离散的表示方法: 数百万个微小的、半透明的 3D 椭球体 (高斯体) ,每个都由以下属性定义:
- 位置 (\(p\)): 其在 3D 空间中的坐标。
- 协方差 (\(\Sigma\)): 形状和方向。
- 不透明度 (\(\alpha\)): 透明度。
- 颜色 (\(c\)): 外观,通常使用球谐函数 (SH) 实现基本的视角相关效果。
渲染时,3D 高斯体被投影到图像平面上成为 2D 椭圆,按深度排序,然后进行混合:
\[ \mathbf{C} = \sum_{i \in N} \mathbf{c}_i \alpha_i \prod_{j=1}^{i-1} (1 - \alpha_j) \]公式 1. 2D 高斯泼溅的 Alpha 混合。
训练使用一个简单的颜色损失函数:
\[ \mathcal{L}_{\mathrm{color}} = \lVert \mathbf{C} - \mathbf{C}_{\mathrm{gt}} \rVert^2 \]公式 2. 比较渲染图像与真值图像的颜色损失。
这种方法提供了极快的渲染管线——但它的颜色模型不够复杂,无法在反射表面上产生清晰、与视角相关的镜面高光。于是,GaussianShader 应运而生。
核心思想: 为高斯体赋予着色器
GaussianShader 用一个基于物理的着色函数取代了静态颜色模型,该函数根据以下因素计算高斯体的颜色:
- 材质属性 (漫反射颜色、镜面反射色调、粗糙度)
- 表面法线
- 光照环境
- 观察方向
图 2. GaussianShader 将形状属性与着色属性和可微分的环境光照结合起来,从而实现逼真、与视角相关的渲染。
1. 简化的着色函数
完整求解渲染方程的代价很高。GaussianShader 使用了一种高效的近似方法:
\[ \mathbf{c}(\omega_o) = \gamma\big(\mathbf{c}_d + \mathbf{s} \odot L_s(\omega_o, \mathbf{n}, \rho) + \mathbf{c}_r(\omega_o)\big) \]公式 3. GaussianShader 的着色函数。
其中:
- 漫反射颜色 (\(c_d\)) —— 基础的、与视角无关的表面颜色。
- 镜面反射项 (\(s \odot L_s\)) —— 由材质颜色 \(s\) 着色的直接反射,依赖于观察方向 \((\omega_o)\)、法线 \(n\) 和粗糙度 \(\rho\)。
- 残差颜色 (\(c_r\)) —— 由球谐函数参数化的“万能项”,用于捕捉复杂的间接效果 (如全局光照、散射) 。
2. 计算镜面光
镜面反射分量 \(L_s\) 在半球上对环境光进行积分,并由法线分布函数 \(D\) 加权:
\[ L_s(\omega_o, \mathbf{n}, \rho) = \int_{\Omega} L(\omega_i)\, D(\mathbf{r}, \rho)\, (\omega_i \cdot \mathbf{n}) \, d\omega_i \]公式 4. 直接镜面光的积分。
其中 \(\mathbf{r}\) 是镜像反射方向,\(\rho\) 控制高光波瓣的大小:
图 3. 光滑表面 (小 \(\rho\)) 产生集中镜面高光;粗糙表面 (大 \(\rho\)) 使反射更分散。
GaussianShader 通过将环境光贴图预过滤为适用于不同方向和粗糙度的 mipmap 来加速这一过程。
3. 法线估计: 一个难题
准确的法线对着色至关重要,但高斯体没有连续的表面可供求导。GaussianShader 的解决方案是:
步骤 1: 最短轴的启发
随着训练的进行,高斯体逐渐变薄以与真实表面对齐。
图 4. 优化使高斯体变薄,其最短轴与表面法线对齐。
最短轴 \(\mathbf{v}\) 可以作为法线的一个良好初始猜测。
步骤 2: 学习残差
一个小的校正向量 \(\Delta \mathbf{n}\) 用于修正 \(\mathbf{v}\):
\[ \mathbf{n} = \begin{cases} \mathbf{v} + \Delta \mathbf{n}_1 & \text{if } \omega_o \cdot \mathbf{v} > 0, \\ -(\mathbf{v} + \Delta \mathbf{n}_2) & \text{otherwise} \end{cases} \]公式 5. 使用残差和方向消歧的最终法线计算。
正则化保持 \(\Delta \mathbf{n}\) 较小:
\[ \mathcal{L}_{\mathrm{reg}} = \lVert \Delta \mathbf{n} \rVert^2 \]公式 6. 残差正则化损失。
步骤 3: 强制一致性
为在不进行昂贵邻域搜索的情况下保证局部平滑,GaussianShader 比较:
- 渲染法线图 (\(\bar{\mathbf{n}}\)) —— 来自预测的法线。
- 深度梯度法线图 (\(\hat{\mathbf{n}}\)) —— 通过对渲染深度图计算图像梯度得到。
公式 7. 法线与几何一致性损失。
图 5. 一致性损失使预测的法线与由深度梯度导出的法线对齐,从而确保几何连贯性。
4. 最终训练目标
为了使表面更锐利,稀疏性损失推动高斯体趋于完全不透明或完全透明:
\[ \mathcal{L}_{\mathrm{sparse}} = \frac{1}{|\alpha|} \sum_{\alpha_i} \big[ \log(\alpha_i) + \log(1 - \alpha_i) \big] \]公式 8. 稀疏性损失。
总的训练目标为:
\[ \mathcal{L} = \mathcal{L}_{\mathrm{color}} + \lambda_n \mathcal{L}_{\mathrm{normal}} + \lambda_s \mathcal{L}_{\mathrm{sparse}} + \lambda_r \mathcal{L}_{\mathrm{reg}} \]公式 9. 完整训练损失。
实验与结果
通用场景
在 NeRF Synthetic 数据集上,GaussianShader 的质量与原始高斯泼溅持平——证明了在不需要高端反射建模的场景中,增加的着色模型不会影响性能。
表 1. 在漫反射的通用场景中,GaussianShader 与高斯泼溅保持同等水平。
图 8. 在 NeRF Synthetic 数据集上的输出质量相当。
反射场景
在富含金属/光滑物体的 Shiny Blender 和 Glossy Synthetic 数据集上,GaussianShader 的表现明显更优。
表 2. GaussianShader 的 PSNR 比高斯泼溅提高了 1.57 dB。
图 7. 汽车和球体上清晰锐利的镜面反射,而高斯泼溅中的高光则很模糊;误差图证实了改进。
图 6. 在 Glossy 数据集上,渲染效果更好,法线与光照图也更准确。
图 9. 更干净、更准确的法线——这是正确反射的关键。
速度与可扩展性
至关重要的是,GaussianShader 保持了实时能力:
表 3. 以约 0.58 小时的训练时间与 97 FPS 的渲染速度实现最佳质量;相比之下,反射优化的 MLP 方法训练时间为 6–23 小时,渲染速度仅为 0.03–1.33 FPS。
它可扩展至复杂的室外场景,如 Tanks and Temples 数据集所示:
图 10. 与高斯泼溅相比,在大规模场景中表面更平滑、更自然。
结论: 更亮、更真实的未来
GaussianShader 通过将简化而富有表现力的着色模型与高斯泼溅相结合,推动了实时照片级渲染的进步。其新颖的法线估计方法——结合了最短轴启发式、学习残差和几何一致性损失——使得在离散、基于点的表示中实现物理着色成为可能。
最终它实现了两全其美:
- 正确渲染复杂、与视角相关的效果,如金属反射与光滑高光。
- 保留了高斯泼溅的高效与交互速度。
这项工作拓展了游戏、VR 等领域的沉浸式真实体验的边界——让闪亮的反射场景不再是性能瓶颈,而成为实时呈现的现实。