跳转至

Depth Peeling for High-Fidelity Gaussian-Enhanced Surfel Rendering

会议: CVPR 2026
论文: CVF Open Access
代码: 未公开
领域: 3D视觉
关键词: 新视角合成, 高斯泼溅, Surfel, Depth Peeling, 免排序渲染

一句话总结

针对 Gaussian-Enhanced Surfels(GES)因硬深度测试导致的边界走样和 surfel/高斯无法联合优化两大问题,本文提出 DP-GES:给 surfel 加上半透明边界、用 3 层 depth peeling 求出每像素的精确遮挡顺序,从而让 3D 高斯仍能免排序泼溅却得到正确的透射率调制——既消除走样与 popping,又打通了 surfel 与高斯的可微联合优化,在多个数据集上以 472 FPS 取得与 SOTA 持平或更优的画质。

研究背景与动机

领域现状:新视角合成的主流是 NeRF 和 3D Gaussian Splatting(3DGS)。两者都把场景表示成体辐射场,渲染时需要把体素样本/基元按由近到远的顺序做 alpha 混合。NeRF 靠逐点神经网络推理,太慢;3DGS 用基于 tile 的全局排序近似逐像素深度顺序来加速。

现有痛点:3DGS 的近似排序会在相机旋转时引入 popping(floater 因排序顺序突变而突然出现/消失)。后续工作要么走免排序路线(如 SortFreeGS)但出现严重的遮挡泄漏(occlusion leakage),要么靠 ray tracing 求精确顺序但代价高昂。Gaussian-Enhanced Surfels(GES)给出了一个折中:用一组完全不透明的 surfel(标准 z-buffer 渲染)建粗尺度几何与外观,再用免排序泼溅的高斯补细节,并用 surfel 深度缓冲做高斯剔除,从而同时拿到高帧率和视角一致性。

核心矛盾:GES 的两个根因都来自"surfel 完全不透明"这一设定。其一,虽然 MSAA 能平滑 surfel 本身的渲染,但加入高斯后,作用在高斯上的硬深度测试会把高斯的颜色/权重从 1 突然截断到 0——相当于透射率被生硬地 clamp,于是物体边界又出现走样。其二,完全不透明的 surfel 几何本质上不可微,且其颜色与高斯只是松散混合,导致 surfel 与高斯无法联合优化,重建质量次优。

本文目标:在保留 GES「免排序 + 视角一致」优势的前提下,(1) 消除边界走样、(2) 让 surfel 与高斯能端到端联合优化。

切入角度:作者把走样问题重新理解为"硬深度测试 = 透射率突变",于是只要让透射率平滑过渡而不是 0/1 跳变,走样和不可微就能一并解决。要让透射率平滑,就得给 surfel 加半透明边界;而半透明就需要排序才能正确混合——这正好把经典的顺序无关透明(OIT)技术 depth peeling 引了进来。

核心 idea:给 surfel 加一圈半透明边界,用 depth peeling 求每像素 3 层的精确深度顺序与透射率,让高斯仍然免排序泼溅、但权重被对应深度层的透射率平滑调制——用"可微的透射率"同时治走样和打通联合优化。

方法详解

整体框架

DP-GES 的表示由两类基元组成:一组带半透明边界的 2D 不透明 surfel \(\mathcal{S}=\{p_i,r_i,s_i,B_i\}_{i=1}^N\) 负责粗尺度几何与外观,一小撮环绕在 surfel 周围的 3D 高斯 \(\mathcal{G}=\{p_i,\sigma_i,r_i,s_i,B_i\}_{i=1}^M\) 负责精细外观细节(surfel 数量通常不到高斯的 10%)。最终图像是两者颜色的加权归一:\(C=\frac{C_s+C_G}{W_s+W_G}\)

渲染分两趟(two passes)。第一趟用标准图形管线对 surfel 做 3 层 depth peeling,逐层"剥掉"最近可见层,得到 3 张深度图 \(\{D_i^s\}_{i=1}^3\)、颜色图和不透明度图,再按 3DGS 的合成方式 alpha 混合出 surfel 颜色 \(C_s\) 和逐层透射率图 \(\{T_i^s\}_{i=0}^3\)(约定 \(T_0^s=1\))。第二趟把 3D 高斯免排序泼溅到屏幕上:每个高斯按自己中心深度落入哪一深度区间,去查对应层的透射率 \(t_s\),乘到自己的高斯权重上得到最终权重;超出第 3 层或透射率为 0 的高斯由硬件深度测试剔除。整套流程完全可微,初始化后对所有参数做联合优化。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    A["输入:多视角图像 + 位姿<br/>2D surfel + 3D 高斯"] --> B["半透明边界 surfel<br/>边缘 α 从 1 平滑衰减到 0"]
    B --> C["3 层 Depth Peeling<br/>逐层剥离,得每像素深度<br/>与透射率 T0~T3"]
    C --> D["透射率调制的免排序泼溅<br/>高斯按深度层查 Ts,乘高斯权重<br/>越界/T=0 者硬深度测试剔除"]
    D --> E["可微联合优化<br/>透射率打通 surfel↔高斯梯度<br/>Lrgb + Ls + Lscale + Lt"]
    E --> F["输出:高保真免排序新视角"]

关键设计

1. 半透明边界 surfel:把硬深度测试软化成平滑透射率

GES 走样的根因是 surfel 完全不透明、高斯被硬深度测试一刀切。本文给 surfel 在边缘加一圈环形的渐变不透明度:对局部坐标 XY 平面上的圆盘 surfel,点 \((x,y)\) 的不透明度定义为 \(\alpha_i(x,y)=\min(1, w\,G(x,y))\),其中 \(G(x,y)=\exp(-\frac{x^2+y^2}{2})\)\(w\) 是所有 surfel 共享的固定调制常数。\(w<1\) 时 surfel 整体半透明,\(w=255\) 时退化为 GES 的完全不透明 surfel;论文取 \(w=30\),使中心保持不透明(便于高斯剔除)、只在边界留一圈薄薄的半透明环。这一圈半透明让透射率在边界处连续衰减而非 0/1 跳变,于是高斯在 surfel 边界附近会平滑淡出而非被硬截断,从源头抑制走样(Fig. 3 对比清楚地展示了 GES 的硬截断与本文的软过渡)。

2. 3 层 Depth Peeling:为半透明 surfel 求每像素精确遮挡顺序

半透明 surfel 要正确混合就必须排序。作者用经典 OIT 的 depth peeling:每趟 pass 比较上一趟存的逐像素深度,"剥掉"最近一层,从而保证由近到远的正确 alpha 合成顺序。surfel 颜色和透射率按 $\(C_s=\sum_{i=1}^{3} A_i^s\,T_{i-1}^s\,C_i^s + T_3^s\,C_b,\qquad T_i^s=\begin{cases}1,& i=0\\ \prod_{j=1}^{i}(1-A_j^s),& \text{otherwise}\end{cases}\)$ 合成,其中 \(C_b\) 是背景色,可证 \(W_s=\sum_{i=1}^3 A_i^s T_{i-1}^s + T_3^s=1\) 是常数。关键取舍是只剥 3 层:实验发现 3 层就足以避免背景色泄漏,2 层会因半透明区域叠加而漏背景、4 层画质几乎不再涨却显著掉帧(还会破坏 OpenGL 的 4-float 对齐打包、增加带宽)。由于 surfel 数量远小于高斯,3 层 peeling 本身几乎不增加开销。

3. 透射率调制的免排序高斯泼溅:让高斯沿用 GES 的免排序、但权重被正确遮挡

有了逐层透射率,高斯就不必排序了。第二趟把高斯免排序累加,逐像素的高斯颜色与权重为 $\(C_G(\hat{x})=\sum_{i=1}^{K}\mathbb{1}_{dt}(\hat{x})\,c_i\alpha_i(\hat{x})\,t_s(\hat{x}),\quad W_G(\hat{x})=\sum_{i=1}^{K}\mathbb{1}_{dt}(\hat{x})\,\alpha_i(\hat{x})\,t_s(\hat{x})\)$ 其中每个高斯依据中心深度 \(d_i\) 落入哪个深度区间,从 \(\{D_i^s\}\) 查得透射率:\(t_s=T_0^s\)\(d_i<D_1^s\)\(=T_1^s\)\(D_1^s<d_i<D_2^s\),否则 \(=T_2^s\)(式 5)。指示函数 \(\mathbb{1}_{dt}\) 做逐像素剔除:深度超过第 3 剥离层或透射率为 0 的高斯被丢弃(\(\mathbb{1}_{dt}=\mathbb{1}(d_i<d_s(\hat{x})+\epsilon_s)\)\(d_s\) 取该像素最近一层 \(T_i^s=0\) 的剥离深度,若 3 层透射率都非零则默认取第 3 层深度 \(D_3^s\))。这样被部分遮挡的高斯会在 surfel 边界附近平滑淡出,既消除走样又防止遮挡泄漏——拿到了免排序的速度,却没丢正确的遮挡。

4. 透射率打通的可微联合优化:surfel 与高斯互相塑形

GES 中 surfel 只在自己的阶段优化、联合阶段无法再被细化,导致出现"突出的 surfel"遮挡细节。DP-GES 中透射率把 surfel 和高斯连了起来,surfel 几何参数 \(S_g=\{p_i,r_i,s_i\}\) 不仅直接从图像损失收到梯度 \(\frac{\partial L}{\partial C}\frac{\partial C}{\partial C_s}\frac{\partial C_s}{\partial S_g}\),还能经由透射率间接从高斯收到梯度 \(\frac{\partial L}{\partial C}\frac{\partial C}{\partial C_G}\frac{\partial C_G}{\partial t_s}\frac{\partial t_s}{\partial S_g}\)。损失为 \(L=L_{rgb}+\lambda_1 L_s+\lambda_2 L_{scale}+\lambda_3 L_t\)\(L_s=L_1(C_s,I_{gt})\) 让 surfel 拟合粗外观/几何;\(L_{scale}=\frac{1}{N}\sum_i \exp(\frac{\tilde{s}_i^X+\tilde{s}_i^Y}{2})\) 惩罚过大 surfel、防止几何鲁棒性退化;\(L_t=\frac{1}{HW}\sum_{\hat{x}}(1-T_3(\hat{x}))^2\) 抑制背景色泄漏。\(L_t\) 的设计很巧——直觉上该加"鼓励 \(T_3=0\)"的项,但实验发现那样反而让半透明区在像素内堆叠、\(T_3\neq0\) 概率升高;作者反其道而行,对 \(T_3\neq0\) 的像素施压,迫使重叠的半透明部分相互推开、让该像素更可能被别的 surfel 不透明区覆盖,从而把 \(T_3\) 驱向 0(少于 2 层 surfel 覆盖的像素则 mask 掉其梯度)。

损失函数 / 训练策略

总损失 \(L=L_{rgb}+\lambda_1 L_s+\lambda_2 L_{scale}+\lambda_3 L_t\),取 \(\lambda_1=0.01\)\(\lambda_3=0.08\)\(\lambda_2\) 在无界场景取 \(5\times10^{-5}\)、有界场景取 \(1\times10^{-5}\)。优化基于 PyTorch,并配套一个等价的 OpenGL 渲染器以充分利用标准图形管线做实时渲染;surfel 与高斯经快速初始化后做全可微联合优化(初始化/优化细节在附录)。

实验关键数据

实验在 RTX 4090 上进行,数据集沿用 3DGS 的设置:NeRF Synthetic(8 合成场景)、Mip-NeRF360(9 真实场景)、Deep Blending(2 场景)、Tanks & Temples(2 场景)。指标用 PSNR/SSIM/LPIPS 评画质,FPS 评速度,并按 StopThePop 用 \(\overset{F}{LIP}_1\)/\(\overset{F}{LIP}_7\) 评短期/长期 popping。为公平比较,所有 MCMC 类方法的基元数都设为与 DP-GES 的 surfel+高斯总数相同。

主实验:画质对比(数据集平均)

数据集 指标 Ours GES DBS SSS 3DGS
Mip-NeRF360 PSNR↑ 28.11 27.38 28.10 27.78 27.43
Mip-NeRF360 LPIPS↓ 0.196 0.208 0.210 0.203 0.214
Deep Blending PSNR↑ 30.30 30.00 30.25 30.25 29.41
Tanks & Temples PSNR↑ 24.61 23.95 24.52 24.70 23.62
Tanks & Temples LPIPS↓ 0.162 0.181 0.166 0.166 0.183
NeRF Synthetic PSNR↑ 34.13 33.37 34.34 33.63 33.31

DP-GES 在所有数据集上与 SOTA 持平或更优,LPIPS(感知质量)几乎全面领先,在远景细节、Bonsai 去 floater、Counter 高保真反射上尤其明显。

主实验:效率与视角一致性(Mip-NeRF360,1080p)

方法 FPS↑ 存储(MB)↓ 训练(min)↓ \(\overset{F}{LIP}_1\) \(\overset{F}{LIP}_7\)
Ours 472 156 40 0.0232 0.0431
GES 675 366 43 0.0229 0.0394
DBS 156 165 20 0.0297 0.0771
SSS 62 351 38 0.0300 0.0716
3DGS 185 734 28 0.0250 0.0471

DP-GES 以 472 FPS 比 DBS/SSS 等高保真基线快 3 倍以上,且存储最省(156MB)。相对 GES 的小幅开销主要来自高斯渲染趟需从纹理缓冲取剥离深度/透射率、增加了带宽。\(\overset{F}{LIP}\) 略高于 GES 是因 spherical Beta 带来更高频的视角相关效果(\(\overset{F}{LIP}\) 用光流 warp 误差、无法区分视角变化与真 popping),并非一致性更差。

消融实验(Mip-NeRF360,1080p)

配置 PSNR↑ LPIPS↓ FPS↑ 说明
Ours (full) 28.11 0.196 472 完整模型
Ours (base) 27.72 0.197 480 退回 GES 的 SH 颜色 + densification
w/ 2 layers 27.02 0.223 578 只剥 2 层 → 背景泄漏,掉点最多
w/ 4 layers 28.10 0.196 278 4 层画质几乎不涨却大幅掉帧
w/o trans. grad 27.82 0.206 477 切断透射率梯度路径 → 细节变糊
w/o \(L_s\) 28.05 0.198 462 去几何对齐约束
w/o \(L_{scale}\) 28.07 0.203 461 去尺度正则 → 色彩泄漏
w/o \(L_t\) 27.86 0.209 475 去背景泄漏抑制

关键发现

  • 剥离层数是质量/效率的关键平衡点:2 层因半透明区叠加而漏背景,PSNR 暴跌到 27.02;4 层几乎不涨画质(28.10 vs 28.11)却把帧率从 472 砍到 278。3 层是甜点。
  • 透射率梯度路径很重要:切断它(w/o trans. grad)PSNR 掉到 27.82、细节变糊、出现 GES 式的突出小 surfel,证明 surfel 与高斯必须当作完全耦合的可微系统、而非"只让 surfel 可微"。
  • 表示本身的增益与 densification 正交:Ours (base) 退回 GES 的颜色与 densification 后仍达 27.72,超过 GES 与 AbsGS、接近 SSS,说明提升主要来自新表示+渲染模型,而非基元数量策略。
  • \(L_t\) 的反直觉设计有效:直接鼓励 \(T_3=0\) 反而更糟,转而惩罚 \(T_3\neq0\) 的像素迫使半透明区相互推开,才真正把 \(T_3\) 驱向 0。

亮点与洞察

  • 把"走样"重述为"透射率突变":这是全文最漂亮的一步——一旦把 GES 边界走样归因于硬深度测试等价于透射率被 clamp,"给 surfel 加半透明边界让透射率平滑"就成了顺理成章的解,且顺带把不可微问题一起解决了,一举两得。
  • 用经典图形学 OIT 接住新问题:depth peeling 是 20 年前的老技术,作者发现"半透明 surfel 需要排序"恰好可以用它求每像素精确顺序,再把剥离出的透射率反哺给免排序高斯,把"精确排序"和"免排序加速"两者的优点缝在一起,是很有迁移价值的思路。
  • "只剥 3 层"的工程直觉:不追求物理精确的任意层数,而是结合 OpenGL 4-float 对齐与带宽实测把层数钉死在 3,体现了对图形管线底层的把握。
  • 可迁移性:半透明边界 + 透射率调制这套"软化硬深度测试"的做法,可推广到其他 surfel/混合表示的免排序渲染;spherical Beta、densification 等正交改进也能直接叠加进来。

局限与展望

  • 作者承认:与 GES 类似,DP-GES 对透明/半透明物体(如玻璃窗)仍有伪影,因 surfel 主要是不透明的(不过比 GES 已明显改善)。
  • surfel 不如 2DGS 的全半透明 surfel 灵活,需要额外初始化、训练时间相对较长。
  • spherical Beta 增强视角相关效果的同时增加过拟合风险(DBS 中也观察到)。
  • ⚠️ 代码似乎尚未公开(论文未给链接),复现需自行实现 OpenGL 渲染器与初始化策略,门槛不低。
  • 个人观察:3 层层数是在当前数据集上调出的经验值,几何更复杂、半透明叠层更多的场景下 3 层是否仍够、\(L_t\) 的"推开"策略是否还稳定,值得进一步验证。

相关工作与启发

  • vs GES:本文的直接前身。GES 用完全不透明 surfel + 硬深度测试,导致边界走样且 surfel 不可微、不能联合优化;DP-GES 给 surfel 加半透明边界、用 depth peeling 求顺序,既消走样又打通可微联合优化,画质更高、存储更省(156 vs 366 MB),代价是略高带宽开销和稍慢于 GES 的帧率。
  • vs SortFreeGS(免排序 OIT 风格):完全免排序但有严重遮挡泄漏;DP-GES 用剥离深度做高斯剔除,在保持免排序的同时防住泄漏。
  • vs HTGS(只精排前几个高斯):只排前 16 个、其余近似为加权尾部,视觉上减 popping 但放大 floater(floater 占据前排深度、把深层高斯挤进低权尾部,优化中 floater 不断增大不透明度补偿);DP-GES 没有这种"前排/尾部"近似,避免了该 floater 问题。
  • vs StopThePop / DRK(层次/缓存近似排序):近似排序无法彻底消 popping;DP-GES 走的是 surfel 精确剥离 + 高斯免排序的混合路线,从机制上规避了排序顺序突变。
  • vs 3DGRT / EVER(光线追踪精确排序):精确但太慢;DP-GES 以 472 FPS 在质量接近的同时快了一个量级。

评分

  • 新颖性: ⭐⭐⭐⭐ 把"走样=透射率突变"的重述 + 用 depth peeling 接半透明 surfel 的组合很巧妙,但整体是 GES 的精细化改进而非全新范式。
  • 实验充分度: ⭐⭐⭐⭐⭐ 4 个数据集、近 10 个 baseline、画质/效率/一致性/消融全面覆盖,关键取舍(层数、各 loss、梯度路径)都有消融支撑。
  • 写作质量: ⭐⭐⭐⭐ 机制与公式交代清晰,\(L_t\) 的反直觉设计解释到位;部分细节(初始化、\(\epsilon_s\))压在附录。
  • 价值: ⭐⭐⭐⭐ 实时高保真免排序渲染对实际应用价值高,156MB 存储 + 472 FPS 很有吸引力,惜代码未公开。