
实时渲染静态 3D 场景是很麻烦的因为现实世界并不是静止的人在移动液体在流动物体在变形。把 3D-GS 扩展到动态场景4D听起来只需要一步随时间跟踪每个点但是实际操作起来却很麻烦因为显存瓶颈非常棘手。4D Gaussian Splatting4D-GS的架构的方法相当巧妙所以本文记录一下 4D-GS 如何用一个因子分解的形变场取代暴力跟踪从而绕开动态渲染的显存爆炸问题。显存瓶颈原始跟踪方式为何行不通要理解 4D-GS 的精妙之处得先弄清楚它要解决的问题。传统动态 NeRF 把一个 8 维输入空间x、d、t、λ映射到颜色和密度λ 是用来处理表面分裂或合并等拓扑变化的潜在编码。这套方案效果不错但 NeRF 的隐式表示天然限制了渲染速度。3D Gaussian Splatting 把场景显式表示为数百万个类点的 Gaussian靠光栅化快速渲染解决了速度问题。但如果为每一帧都存一份每个 Gaussian 的位置、旋转和缩放1 亿个 Gaussian × 100 帧显存需求会线性爆炸。4D-GS 的做法是彻底放弃逐帧存储 Gaussian只维护一组规范canonical3D Gaussian再用一个轻量神经网络作为形变场计算这组基础 Gaussian 在任意时间戳下应该如何位移、拉伸、旋转。渲染方程由此简化为G’ G ΔG形变后的场景 G’ 等于静态基线 G 加上神经网络预测的变化量 ΔG。拆解形变场如何在不引发显存爆炸的前提下算出 ΔG4D-GS 把这个任务拆成两个阶段观察者编码器和导演解码器。1、时空结构编码器观察者要形变一个点得先知道它的上下文位置在哪此刻是什么时间邻居在做什么。最简单的的做法是把场景塞进一个庞大的 4D 神经体素网格x、y、z、t但 O(N⁴) 的显存开销是不现实的。4D-GS 借用了 HexPlane 和 K-Planes 里的一个技巧分解。把庞大的 4D 空间拍平成 6 个轻量、多分辨率的 2D 平面空间平面XY、XZ、YZ时间平面XT、YT、ZT网络查询一个连续的 Gaussian 坐标比如 μ (1.234, 5.678, 2.0)在时间 t 的值时这个坐标不会正好落在网格顶点上。编码器用双线性插值找到每个平面上最近的四个网格角点算出距离加权平均提取出 6 个特征向量。这 6 个向量通过逐元素Hadamard乘积绑定在一起这个稠密向量 f_h 再送进一个很小的 MLP得到最终压缩后的上下文向量 f_d。HexPlane 怎么初始化网络能不能训好很大程度上取决于起点4D-GS 里六个特征平面的初始化方式其实是很值得研究的。第一次前向传播之前显式特征网格要先填好数值空间平面XY、XZ、YZ用 [0.1, 0.5] 区间内的均匀随机值初始化给网络留出学习空间特征的余地时空平面XT、YT、ZT则统一初始化为 1。时间特征为什么要设成 1不同平面的特征通过逐元素相乘组合。如果时间特征是 1乘上空间特征不会有任何变化x × 1 x。模型一开始的行为就等同于把整个世界当成静止的。这是刻意为之网络不预设到处都有运动而是从静态场景出发只有当损失函数说明必须靠运动才能解释观测数据时才去修改时空特征。运动不是模型自带的得靠优化过程挣出来。这样网络只会在真正存在运动的地方学习形变得到的动态场景表示也更稳定、更符合物理规律。2、多头解码器导演拿到上下文向量后多头解码器把 f_d 翻译成具体的物理指令。几个独立的线性头分别预测位置偏移ΔX旋转偏移Δr缩放偏移Δs这些值加到规范 Gaussian 上场景交给可微分光栅化器做实时的、基于图块的 splatting。不过这里有一个有意思的架构限制4D-GS 主流程并不预测颜色 ΔC 或不透明度 Δα 的变化。为什么要卡死这两项神经网络一旦有机会偷懒就会偷懒。要是能自由改颜色和不透明度网络完全可以不老老实实把 Gaussian 从 A 点挪到 B 点而是把 A 点的不透明度调成零、B 点调成一颜色再一闪伪造出物体在移动的假象。这样一来场景的物理几何结构就被破坏了下游的 3D 跟踪也没法做。锁死颜色和不透明度逼着网络去学真正的物理形变。作者也提到遇到流体或极端非刚性运动这类边缘情况可以把 ΔC 和 Δα 的预测重新打开。损失函数与训练过程从零训练一个动态场很容易乱套优化器要同时琢磨清楚基础几何和运动。4D-GS 用两阶段训练来稳住这个过程。静态预热前 3000 次迭代里形变场完全关闭模型的行为等同于一个普通 3D-GS逼着规范 Gaussian 先找到最优的静态几何。4D 优化打开形变场网络开始预测运动通过可微分 splatting 渲染图像并计算损失。目标函数在准确性和平滑性之间做了权衡L1 损失约束渲染结果去匹配真实图像 Î全变分损失 L_tv 直接作用在 HexPlane 网格上惩罚相邻网格单元间的剧烈跳变从数学上强制运动保持平滑连续。反向传播两条路径splatting 函数 S 是可微分的总损失 L 可以通过链式法则一路反传回整个流程。反向传播时优化器计算损失相对于所有可学习参数的梯度这些梯度分成两条路径。路径 A更新规范 GaussianG梯度一路传回基础的规范点云更新起始位置和属性。dL/dG 更新基础几何保证规范形状准确。路径 B更新形变场F梯度经过加法操作G’ G ΔG流入神经网络调整网络对运动的预测方式。所以就需要一套很细的学习率调度用来保证训练稳定解码器权重θDdL/dθD 更新多头 MLP 的权重。论文里这部分训练得比较保守学习率从 1.6 × 10⁻⁴ 衰减到 1.6 × 10⁻⁵。HexPlane 特征RldL/dRl 更新六个多分辨率 HexPlane 里存的实际特征值。这些是显式网格参数不是深度网络权重学习速度快一些学习率从 1.6 × 10⁻³ 衰减到 1.6 × 10⁻⁴。跑完最多 20000 次迭代规范 Gaussian 逐渐稳定到最优的基础形状HexPlane 和 MLP 也不断调整参数直到预测出的形变能准确还原视频里的动态。多视角与单目两种不同的现实动态渲染器的真正考验在于数据输入方式。多视角场景下比如 Neu3D15—20 台相机同时拍摄网络每个时间戳只算一次 4D 形变但会从 20 个角度分别 splatting、算损失密集的反馈信息能防止模型为了骗过单一视角而把几何压扁。单目场景比如 D-NeRF只有一个相机角度网络得靠 HexPlane 的时间连续性去推断 3D 运动。在 HyperNeRF 这类相机本身在向前移动的数据集里形变场容易陷入局部极小值很难把相机的运动和被拍摄主体的运动区分开。极端快速的运动、又缺乏多视角重叠的场景对目前的编码器设计来说仍然是个难题。总结从静态点云渲染跳到动态渲染不只是多加一个时间变量那么简单信息的存储和查询方式得整个重新设计。用形变取代跟踪只维护一组规范 Gaussian、预测形变显存开销取决于运动网络的复杂度而不是视频长度。分解是核心把 4D 空间因子分解成六个 2D 平面靠双线性插值快速查询特征绕开了 4D 体素的 O(N⁴) 显存问题。用约束换真实不让网络碰颜色和不透明度逼它去学真正的物理运动代价是多花点训练技巧换来的是渲染之外还能做 3D 跟踪。所以4D-GS 靠合适的因子分解和几个关键约束显式表示照样能搞定时间维度而不用牺牲让它一开始就站住脚的实时性能。https://avoid.overfit.cn/post/683075ee5f55470999e2033fa04ace6f作者Prajas Wadekar