Fable创造新型4D Splat格式
速览
Fable 在3D高斯溅射基础上开发出4D splat格式,可高效表征随时间变化的动态3D场景。该格式有望推动影视、VR/AR等领域的实时渲染与交互体验升级,是神经渲染领域的重要进展。
AI 深度解读
背景
传统 3D Gaussian Splatting(3DGS)作为一种高效的新视角合成技术,已在实时渲染和体积表示领域获得广泛应用。然而,面对动态场景(视频、4D 内容),直接存储每帧独立的 .splat 文件会导致数据量爆炸——单帧可能包含数十万个 Splat,每帧 32 字节/个,20 fps 的视频序列体积迅速失控。现有的通用压缩方案(如 gzip、zstd)虽能减小体积,但缺乏针对 Splat 时序冗余的优化,无法实现高效的流式传输和随机帧定位。
Fable 团队在此背景下提出了一种全新的 4D 高斯 Splat 格式 .splat4d,旨在解决动态 3DGS 数据的存储体积、流式传输和随机访问问题。该格式借鉴了视频编码(H.264/H.265)的 GOP 结构、误差有界量化(SZ/ZFP)以及属性打包(SPZ/SOGS)等成熟技术,并完全兼容标准 HTTP Range 请求,无需服务器端逻辑即可在 S3/GCS/R2 等对象存储上直接流式播放。
核心内容
.splat4d 是一种可流式传输、误差有界的 4D 高斯 Splat 格式。其核心设计包含以下几个方面:
1. 整体结构与流式设计
一个 .splat4d 文件分为三个部分:
- 头部(Header):一个很小的 JSON 头,包含边界(bounds)、量化步长(quantization steps)和一个带有绝对字节范围的块索引(chunk index)。客户端仅凭此头部即可规划后续的 HTTP Range 请求。
- 静态段(STATIC section):保存每个 Splat 的掩码(mask)和基础值(base value)。客户端只需请求一次此段(数 MB),即可在屏幕上呈现完整的第一帧场景。
- GOP 块(Group of Pictures chunks):每块对应约 1 秒的视频,内部采用关键帧(key)在前、差分帧(delta)在后的布局。每个 GOP 块自包含,无跨块依赖。
2. 压缩性能与确定性误差
- 压缩比:相比原始
.splat帧序列,.splat4d体积缩小 16–58 倍;相比 gzip 压缩,缩小 14–20 倍。编码速度约 640 MB/s。 - 误差控制:每个解码帧中每个 Splat 的每个属性均严格在用户指定的边界内——不是平均误差或 PSNR,而是逐点确定性误差。机制是 SZ/ZFP 风格的误差有界量化(步长 = 2× 边界 ⇒ 误差 ≤ 边界)。量化后所有数据变为整数运算,时序差分不会出现漂移;Rust 和 JavaScript 解码器可重建完全相同的比特值。
3. 网络与存储适配
- 专为纯 HTTP Range 请求设计,直接针对 S3 / GCS / R2 等静态对象存储。无需服务器逻辑、清单文件或视频容器。
- 客户端请求流程:
bytes=0-262143:获取魔法字段 + 头部 JSON(所有偏移均为绝对值)。- 一个 Range 获取 STATIC 段(数 MB)-> 第一帧立即显示。
- 播放/预取时,每个 GOP 块一个 Range 请求。
- 随机跳转时:先请求块前缀(TOC + 关键帧),约 100–150 ms 内关键帧上屏,然后请求增量部分到达精确帧。
- 对象存储原生支持 Range 请求。浏览器客户端需配置 CORS 允许
Range头部并暴露Content-Range。 - 容器内部已使用 zstd 压缩载荷,故存储对象时不应再设置
Content-Encoding,以免双重压缩破坏字节精确的 Range 计算。
4. 数据来源与基准测试
测试数据来自三个独立采集管线,共 8 个序列:
- CMU Panoptic 穹顶:juggle、boxes、softball、tennis(动态 3DGS)
- Neu3D cooking 场景(通过 SpacetimeGaussians/splaTV 转换):flame(后院 BBQ)、sear(厨房厨师)
- Technicolor 场景:birthday party(659k 个 Splat)
所有序列先转为每帧 antimatter15 格式的 .splat 文件(32 字节/Splat),20 fps。splat4d 编码使用默认边界(位置 ±2 mm、颜色 ±4、旋转精确、缩放 ±2%)。对比基线:gzip 逐帧 -9;最佳通用无损压缩(zstd-19 --long 整体序列)仅达到 2.5× 压缩比。详细基准见 BENCHMARKS.md。
5. 渲染与工具
- 渲染器:基于原始 WebGPU,逐行移植自 antimatter15/splat 渲染器,像素级验证。
- 使用方式:Python 包
splats4d,命令行splat4d encode -i frames_dir -o out.splat4d。 - 许可证:MIT。核心技术借鉴:antimatter15/splat(格式)、Dynamic 3D Gaussians(数据)、SZ/ZFP(误差有界量化)、H.264/H.265(GOP 结构)、SPZ/SOGS(属性打包)、zstd。
关键要点
- 紧凑性与确定性:相比原始数据压缩 16–58 倍,且每个属性的误差以严格、逐点有界的方式可控,而非平均指标。
- 流式友好:基于 HTTP Range 请求,无需服务器端特殊处理;头部、静态段、GOP 块均可按需请求。
- 低延迟跳转:随机寻址时仅需约 100–150 ms 即可显示关键帧,得益于块内关键帧前置和 TOC 索引。
- 数学保证:量化后全部整数运算,时序差分永不漂移;不同实现(Rust/JS)的解码结果比特一致。
- 自包含容器:内部 zstd 压缩,外部不设 Content-Encoding,保证 Range 请求字节精确。
- 借鉴视频编码思想:采用 GOP 结构(关键帧+差分帧)处理时间冗余,但专为 4D Gaussian Splat 设计,非通用视频格式。
- 开源且易用:MIT 许可,提供 Python CLI 工具,可直接将 antimatter15 帧序列转换为单个可搜索文件。
意义与影响
.splat4d 格式的推出,有望重塑动态 3DGS 内容的存储与分发方式。此前,动态场景的体积是大规模部署的主要障碍——无论是实时渲染平台、云游戏、VR/AR 体验还是数字孪生,传输和存储每帧百万级 Splat 的数据都极为困难。该格式通过将视频编码中的 GOP 结构与高精度有界量化相结合,在保证视觉质量(可配置误差界限)的同时实现了数量级的压缩比,且流式特性与现有云基础设施(对象存储 + 普通 HTTP)完美兼容,无需搭建专门的媒体服务器。
对于开发者而言,splat4d 提供了一条从离线采集到在线播放的清晰路径:只需将帧序列编码为一个文件,即可在浏览器中通过 WebGPU 即时渲染,并支持随时跳转。这一模式降低了动态 3DGS 内容分发的成本和技术门槛,可能推动更多应用(如沉浸式直播、4D 重建回放、实时协同编辑)走向实用化。
此外,格式设计中的“确定性误差”和“无漂移”特性,在需要严格可重复性的科学可视化或工业仿真场景中具有独特价值。总体而言,.splat4d 是 4D Gaussian Splatting 领域一个里程碑式的工程创新,它让“动态 3D 高斯”从研究演示走向可落地的产品级流式体验。
