3DGUT 论文精读:用无迹变换解锁 3DGS 的畸变相机与次级光线

3D 高斯泼溅(3DGS)重建质量高、渲染快,但被光栅化管线绑死在理想针孔相机上:鱼眼、大畸变镜头要先”去畸变”,卷帘快门这类时变效应无法建模,反射折射等次级光照更是无从谈起。NVIDIA 在 CVPR 2025 提出的 3DGUT 换了一个思路——不再对投影函数做线性化,改用无迹变换近似高斯粒子本身,并把渲染公式与光线追踪方法 3DGRT 对齐,一次解锁了任意畸变相机、卷帘快门与反射/折射混合渲染,帧率依然保持在 200+ FPS。本文是对这篇论文的精读笔记。

不近似函数,近似粒子本身

3DGUT 论文精读:用无迹变换解锁 3DGS 的畸变相机与次级光线

一、论文信息与任务

内容
论文 3DGUT: Enabling Distorted Cameras and Secondary Rays in Gaussian Splatting
会议 CVPR 2025
作者 Qi Wu、Janick Martinez Esturo(共同一作)、Ashkan Mirzaei、Nicolas Moenne-Loccoz、Zan Gojcic
单位 NVIDIA;Ashkan Mirzaei 同时隶属多伦多大学
代码 https://github.com/nv-tlabs/3dgrut(已集成进 gsplat 库)
项目主页 https://research.nvidia.com/labs/toronto-ai/3DGUT

任务:多视图 3D 场景重建与新视角合成。与普通 3DGS 工作不同,它要求在光栅化渲染管线内同时做到两件事:

  1. 支持任意非线性相机投影模型(鱼眼、大畸变)与时变相机效应(卷帘快门);
  2. 支持次级光线,从而渲染反射、折射等光照效果;

并且保持 3DGS 级别的实时速度。

  • 输入:一组多视角图像与对应相机参数(不限于针孔,可以是鱼眼/畸变/卷帘快门时变位姿;Waymo 场景额外使用 LiDAR 深度监督)。
  • 输出:3D 高斯粒子场景表示(位置 $\mu$、旋转四元数、尺度 $S$、不透明度 $\sigma$、三阶球谐视角相关颜色)、新视角图像、混合渲染图像(可在场景中插入反射球、折射雕像)。

论文 Fig.1 全景展示了这两项能力:左半对比”去畸变后训练”与”直接用原始畸变视图训练(Ours)”的重建质量,右半展示在场景中插入反射球、折射雕像后的次级光照渲染效果。

二、动机:光栅化的两个天花板

业务问题:自动驾驶、机器人、手机等真实传感器大量使用广角/鱼眼镜头与卷帘快门传感器,且载体在运动中拍摄。传统 3DGS 重建前必须把图像去畸变校正成针孔模型,这一过程裁切掉大量边缘像素、丢失信息、拉低重建质量;与此同时,反射折射等次级光照效果在仿真、虚拟物体插入中不可缺少,而纯光栅化管线天然不支持。

现有方案各有短板:

方案族 代表 问题
光栅化 splatting 3DGS、StopThePop EWA 投影是一阶泰勒线性化,每种相机模型都要手推雅可比;畸变越大误差越大;卷帘快门无法表示
专用扩展 FisheyeGS、GS on the move 每个畸变模型定制一套公式,换个模型就要重来,扩展性差
光线追踪 3DGRT、EVER 原生支持复杂相机与次级光线,但渲染慢约 3-4 倍

归结起来是两个核心挑战:

  1. 投影挑战:EWA 公式近似的是”投影函数”——线性化丢弃高阶项,雅可比依赖具体相机模型,时变效应塞不进单个投影函数;
  2. 渲染公式对齐挑战:光栅化(2D 评估 + 全局 tile 排序)与光线追踪(3D 评估 + 沿光线精确排序)的渲染公式不一致,同一份表示无法在两种模式下无缝切换,也就做不了”主光线光栅化 + 次级光线追踪”的混合渲染。

三、解决思路一:用无迹变换替换 EWA 投影

EWA 投影的本质问题:把弯曲的投影函数在均值处”掰直”。3DGUT 反过来——保留弯曲的函数,把连续的分布拆成几个代表点,这正是无迹卡尔曼滤波中的无迹变换(Unscented Transform, UT)。

Sigma 点构造:3D 高斯的协方差按 $\Sigma=RSS^TR^T$ 分解,取 $2\times3+1=7$ 个 sigma 点:

$$x_0=\mu,\qquad x_i=\mu+\big[\sqrt{(3+\lambda)\,\Sigma}\,\big]_{[:,i]},\qquad x_{i+3}=\mu-\big[\sqrt{(3+\lambda)\,\Sigma}\,\big]_{[:,i]}\quad(i=1,2,3)$$

其中 $\lambda=\alpha^2(3+\kappa)-3$,实验取 $\alpha=1.0$、$\beta=2.0$、$\kappa=0.0$。

逐点精确投影:每个 sigma 点是普通 3D 点,直接代入任意非线性投影函数 $g(x)$ 精确投影到像平面,不需要雅可比。卷帘快门的时变效应也顺理成章——每个点代入自己所在行对应时刻的外参 $W(t)$。

重估 2D 高斯:从投影后的点加权重建均值与协方差:

$$v_\mu=\sum_{i=0}^{6}w_i^{\mu}\,v_{x_i},\qquad \Sigma'=\sum_{i=0}^{6}w_i^{\Sigma}\,(v_{x_i}-v_\mu)(v_{x_i}-v_\mu)^T$$

权重不是拍脑袋定的,而是由两个矩匹配约束解出来的:$\sum_i w_i=1$ 与 $\sum_i w_i(x_i-\mu)(x_i-\mu)^T=\Sigma$。代入对称构造后得到 $2wc^2=1$,即 $w=\frac{1}{2(3+\lambda)}$,中心点权重由归一化补足为 $\frac{\lambda}{3+\lambda}$(中心点对协方差贡献为零,其协方差权重里额外加 $(1-\alpha^2+\beta)$ 用于校正四阶矩峰度,高斯分布取 $\beta=2$ 最优)。

为什么比线性化准:把左右对称的 sigma 点配对做泰勒展开,一阶、三阶项符号相反全部抵消;而二次项系数 $wc^2=\tfrac12$ 恰好等于真实均值泰勒展开里的 $\tfrac12\mathrm{tr}(H\Sigma)$ 修正项——UT 的均值、协方差估计精确到二阶(均值因对称性连三阶误差也为零),误差从四阶才出现;EWA 线性化在二阶就出错,且畸变曲率越大差得越远。

关键设计定位:重估出的 2D conic 只用于加速结构(沿用 3DGS/StopThePop 的 tile 划分与 culling,决定哪些粒子影响哪些像素),粒子响应的评估不在 2D 做(见下节),因此梯度不需要反向穿过非线性投影函数,数值更稳定。作者用伪代码说明:原 3DGS 管线只需替换一个 Estimate2DGaussian 函数即可(drop-in replacement)。

四、解决思路二:把渲染公式与光线追踪对齐

3D 粒子响应评估(与 3DGRT 一致):对光线 $r(\tau)=o+\tau d$,取粒子响应沿光线最大处的单点评估,闭式解:

$$\tau_{\max}=\frac{(\mu-o)^T\Sigma^{-1}d}{d^T\Sigma^{-1}d}=-\frac{o_g^Td_g}{d_g^Td_g},\qquad o_g=S^{-1}R^T(o-\mu),\ d_g=S^{-1}R^Td$$

相比 3DGS 在 2D 投影之后评估,这条路径的梯度不流经投影函数,避免了近似与数值不稳定;作者在补充材料中给出了数值稳定的反传推导($\partial\alpha/\partial\mu$、$\partial\alpha/\partial S$、$\partial\alpha/\partial R$)。

近似的按深度排序:光栅化没有 BVH,无法像 3DGRT 那样精确取沿光线最近的 k 个粒子,于是采用 StopThePop 的 MLAB(多层 alpha 混合,即 k-buffer,$k=16$):每条光线保留 k 个最远命中粒子存入 buffer,最近的粒子增量式 alpha 混合直到透射率消失,以此近似 $\tau_{\max}$ 排序。作者还讨论了 HT(混合透明)替代方案:存 k 个最近、混合最远,精确但要遍历全部粒子,较慢。

混合渲染:渲染公式对齐后,同一份表示可以既光栅化又追踪。先光栅化主光线(并可丢弃落在最近交点之后的高斯命中),再用 3DGRT 追踪次级光线——反射、折射、虚拟物体插入由此在光栅化框架内实现。

论文 Fig.9 展示了三类应用:(a) 卷帘快门场景的重建与帧序列渲染;(b) 手持拍摄的大畸变视频重建;(c) 混合渲染——主光线光栅化 + 次级光线追踪的反射/折射效果。

实现与训练细节:PyTorch + 自定义 CUDA kernel;采用 StopThePop 的剔除策略;没有 2D 屏幕空间梯度,改用 3D 位置梯度(除以到相机距离的一半);每 300 次迭代 densify/prune;训练 30k 迭代,损失 $L=L_2+0.2\,L_{SSIM}$;Waymo 额外加入 LiDAR 深度 $L_1$ 与不透明度 $L_2$ 加权损失。补充材料还提出广义高斯核(degree n),degree=4 对应 3DGRT 的 degree=2,可在质量与速度之间调节。

五、实验表现

对比设置:对比 3DGS(Kerbl 2023)、StopThePop(SIGGRAPH Asia 2024)、3DGRT(SIGGRAPH Asia 2024)、EVER、FisheyeGS(鱼眼专用)、ZipNeRF(NeRF 代表);指标 PSNR↑ / SSIM↑ / LPIPS↓ / FPS↑(单张 RTX 6000 Ada,数据集原始分辨率)。数据集:MipNeRF360(9 个场景、标准针孔)、Tanks & Temples(Truck/Train)、Scannet++(6 个鱼眼场景,1752×1168)、Waymo(9 个静态场景,畸变相机 + 卷帘快门)。

MipNeRF360(针孔、公平对比场)

方法 PSNR↑ SSIM↑ LPIPS↓ FPS↑
3DGS 27.26 0.803 0.240 347
Ours 27.26 0.810 0.218 265
StopThePop 27.14 0.804 0.235 340
3DGRT 27.20 0.818 0.248 52
EVER 27.51 0.825 0.233 36
Ours (sorted) 27.26 0.812 0.215 200

画质与各家相当,速度上 Ours 265 FPS、Ours (sorted) 200 FPS——支持复杂相机的方法里最快的 3DGRT 也只有 52 FPS。逐项毫秒计时(每张):3DGS 2.88、Ours 3.77、StopThePop 2.94、Ours (sorted) 4.98,3DGRT 则高达 19.24。

Scannet++(鱼眼相机):Ours (sorted) 达到 29.11/0.910/0.252,全面超过专门为等距鱼眼推导雅可比的 FisheyeGS(28.15/0.901/0.261),且仅用 0.38M 个高斯(FisheyeGS 1.07M)。对照去畸变后训练 3DGS 只有 22.76/0.798——去畸变裁掉大量像素的损失非常直观。

Waymo(畸变 + 卷帘快门):Ours (sorted) 30.16/0.900 超过 3DGRT(29.99/0.897);3DGS 需要校正图像且忽略卷帘快门(29.83/0.917),不做直接比较。

定性结果

卷帘快门案例分析(论文 Fig.7):用合成旋转相机 + 卷帘快门数据渲染同一箱子并逐帧拼接对比,Ours (sorted) 忠实还原传感器运动、恢复无畸变几何(各 tile PSNR 约 46~49),3DGS 无法建模时变效应,帧间出现明显错位撕裂。

对齐性验证(论文 Fig.8):把各方法训练出的表示统一用 3DGRT 重新渲染,Ours (sorted) 结果(PSNR 25.10)最接近 3DGRT 自身渲染,而 3DGS(19.80)与 StopThePop 偏差更大——证明本文渲染公式与光线追踪对齐得最好,支持无缝混合渲染。

投影精度定量(补充材料):以蒙特卡洛投影(每高斯 500 采样)为参考用 KL 散度评估——针孔下 EWA 与 UT 一致;鱼眼、径向畸变、卷帘快门平移下 UT 的中位 KL 稳定在约 $4.4\sim4.6\times10^{-3}$,EWA 则显著劣化(卷帘快门场景出现长尾),这正是 EWA 渲染卷帘快门时撕裂伪影的根源。

六、借鉴意义与已知局限

  1. “近似粒子而不是近似函数”的思路很通用:凡遇到函数复杂/难求导/时变的环节,都可以考虑把变换施加在一组代表性采样点上再重估统计量。工程成本极低——原 3DGS 管线只替换一个 Estimate2DGaussian 函数,且已被 gsplat 官方集成,迁移路径清晰。
  2. UT 只做加速结构、评估仍在 3D 的分层设计:投影环节与响应计算解耦,避免梯度流经非线性投影函数,兼顾任意相机支持与数值稳定性。”近似只控制像素-粒子分配、不影响最终积分”值得在自研渲染器中借鉴。
  3. 渲染公式对齐带来生态价值:与 3DGRT 统一后,同一份表示可光栅化(主光线快)也可追踪(次级光线),混合渲染直接复用;”渲染器对齐”是打通 splatting 与 tracing 工具链的关键,后续做逆渲染、重光照同样受益。
  4. 直接吃原始畸变数据、免去去畸变预处理:保留全部像素参与监督、质量反而更高(Scannet++ 上 PSNR 高出 6+ dB),对自动驾驶、机器人等真实传感器数据重建有直接工程价值——管线中可以省掉 rectification,并支持卷帘快门每行像素各自的外参。
  5. 已知局限(follow-up 切入点):大畸变下投影形状偏离 2D 高斯、tile 分配变糙;单点评估难以精确渲染互相重叠的高斯;UT + 3D 评估比纯 3DGS 略慢。文中指出 EVER 等椭球精确渲染可能是缓解方向。
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2019-2026 guoben

微信