RT-Splatting: Joint Reflection-Transmission Modeling with Gaussian Splatting¶
会议: CVPR 2026
arXiv: 2605.18263
代码: https://sjj118.github.io/RT-Splatting (项目主页)
领域: 3D视觉
关键词: 高斯泼溅, 半透明表面, 反射-透射分解, 延迟着色, 梯度门控
一句话总结¶
RT-Splatting 把每个高斯基元的「几何占据」和「光学不透明度」解耦成两个独立属性,让单一套高斯既能当反射表面(延迟着色出高频镜面)又能当透射体(前向积分出清晰背景),并用「镜面感知梯度门控」抑制反射残差泄漏到透射分支造成的飘点,在车窗、塑料膜这类同时存在反射与透射的真实场景上取得 SOTA。
研究背景与动机¶
领域现状:3D Gaussian Splatting(3DGS)凭借光栅化实现了实时、高质量的新视角合成;为了表达高频、视角相关的镜面效果,近期变体普遍把每高斯 SH 换成基于物理的着色,并采用「延迟着色」——先把最近表面属性光栅化进 G-buffer,再逐像素着色。
现有痛点:这些方法在薄半透明镜面(车窗、玻璃、塑料膜)上集体失效。这类表面的外观是「透过表面看到的背景」与「表面反射的环境」的叠加。标准 3DGS 为了拟合高频镜面,会在表面后方幻觉出一堆「飘点」(floaters),既没真实还原反射、又把本应透过表面可见的背景挡住,导致透射浑浊。延迟着色因为 G-buffer 只存每像素最近表面属性,天然处理不了透明——要么聚合不到反射所需的目标表面属性,要么干脆把表面当成不透明、彻底遮挡透射。
核心矛盾:单个不透明度参数 \(\alpha\) 同时承担了两件互相冲突的事——它既是「几何上有没有面」(渲染高频反射需要面是实心的),又是「光学上挡不挡光」(透射需要面是清透的)。一个参数没法同时满足「几何实心 + 光学清透」,于是只能在「模糊反射」和「不透明遮挡」之间二选一。
已有绕法的局限:TransparentGS 等用多阶段管线,先把背景单独重建(且把透明区域 mask 掉)再叠透明物体,但当背景只能透过透明表面看到(如只能透过车窗看车内)时,背景重建阶段根本没见过这部分内容,方法直接崩。其他工作则强加平面假设或受控采集条件。
核心 idea:把每高斯的不透明度因式分解为几何占据 \(\sigma\) 与光学不透明度 \(\alpha\) 两个可学习量,用同一套高斯支撑「延迟反射 + 前向透射」的混合渲染管线,再用梯度门控解决两支联合优化时的歧义。
方法详解¶
整体框架¶
RT-Splatting 要解决的是「薄半透明表面上反射与透射强耦合」的重建。整条管线建立在 2DGS 之上:先把每个高斯的不透明度拆成几何占据 \(\sigma\) 和光学不透明度 \(\alpha\),得到一个「表面-体」统一表示;同一套高斯随后兵分两路——一条延迟通路用 \(\sigma\) 做概率化首表面提取、把法线/粗糙度等属性聚合进 G-buffer,再经镜面着色网络算出反射色 \(\mathbf{C}_{\text{spec}}\);一条前向通路用有效不透明度 \(\alpha_{\text{eff}}=\sigma\alpha\) 做体积合成,累积透过表面的背景辐射 \(\mathbf{C}_{\text{trans}}\)。两路合成出最终像素色后,反传时用「镜面感知梯度门控」按像素镜面复杂度衰减流入透射分支的梯度,避免反射残差污染背景;训练时再用透明 mask 正则约束 \(\alpha\)、并对所有组件联合优化。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["输入:多视角图像<br/>2DGS 高斯基元"] --> B["占据-不透明度因式分解<br/>α 拆成 σ(几何占据)+ α(光学不透明度)"]
B -->|"用 σ 做概率首表面提取"| C["反射-透射建模·延迟通路<br/>G-buffer 聚合属性 → C_spec"]
B -->|"用 α_eff=σα 做体积合成"| D["反射-透射建模·前向通路<br/>累积背景 → C_trans → C_sub"]
C --> E["合成 C = C_spec + β·C_sub"]
D --> E
E --> F["镜面感知梯度门控<br/>反传时按 g(x) 衰减流入透射的梯度"]
F -->|"透明 mask 正则 + 联合优化"| G["输出:实时渲染<br/>清晰反射 + 透射 + 可编辑"]
关键设计¶
1. 占据-不透明度因式分解:让一套高斯同时是实心的面和清透的体
针对「单参数 \(\alpha\) 无法兼顾几何实心与光学清透」这个根本矛盾,本文把每高斯的不透明度拆成两个有物理含义的可学习量:几何占据 \(\sigma\in[0,1]\) 表示射线碰到这个高斯实体的概率,光学不透明度 \(\alpha\in[0,1]\) 表示一旦碰到、光被吸收/散射的条件概率。两者乘积 \(\alpha_{\text{eff}}=\sigma\alpha\) 才是体积合成(式1)真正用的有效不透明度——也就是「光学衰减只发生在几何上有面的地方」。这样透明物体就能用「高 \(\sigma\) + 低 \(\alpha\)」表达:几何上是一面实墙(反射所需),光学上几乎全透(透射所需)。
更关键的是,\(\sigma\) 单独给出了延迟着色所需的概率化首表面提取:把高斯沿射线按深度排序后,任意表面属性 \(\mathbf{a}\)(法线、粗糙度等)的期望为
其中 \(p_i\) 是「第 \(i\) 个高斯是射线首次交互的表面元」的概率。形式上和标准 alpha-blending 一样,但本文把这群高斯重新诠释为「单个表面的概率化表示」而非一堆半透明 surfel——这才让延迟着色在高斯泼溅里建模高频反射有了物理依据。
2. 混合延迟-前向的反射-透射建模:反射走延迟、透射走前向,再按镜面强度调制透射
半透明表面的外观 = 高频镜面反射 + 透射光,本文用一条延迟通路 + 一条前向通路并行建模。延迟通路用上面的式(2)把法线 \(\mathbf{n}\)、粗糙度 \(\rho\)、材质特征 \(\mathbf{z}\) 聚进 G-buffer,再送入镜面着色网络 \(f_{\text{spec}}\)(结构沿用 Ref-GS)算出视角相关的反射色 \(\mathbf{C}_{\text{spec}}\)。为表达彩色玻璃这类有内部散射/吸收的材质,每高斯额外学一个本征散射色 \(\mathbf{C}_{\text{scatter}}\) 和透射比 \(\tau\in[0,1]\),把「穿透的背景光」与「材质内散射光」合成为次表面传输项:
而背景辐射 \(\mathbf{C}_{\text{trans}}\) 由前向通路用 \(\alpha_{\text{eff}}=\sigma\alpha\) 体积积分得到,所以背景不会被透明物体遮挡。最终颜色不走纯 Fresnel 物理混合(它常被 tone-mapping 等非线性相机响应破坏),而是基于一个感知观察——「透射细节能从淡反射里看清,但会被强镜面高光压住甚至遮蔽」。为此着色网络额外输出一个衰减因子 \(\beta\in[0,1]\) 直接调制透射项:
与以往「调制反射分量」的做法相反,本文调制透射分量,给「强反射压制背景光」提供了更直接稳定的机制。
3. 镜面感知梯度门控:堵住反射残差泄漏到透射、引发飘点的路径
即便表示干净地分了两支,联合优化仍有歧义:高频镜面本身极难拟合完美,其残差在反传时会被错误地路由进透射分支,透射分支便「将功补过」地在表面后方幻觉出飘点来抵消误差,反而把背景搞浑。作者的关键洞察是——这种错误补偿主要发生在高频镜面细节区域。于是用镜面分量 \(\mathbf{C}_{\text{spec}}\) 在局部邻域 \(\mathcal{N}(x)\) 的方差估计其复杂度,对每像素 \(x\) 算门控权重:
\(k\) 控制门控灵敏度。反传时用 \(g(x)\) 缩放图像损失经 \(\mathbf{C}_{\text{trans}}\) 回流的梯度:\(\frac{\partial\mathcal{L}_{\text{img}}}{\partial\mathbf{C}_{\text{trans}}(x)}\leftarrow g(x)\cdot\frac{\partial\mathcal{L}_{\text{img}}}{\partial\mathbf{C}_{\text{trans}}(x)}\)。在镜面复杂的像素 \(g(x)\to 0\)、压制误导监督;在镜面简单/弱的像素 \(g(x)\to 1\)、背景仍获完整监督——这点很重要,它只衰减不完全切断,保留了背景几何与外观的有效优化路径。
4. 透明 mask 正则 + 联合优化:消掉「幽灵几何」歧义并贯通整套训练
因式分解引入一个新歧义:「高 \(\sigma\) + 近零 \(\alpha\)」的高斯可以摆在场景任意位置而不影响最终渲染色,在缺乏强镜面线索的漫反射区会堆积成「幽灵几何」,腐蚀表面、扰乱优化。为此用预训练 SAM2 得到透明 mask \(\mathbf{M}\),在延迟通路里把首表面的期望光学不透明度 \(\alpha\) 聚进 G-buffer,再用 BCE 约束它去匹配反转后的语义 mask:
与 TransparentGS 等「用 mask 切分场景分别处理」不同,这里 mask 只当正则,所有组件(高斯基元、因式分解后的占据/不透明度、着色网络)一起联合优化。正是这种联合优化让方法能处理「背景只能透过透明表面看到」的复杂场景。
损失函数 / 训练策略¶
基于 PyTorch、在 2DGS 框架上实现;延迟通路着色函数超参与 Ref-GS 保持一致。训练目标为图像重建损失 \(\mathcal{L}_{\text{img}}\)(其经透射分支的梯度被 \(g(x)\) 门控)加透明 mask 正则 \(\mathcal{L}_{\text{mask}}\),对全部组件做联合优化。
实验关键数据¶
主实验¶
评测覆盖 Ref-Real、NeRF-Casting、EnvGS、T&T 的 6 个公开场景(Sedan / Toycar / Compact / Hatchback / Audi / Truck)加自采 2 个场景(Van / Swab,手机拍摄 220~240 视角)。指标为整图与透明区域上的 PSNR / SSIM / LPIPS,外加 FPS 与训练时长。
公开基准(Tab.1):
| 方法 | 整图 PSNR↑ | 整图 LPIPS↓ | 透明区 PSNR↑ | 透明区 LPIPS↓ | FPS↑ | 训练时长↓ |
|---|---|---|---|---|---|---|
| 3DGS | 26.493 | 0.181 | 37.673 | 0.012 | 218.95 | 0.3h |
| 2DGS | 26.384 | 0.197 | 37.333 | 0.012 | 208.82 | 0.3h |
| 3DGS-DR | 26.597 | 0.190 | 37.890 | 0.012 | 119.62 | 0.8h |
| Ref-GS | 26.599 | 0.188 | 37.761 | 0.013 | 38.41 | 0.8h |
| EnvGS | 27.141 | 0.182 | 37.953 | 0.012 | 18.31 | 2.9h |
| Ours | 27.490 | 0.167 | 39.765 | 0.010 | 33.28 | 0.9h |
自采场景(Tab.2)差距更大——透明区 PSNR 35.490 vs 次优 3DGS 32.567(领先约 +2.9dB),整图 PSNR 28.780 也居首(次优 3DGS 27.507)。提升在透明区域尤其显著,且 33 FPS 实时、训练 0.9h 性价比好。
消融实验¶
透明区域上逐组件消融(Tab.3,去掉某项相对 Full 的掉点):
| 配置 | PSNR↑ | LPIPS↓ | 说明 |
|---|---|---|---|
| Full (Ours) | 37.983 | 0.0095 | 完整模型 |
| w/o occupancy | 36.919 | 0.0113 | 退回单不透明度,反射↔透射互相牺牲,背景更遮挡 |
| w/o joint optimization | 36.288 | 0.0120 | 分开训两支,「只能透过车窗看到的车内」完全重建不出 |
| w/o scattering | 37.597 | 0.0102 | 去掉 \(\mathbf{C}_{\text{scatter}}\) 和 \(\tau\),材质本征色被烤进背景,透射偏暗 |
| w/o attenuation | 37.541 | 0.0102 | 去掉 \(\beta\),建模不了视角相关的背景压制 |
| w/o gating | 37.754 | 0.0101 | 透明表面附近出现飘点伪影 |
| w/o \(\mathcal{L}_{\text{mask}}\) | 37.167 | 0.0106 | 优化不稳、表面质量退化 |
关键发现¶
- 联合优化贡献最大(掉 1.70dB 至 36.288),其次是占据-不透明度因式分解(掉 1.06dB)——这两项正是处理「背景只能透过透明面看到」场景的命门,去掉直接导致车内重建失败。
- 散射、衰减、门控、mask 正则各贡献约 0.2~0.8dB,单看 PSNR 不大,但门控、mask 主要改善的是飘点伪影与优化稳定性(定量被 PSNR 部分掩盖,定性图 Fig.5 更明显)。
- 方法在「反射与透射强耦合」的透明区收益远大于整图,说明增益确实来自反射-透射解耦而非整体表达力堆叠。
亮点与洞察¶
- 一个参数拆成两个、解开一对老矛盾:把「几何占据」和「光学不透明度」分开,是对 3DGS/2DGS 不透明度语义的一次精准手术——单参数同时背负几何与光学两层含义本就是 alpha-blending 的历史包袱,拆开后「高几何占据 + 低光学不透明度」自然刻画了半透明表面,且只用一套高斯,不需要多阶段重建背景。
- 调制透射而非反射:以往工作都去调反射分量,本文反过来用 \(\beta\) 衰减透射分量,对应「强高光会遮蔽背景细节」的真实感知,机制更直接稳定;这个视角可迁移到任何需要建模「前景压制背景可见性」的合成任务。
- 梯度门控是「优化层面」的妙招而非表示层面:它不改前向渲染、只在反传时按镜面方差衰减流入透射的梯度,精准切断「反射残差→透射飘点」的错误补偿路径,又保留弱镜面区的完整背景监督——这种「按局部复杂度门控梯度」的思路可复用到任何「难拟合分支会污染易拟合分支」的多分支优化。
- 解耦表示天然支持场景编辑:因为反射/透射、粗糙度、透明度、材质 tint 被显式分离,可独立调整车窗粗糙度、透明度甚至换色。
局限性 / 可改进方向¶
- 只针对薄半透明表面:作者明确不建模折射与多次光反弹,因此对厚折射介质(水、实心玻璃)和多次散射场景不适用——薄面「直线透射」近似是整套方法成立的前提。
- 依赖外部 mask:透明 mask 由预训练 SAM2 提供,mask 质量会影响 \(\mathcal{L}_{\text{mask}}\) 正则效果;SAM2 在弱边界透明物体上的分割误差可能传导到优化。
- 门控超参 \(k\) 需调:\(g(x)=\exp(-k\cdot\mathrm{Var})\) 的灵敏度由 \(k\) 控制,过强会切断背景监督、过弱则压不住飘点,论文未给 \(k\) 的敏感性分析。
- 改进思路:把直线透射近似扩展为可微折射路径以支持厚介质;把 mask 来源从 SAM2 换成可端到端学习的透明度先验,减少对外部分割的依赖。
相关工作与启发¶
- vs 反射类高斯方法(3DGS-DR / Ref-GS / EnvGS / GaussianShader):它们用延迟着色或环境高斯擅长高频镜面,但把表面当不透明、G-buffer 只存最近表面,处理不了「反射+透射混合」的薄半透明面;本文用占据-不透明度因式分解让同一套高斯兼顾两者,透明区 PSNR 领先约 1.8~3.7dB。
- vs TransparentGS 等多阶段透明重建:它们先单独重建并冻结不透明背景(且 mask 掉透明区),当背景只能透过透明面看到时背景阶段没数据可用、直接失败;本文把 mask 仅作正则、所有组件联合优化,因而能重建「只能透过车窗看到的车内」。
- vs 平面假设的反射-透射工作:近期一些联合建模反射与透射的方法局限于简单平面、无法泛化到复杂形状;本文以薄半透明面的直线透射近似为前提,但表示与渲染管线不限平面,可处理车身曲面等复杂几何。
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ 「占据/不透明度因式分解 + 调制透射 + 镜面感知梯度门控」三处都给出了对症且优雅的新机制
- 实验充分度: ⭐⭐⭐⭐ 8 个真实场景 + 整图/透明区双指标 + 6 项逐组件消融,但缺超参(\(k\))敏感性与对比方法的定性失败分析量化
- 写作质量: ⭐⭐⭐⭐⭐ 矛盾铺陈清晰、公式与动机一一对应,方法可从笔记复现
- 价值: ⭐⭐⭐⭐ 解决了半透明镜面这一长期硬骨头且实时可编辑,实用价值高,受限于薄面/无折射假设