
第一次把 4D Gaussian Splatting 跑通的时候我盯着渲染结果看了很久视频里的物体在运动、相机视角在切换、画面还能维持在实时帧率那一刻才真正意识到动态场景渲染这条路被这篇论文彻底改写了。你在三维视觉方向刷文章大概率见过 4DGS 这个缩写它解决的问题很直白既然 3DGS 已经把静态场景做到实时高保真那动态场景能不能同样用高斯泼溅实时渲染这篇阅读笔记我会从背景动机、核心设计、模块拆解、实验分析一直讲到复现过程中的实际问题尽量把“为什么这样做”讲透而不是贴几个公式就走。1. 动态场景渲染为什么是个“硬骨头”动态场景渲染难难点不在于“多了一维时间”而是时间维度把原来所有舒服的假设都打破了。先看静态场景。NeRF 时代我们训练一个场景要几个小时渲染一帧还要沿光线采样几十上百个点离线跑一张图都要等好几秒。3D Gaussian Splatting 出来后情况完全变了场景由一大堆椭球状高斯组成渲染时把这些高斯直接投影到图像平面做光栅化训练时间压到分钟级渲染速度直接进入实时区间。静态场景的难题基本被 3DGS 解决了于是所有人的目光都转向了动态场景。动态场景麻烦在哪里第一数据是离散的。视频只是一组固定时间戳的图像中间时刻的场景状态我们看不到但用户希望任意时刻都能渲染。第二场景几何在变。人走路、衣服摆动、物体旋转高斯的中心、朝向、大小每一帧都可能不同。第三遮挡和外观也在变。物体移走后背景露出来光照和反射跟着时间走这些信息必须被模型捕捉到。早期动态 NeRF 方法比如 D-NeRF、TiNeuVox、K-Planes解决这些问题的思路是在隐式神经辐射场里加一个时间编码让网络同时回归密度和颜色。思路没错效果也确实在提升但它们共享同一个致命缺陷每条光线要采样大量空间点每个点都要单独过一遍 MLP训练慢、渲染更慢跟“实时”完全不沾边。当时我看到这类工作时的感觉是精度再涨几个点离实用也还有很长的距离。真正需要的不是把 NeRF 调得更准而是换一套渲染范式。4DGS 的出发点就是这个——既然静态场景能用高斯泼溅做到实时能不能让这些高斯学会随时间运动从而把动态场景也变成一次光栅化渲染论文的答案是可以而且效果和速度同时在线。2. 核心思路与其学一个4D场景不如学会“移动”3D高斯2.1 把静态高斯看成演员的骨架4DGS 整个设计可以用一个类比帮助理解静态 3D 高斯相当于演员的骨架模型deformation field 是骨骼绑定和动画驱动系统。演员本身没有变变的是每一帧它的姿态、朝向、缩放、表情——对应高斯的中心、旋转、缩放和颜色。这个分工非常干净。场景里那些高频的几何细节、纹理细节全部由 3DGS 这个显式表达承担变形网络只需要负责“怎么动”。静态高斯相当于一个基准参考变形网络学到的是相对于这个基准的偏移量。所以即使时间维度变化很大基准场景仍然提供一个强先验模型不会完全失控。这也是 4DGS 为什么没有选择逐帧重建 3DGS 的原因。逐帧重建意味着每一帧的高斯互不相关帧间没有任何一致性约束最后渲染出来的视频一定是抖动的、闪烁的。用一个共享的静态高斯集合加一个时间连续的变形场天然就保证了时空一致性。2.2 输入输出哪些量参与变形具体到每个 3D 高斯它携带的信息包括中心位置、旋转四元数、缩放向量、不透明度、球谐颜色系数。4DGS 的变形网络输入的是高斯的位置和时间戳输出的是增量位置增量、旋转增量、缩放增量、球谐系数增量。注意不是只让位置动。这一点极其重要。如果只平移高斯的中心它的朝向和大小不会随形变调整渲染出来就像贴纸在滑动物体转个角度画面立刻崩坏。加入旋转增量高斯可以表达局部朝向的变化加入缩放增量高斯可以表达拉伸和收缩。旋转用四元数表示输出后需要保证单位化不然会出现旋转奇异点。缩放通常处理成 log 空间避免出现负值。球谐系数的增量同样不能少。动态场景里不只是几何在变颜色也在变比如人物转身时衣服的明暗变化、灯光闪烁、反射高光移动。如果球谐系数保持不变外观就锁死在静态基准上动态光照完全无法体现。2.3 为什么不直接学习一个4D高斯场站在事后角度直接学习 4D 高斯场听起来很顺理成章给每个高斯加上时间维度构建一个四维体。但这么做有两个硬伤。第一是参数爆炸。视频有几十甚至几百帧如果每个时间步都维护一组独立高斯高斯数量随帧数线性膨胀训练和存储都扛不住。第二是数据稀疏。一个高斯在什么时刻应该出现在哪里只有被观测到的帧才提供监督信息没被观测到的时刻只能靠插值猜。直接学一个高维场模型很容易过拟合到离散帧中间时刻胡乱生成。变形场思路则绕开了两个问题。时间 t 只是网络的一个额外输入维度高斯数量不随时间增加。网络学到的是从“3D位置时刻”到“位移量”的连续映射天然支持任意时间插值。训练好之后想渲染第几帧就传第几个 t整个过程是同一个前向计算没有任何额外成本。2.4 与动态NeRF的分工差异理解 4DGS 的关键在于“责任划分”。K-Planes、HexPlane 这类动态 NeRF 方法网络要同时回答“哪里有东西”和“东西长什么样”两个问题4DGS 把后者完全甩给了稳定的 3DGS 显式表达网络只回答“东西每一刻在什么状态”。显式表达提供几何和纹理的高频细节隐式变形场提供时间维度的泛化能力两者各干各擅长的事。后来大量动态高斯类工作都在沿用这个分工SC-GS 用稀疏控制点驱动大规模高斯本质上还是显式高斯表达加一个轻量驱动模块。这说明 4DGS 选的这个架构方向是经得起验证的。3. 时间怎么塞进高斯HexPlane与变形网络的设计细节3.1 HexPlane六平面是什么要让网络预测高斯在时间 t 的增量第一步必须把“位置时间”这个四维坐标编码成有意义的特征向量。4DGS 采用的编码器是 HexPlane也就是六张特征平面XY、XZ、YZ、XT、YT、ZT。前三张平面管空间负责描述“这个位置在场景里的静态属性”后三张平面是空间-时间耦合平面负责描述“这个位置在某个时刻发生了什么变化”。XT 平面编码 x 坐标与时间的关系YT、ZT 依此类推。对任意一个空间坐标和时间把它逐一投影到六张特征平面上用双线性插值取出每个平面的特征向量最后拼成一个联合时空特征。你可以把 HexPlane 想象成一个六面的档案柜每一面贴了一张索引表。要查“某个位置在某个时刻的状态”就去六张表里分别查到对应的小抄拼在一起交给下游模块。特征平面是连续存储的任何浮点坐标和时间点都可以通过插值查到特征所以这个编码天然支持任意时间查询这是 4DGS 能插帧的基础。3.2 变形MLP的输入输出细节拼接得到的时空特征向量送入一个轻量 MLP。这个 MLP 结构不大论文实现里就是几层全连接输出分成两个分支一个负责几何变形输出位置、旋转、缩放的增量另一个负责外观变化输出球谐系数的增量。两个分支共享同一个时空特征这能保证几何和外观之间的耦合关系——物体变形时外观跟着变是符合直觉的。旋转增量是四元数输出后要归一化缩放增量在 log 空间计算最终缩放始终保持为正。这些细节在复现时都要注意任何一个环节处理不当都会让优化崩溃。需要特别强调的是这个 MLP 足够轻量所以前向推理成本很低。3DGS 每一次渲染前只要把所有高斯过一遍这个轻量网络得到变形后的高斯参数再走原来的光栅化流程。额外的计算开销相比光栅化本身可以忽略不计这是 4DGS 能保持实时渲染的关键。3.3 离散帧训练如何保证时间连续视频数据本质上只有离散的时间戳如果用已知帧监督网络模型很容易把中间时刻学坏。4DGS 的训练策略针对这个问题做了两件事。第一在已知时间戳上直接监督渲染结果保证网络在观测帧上准确第二在两个已知帧之间随机采样中间时间把该时刻的相机位姿也做线性插值然后把中间时刻的渲染结果一起送进损失函数。这一步非常关键它把“学习离散帧”变成了“学习连续时间回归”强制网络在任意时间戳上都有平滑输出。相机位姿做线性插值是合理的因为相邻帧之间的相机运动通常是渐进的尤其固定相机拍摄的多视角动态场景相机位姿本身不随时间变化。即便相机运动更复杂这个近似也足够提供中间帧的弱监督信息。有了这个策略训练好的模型才能做到顺滑的时间插值和帧率变换。3.4 训练流程与损失函数4DGS 的训练大体分为两个阶段。第一阶段是热身阶段也是最容易被忽略的环节。先关闭变形网络只用 3DGS 做静态重建让高斯点云先找到一个合理的空间分布。这一步不能省如果一上来就开启变形网络初始点云分布还没稳定变形场会把高斯拽得到处乱跑训练很难收敛。热身完成后再启动变形网络和 HexPlane 特征平面的优化。第二阶段是联合优化阶段。随机采样一个时间 t让静态高斯过一遍变形网络得到该时刻的动态高斯再按 3DGS 的方式渲染出图像和真实帧计算损失。损失函数沿用 3DGS 的 L1 加 SSIM 两项权重系数通常取 0.2 左右。整个流程就是在 3DGS 的基础上多了一次变形推理其他部分完全复用这也是训练速度快的根本原因。4. 从实验数据看4DGS的真实水平4.1 数据集与评价指标论文实验主要用了两个动态场景基准D-NeRF 合成动态数据集和 NeRF-DS 动态场景数据集。D-NeRF 包含多个物体的合成运动场景地面真实值和相机路径都精确可控NeRF-DS 更贴近真实拍摄包含透明物体、复杂遮挡和光照变化难度更高。评价指标是 PSNR、SSIM、LPIPS分别衡量像素误差、结构相似度和感知距离。这三项指标是目前新视角合成工作的标配动态场景研究也基本沿用这套评价体系。4.2 定量结果在精度上拉开多大差距我读论文时先看了 D-NeRF 上的对比表。4DGS 在绝大多数场景上的 PSNR 和 SSIM 都超过了 D-NeRF、TiNeuVox、K-Planes 等方法而且不是零头级别的提升是能看到明显差距的领先。主观渲染结果上动态物体的边缘、遮挡切换区域、细小结构这些重点难点4DGS 的渲染质量要好出一截。在 NeRF-DS 真实场景上因为包含透明和半透明物体4DGS 的优势略有缩小但整体指标依然保持领先。这也说明一个事实动态场景的指标受数据集、相机轨迹、视频帧数影响很大单看某个数字意义不大横向对比同一基准下的整体趋势更有参考价值。下面这个表格反映的是方法量级上的对比具体数值需要以论文发布结果为准方法D-NeRF PSNR/SSIM渲染速度训练耗时D-NeRF中等极慢小时级TiNeuVox中等慢小时级K-Planes / HexPlane中高慢分钟到小时级4DGS最高实时分钟级4.3 速度账本为什么说“实时”成立4DGS 的实时性不是靠硬件堆出来的而是整个渲染流程里没有“逐像素查询”这种瓶颈。3DGS 渲染一帧本身就是毫秒级4DGS 在渲染前只是多了一次变形网络前向。这个前向路径很短相比光栅化的开销小得多因此整条 pipeline 仍然能维持高帧率。在论文展示的实验环境中D-NeRF 这类分辨率下的渲染速度可以做到实时级别视频播放流畅。如果分辨率拉到 4K帧率会下降但依然远快于任何基于体渲染的方案。训练耗时方面单个场景在消费级显卡上大约几十分钟内完成对比动态 NeRF 以小时甚至十小时为单位的训练时间体验上是质变。4.4 消融实验透露的信息论文的消融实验我理解下来有几点值得记住。第一时间平面的贡献不可替代。把 XT、YT、ZT 中任意一张时间平面去掉动态重建质量都会明显下降说明时间维度的特征编码不是装饰而是整个变形场的地基。第二只预测平移不够。在大形变场景下如果不预测旋转和缩放指标会明显掉点说明高斯的朝向和尺度动态变化对表达真实形变很重要。第三热身阶段不是可有可无。跳过热身直接训练变形网络初始点云分布不稳定最终效果会变差。这些消融结论也反过来验证了前面的设计选择六平面缺一不可几何增量必须完整训练策略的细节不能省。5. 复现4DGS时的实际问题清单阅读笔记读到实验部分很多人会急着复现。4DGS 官方实现是基于 3DGS 改的整体代码量不大但实际跑起来有几类问题几乎人人都会遇到。5.1 数据准备多视角同步是生命线4DGS 的输入要求是同步的多视角视频所有相机必须在同一时刻拍摄画面错开一两帧都会导致训练时几何不一致渲染结果出现重影。数据前期处理需要用 COLMAP 对视频帧做稀疏重建生成点云和相机位姿然后按照官方工程要求的数据结构放好。这里最常见的坑是数据格式不匹配。不同数据集的相机参数存储格式不一样D-NeRF 的合成数据提供了相机内外参真实数据集有的给 colmap 输出有的给 json最好先仔细读一遍官方代码里的数据加载脚本把自己的数据转换成要求的格式再开跑不要在数据格式上浪费时间。5.2 环境与编译diff-gaussian-rasterization是最大的坎3DGS 仓库里的 diff-gaussian-rasterization 光栅化库需要在本地编译4DGS 也沿用了这个库。编译报错的原因集中在 PyTorch、CUDA、gcc 版本不匹配显卡驱动过旧导致 CUDA 扩展无法编译。我的建议是严格按官方 README 里的环境组合来装不要一上来就上最新版 PyTorch最新版本不一定兼容那个 CUDA 扩展。另外训练前确认一下 GPU 显存和驱动支持的计算能力。4DGS 在高斯数量变大后显存压力明显至少准备一张 12GB 以上显存的卡否则只能通过降低迭代批次、缩小特征平面分辨率来妥协。5.3 显存和训练策略为什么OOM总是找上门4DGS 训练时每个时间戳都要把静态高斯过一遍变形网络生成变形后的高斯集。这意味着显存里至少要有两份高斯参数静态基准和变形后的结果同时还要保留梯度给 HexPlane 和 MLP显存峰值比静态 3DGS 高不少。如果训练长视频或高分辨率场景时爆显存优先检查迭代中渲染的图块大小把渲染分辨率降下来或者分块处理比盲目减小高斯数量靠谱。高斯数量一旦减得太多场景细节会明显丢失反而得不偿失。5.4 结果检查什么样算收敛哪些一眼看出失败训练完成后渲染视频如果看到物体边缘闪烁、中间帧出现鬼影、背景像水面一样波动通常不是网络结构的问题而是变形场没有学稳。先检查热身步数是否足够学习率是否过大再检查数据本身的时间对齐是否准确。可以打印每一帧的 PSNR 曲线如果某个时间戳的 loss 一直居高不下优先检查该帧的相机位姿估计是否异常。很多时候 COLMAP 对个别帧的配准失败导致这帧的监督信号本身就有错误模型怎么优化都救不回来这时要做的不是调参而是修正这条数据。6. 4DGS的边界在哪以及后来者怎么补6.1 四类典型的边界情况第一无法建模拓扑变化。4DGS 的高斯不透明度在时间维度上没有建模变形网络只管位置、旋转、缩放和颜色。物体出现或消失、烟雾扩散、水面飞溅这类拓扑结构发生变化的内容4DGS 基本无能为力因为高斯数量从头到尾没变过。第二多视角同步输入门槛高。所有相机必须同步拍摄意味着真实场景采集只能用多台相机硬同步或者专门的采集设备。手持单相机制作动态场景资产这条路 4DGS 走不通。第三长视频漂移。训练序列拉长之后变形场覆盖的时间范围变大HexPlane 的插值特征会模糊后续帧容易出现位置漂移和细节丢失。如果一段视频上百帧4DGS 的稳定性会明显下降。第四高频细节受限。HexPlane 特征平面的分辨率决定了时空特征的细节上限高分辨率视频里的微小运动、高速运动造成的运动模糊都容易被特征插值抹平。6.2 后续工作的演进方向4DGS 发表之后动态高斯方向快速分化出好几条路线。一条是稀疏控制点路线代表工作是 SC-GS用少量控制点驱动大规模高斯的变形减少参数量的同时增强大范围运动的一致性。另一条是把多视角条件放宽松比如从单目视频或者视频生成模型重建 4DGS让动态资产的生产不再依赖多相机同步采集。还有一条专门针对拓扑变化尝试给不透明度或密度增加时间维度的动态场把烟雾、流体这类挑战性场景也纳入高斯泼溅的适用范围。这些工作或多或少都在补 4DGS 的短板但它们的底座仍然继承了“静态3D高斯加隐式变形场”这套架构。这说明 4DGS 作为一篇方法论文最重要的价值不在于刷了几个点而在于提供了一个验证有效的范式。6.3 把这篇论文放在时间线上看现在回头看4DGS 是动态场景实时渲染从“不可能”到“可实现”的一个标志性节点。它做对的事情是没有发明一个全新的场景表达而是把已经被验证的静态表达往前推了一个维度。这个思路对工程实践很有启发——当你面对一个新维度的问题先想想能不能在现有可靠表达上叠加一个轻量驱动模块而不是推倒重来。如果让我给刚接触 4DGS 的同学一个建议我会说别只盯着那些提升指标的消融表先把“静态高斯 变形场 六平面编码”这套分工逻辑吃透。一旦搞明白为什么变形比逐帧重建好、为什么时间平面不能省、为什么热身阶段能防止训练崩溃你就掌握了分析后续几乎所有动态高斯方法的核心框架。读论文的意义就在于此不是记住公式而是看懂作者当时面临的取舍和理由。