3D高斯泼溅(3DGS)以无数带颜色与透明度的三维高斯点来重建场景,在视角合成上效率与画质兼具。但当场景中出现镜子、大理石地面或流动水面时,如果只泼溅可见表面的点,就会丢失关键的反射信息,使画面失去真实感。要让3DGS支持反射,核心在于把光线的二次传播也纳入表达与渲染框架。

3DGS反射的基本原理
标准3DGS每个高斯点记录位置、协方差、不透明度与球谐系数,球谐用于近似视角相关的漫反射颜色。反射效果要求点不仅发出直射光,还能“看见”并转递周围环境。一种做法是给高斯点增加反射属性,例如反射强度与局部法线,渲染时根据视线与法线夹角计算镜面反射方向,再沿该方向采样已有高斯点云得到倒影颜色。
由于3DGS本身没有显式表面,法线往往从高斯基元密度梯度或训练时的深度监督推导。水面等动态反射还需引入时间维的高斯扰动,让法线在小范围内随机偏移,模拟涟漪。这样反射不再是贴图欺骗,而是点云内部的光照交互,视角转动时倒影会连续变化,符合透视规律。
镜面反射的模拟方法
对于玻璃柜、抛光金属等近镜面物体,可采用屏幕空间反射(SSR)与3DGS结合的方案。先正常泼溅得到颜色缓冲与深度,再对高光区域像素沿反射向量在缓冲中步进搜索交点,用命中点的已有颜色作为反射贡献。该方法复用已有渲染结果,不额外训练新点,适合静态室内场景。
若要求更严谨,可在训练阶段把镜面高斯单独分组,其颜色由反射方向球谐编码。推理时根据相机位姿实时查询,能得到比SSR更稳定的窗外景色映射。下表对比两种主流做法:
| 方法 | 训练成本 | 动态视角表现 | 适用场景 |
|---|---|---|---|
| SSR近似 | 低 | 中等,易漏反射 | 室内静态镜面 |
| 反射球谐扩展 | 高 | 好,倒影连贯 | 展厅、外墙玻璃 |
水面反射的实现要点
自然水面既是反射面也是折射扰动物。实践中常把水面单独标为反射层,在顶点或高斯尺度上叠加正弦波法线扰动。渲染时反射向量随波法线变化,采样天空或岸景高斯点,形成碎裂倒影;同时降低不透明度露出水下点云,表达浅水透视。
为避免水面闪烁,扰动频率需与高斯点密度匹配,过细的波纹在点云分辨率不足时反而产生噪点。经验上用低频大波控制整体起伏,高频小波仅微调高光形状,可在普通显卡维持实时。配合雾化和颜色衰减,远处水面与天际线自然融合,消除硬边界。
性能与落地建议
反射计算最大开销在方向采样与额外高斯遍历。推荐将反射查询限制在屏幕高光像素,而非全图,并用八叉树加速邻域点搜索。水面扰动放在顶点着色阶段,减少片元分支。这样在百万级高斯场景中也能保持三十帧以上。
从项目经验看,先以SSR跑通管线,再对重点镜面物体补训练反射属性,是性价比最高的路径。用户可使用开源3DGS代码库,在配置中打开反射扩展开关,导入带法线标注的数据集,数小时内即可看到水面与镜面明显更生动,不再像贴了塑料膜。