Fable创建了新颖的4D splat格式

Hacker News Top 工具

摘要

一种名为.splat4d的新型4D高斯splat格式,具有可调误差边界,对原始splat的压缩比为16-58倍,并支持动态场景的原生HTTP Range流式传输,代码和演示已提供。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/04 21:42

# .splat4d 来源:https://adamraudonis.github.io/splats4D/ 一种可流式传输的4D高斯溅射格式,具有可调边界。 [代码](https://github.com/adamraudonis/splats4D) [PyPI包](https://pypi.org/project/splats4d/) [完整演示](https://adamraudonis.github.io/splats4D/demo/) [规范](https://github.com/adamraudonis/splats4D/blob/main/docs/FORMAT.md) [基准测试](https://github.com/adamraudonis/splats4D/blob/main/docs/BENCHMARKS.md) **相比原始数据小16–58倍** · **相比gzip小14–20倍** · 编码速度约**640 MB/s** · 原生支持HTTP **Range** 的流式传输与查找 在浏览器中实时预览、流式传输并解码:一个2秒的动态场景,仅用一个**7.4 MB**的`.splat4d`文件——相比427 MB的原始`.splat`帧,体积**缩小58倍**。按下**互动**即可控制相机:拖拽旋转,Ctrl+滚轮缩放。需要WebGPU(Chrome 113+、Safari 26+、Windows平台Firefox 141+)——打开[完整演示](https://adamraudonis.github.io/splats4D/demo/)查看更多场景和实时编码控制。 ## 工作原理 ### 静态/动态分离 在典型的动态捕捉中,大多数高斯溅射点属于背景,永远不会超出边界移动。它们只需存储一次——一个1.6 GB序列的完整背景只需几MB。分类是精确的:当且仅当单个量化值在整段视频中满足边界条件(相对于其最小值和最大值)时,该溅射点被视为静态。 ### 死区“保持”轨迹 动态溅射点存储的值仅在真实值会违反边界条件时才发生变化。这消除了量化闪烁,使时间差主要为零,并且检查本身在每个符号发出前强制执行保证。 ### H.265风格的封闭GOP 每N帧设置一个关键帧(绝对量化值),随后是精确整数差分的P帧。每个GOP块可独立解码→查找时无需触碰其他块。每个块内部,关键流排在差分流之前,因此快速拖动时只需获取约10%的块即可立即显示关键帧。 ### 熵栈 Morton序排列的溅射点、Zigzag编码的整数差分、字节平面重排(Blosc风格)、每流使用zstd压缩。输出约等于其自身符号流0阶熵的100%。 ### 文件内部结构 一个`.splat4d`文件包含三部分。小型头部包含边界、量化步长和带有绝对字节范围的块索引——客户端规划请求所需的一切。静态部分存储每个溅射点的掩码和基值:只需获取一次,完整场景即可显示。其余部分是每个约1秒视频的自包含GOP块,关键流排在差分流之前。 ``` "SP4D" + header JSON STATIC 部分 → 完整首帧画面 GOP 块 0 [关键帧][差分] GOP 块 1 ... ``` ## 误差边界 每个解码帧中每个溅射点的每个属性都位于用户选择的源误差范围内——不是平均意义上的,也不是PSNR:而是逐点确定性的。 | 属性 | 边界 | 默认值 | |------|------|--------| | 位置 | ±毫米,每轴L∞ | ±2 mm | | 颜色 RGB | ±每个通道8位级别 | ±4/255 | | 不透明度 | ±8位级别 | ±4/255 | | 旋转 | ±四元数分量(1/128单位,符号可忽略) | 精确(±0) | | 缩放 | ±相对百分比,每轴 | ±2% | 机制:SZ/ZFP风格的误差有界量化(步长 = 2×边界 ⇒ 误差 ≤ 边界由构造保证)。量化后所有运算均为整数运算——时间差分永远不会漂移,Rust和JavaScript解码器能重构出位相同的值。 ## 从对象存储流式传输 该格式专为针对S3 / GCS / R2 / 任何静态主机发起普通HTTP **Range** 请求而设计——无需服务器逻辑、清单文件或视频容器。客户端所需内容: - `bytes=0-262143` → 魔数 + JSON头部(所有字节偏移均为绝对偏移) - 一个Range获取STATIC部分(几MB)→ 首帧完整画面 - 播放/预取期间每个GOP块一个Range - 查找时:先获取块前缀范围(TOC + 关键帧)→ 约100–150毫秒内关键帧显示,然后获取块剩余部分 → 精确帧 对象存储原生支持此功能。对于浏览器客户端,设置CORS允许`Range`头并暴露`Content-Range`: ```json [ { "AllowedMethods": ["GET", "HEAD"], "AllowedOrigins": ["https://your-site"], "AllowedHeaders": ["Range"], "ExposeHeaders": ["Content-Range", "Content-Length", "Accept-Ranges"] } ] ``` 负载已在容器内使用zstd压缩,因此存储对象时无需设置`Content-Encoding`——范围计算保持字节精确,且不会双重压缩。 ## 基准测试 来自三个独立采集管道的八个序列:[Dynamic 3D Gaussians](https://dynamic3dgaussians.github.io/)(CMU Panoptic dome — juggle, boxes, softball, tennis)、通过SpacetimeGaussians/splaTV(https://github.com/antimatter15/splaTV)的Neu3D烹饪场景(flame = backyard BBQ, sear = kitchen chef),以及Technicolor(birthday party, 659k溅射点)——全部转换为每帧antimatter15的`.splat`文件(32 B/溅射点),20 fps。splat4d编码使用默认边界(±2 mm / ±4颜色 / 精确旋转 / ±2%缩放);gzip为每帧`-9`级别。作为参考,最佳通用无损基线(zstd-19 --long 全景)仅达到2.5倍。完整方法和其他基线见:[BENCHMARKS.md](https://github.com/adamraudonis/splats4D/blob/main/docs/BENCHMARKS.md)。 正在加载 benchmarks.json... ### 查看器 原生WebGPU,逐行移植自[antimatter15/splat](https://github.com/antimatter15/splat)渲染器,并与其进行像素验证。 | 指标 | 本地 | 限速50 Mbps | |------|------|-------------| | 完整首帧视图(头部+静态部分) | 141–157 ms | 791 ms | | 跳转到未缓冲区域 → 关键帧可见 | — | 145 ms | | 播放 | 60 fps @ 336k 溅射点 · 工作线程解码 2.5–27 ms/帧 · 排序 1–25 ms | ## 使用方法 将antimatter15 `.splat`帧的时间序列转换成一个小的、可查找的文件: ```bash # Python (pip install 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。

相似文章

ZipSplat:更少的高斯,更优的 Splats

Hugging Face Daily Papers

ZipSplat 是一种基于 token 的前馈 3D 高斯溅射模型,利用 k-means 聚类将高斯放置与像素网格解耦,在无需真实位姿或内参的情况下,在 DL3DV 和 RealEstate10K 上实现了约 6 倍的高斯减少,同时设立了新的最佳结果。

GlobalSplat: 通过全局场景标记实现高效的前馈式三维高斯散射

Hugging Face Daily Papers

GlobalSplat 引入了一种高效的前馈框架,用于三维高斯散射,通过全局场景标记实现紧凑且一致的场景重建,将计算开销和推理时间降低至78毫秒以下。该方法采用从粗到细的训练策略,防止表示膨胀,同时以显著更少的高斯原语(16K)达到有竞争力的新视角合成性能,与密集基线相比更为高效。