splats4D: ストリーミング可能な 4D ガウススプラッティングフォーマット
splats4D: ストリーミング可能な 4D ガウススプラッティングフォーマット
概要
splats4D は、動的 3D シーンの高効率圧縮とストリーミングを目的とした新しい 4D ガウススプラッティングフォーマットです。生データに比べて 16〜58 倍、gzip に比べて 14〜20 倍小さく圧縮でき、エンコード速度は約 640 MB/s です。このフォーマットは、HTTP Range リクエストを利用したオブジェクトストア(S3、GCS、R2 など)経由での配信を前提に設計されており、サーバー側ロジックやマニフェストファイルなしで即時のファーストビュー描画と高速シークが可能です。
圧縮アーキテクチャ
.splat4d フォーマットは、静的要素と動的要素を分離し、時間的デルタエンコーディング戦略を採用することでファイルサイズを削減します。
静的と動的の分割
冗長性を最小化するため、フォーマットはスプラットがクリップ全体でユーザー定義の誤差境界を満たす単一の量子化値で表現できる場合、これを静的と分類します。これらの静的スプラットは一度だけ保存されるため、長大なシーケンスでも背景は数メガバイト程度に抑えられます。
デッドバンド "Hold" トラック
量子化フリッカーを防ぎ、時間的デルタを削減するために、スプラットは "hold" メカニズムを使用します。保存された値は、実際の値が現在の保存値に対してユーザー定義の境界を超えたときにのみ変化します。これにより時間的デルタはほぼゼロに保たれ、各シンボルが出力される前に厳密な精度保証が維持されます。
GOP 構造とシーク
H.265 から借用した閉じた Group of Pictures (GOP) を使用します。キーフレーム(絶対量子化値)は N フレームごとに保存され、その後に整数デルタからなる P フレームが続きます。各 GOP チャンクは独立してデコードできるため、シーク時に前のチャンクを処理する必要がありません。キーストリームはデルタストリームの前に配置されるため、クライアントはチャンクの最初約 10% だけを取得してキーフレームを即座に表示できます。
エントロピースタック
最終圧縮パイプラインは、Morton 順序のスプラット、ジグザグ符号化整数デルタ、Blosc スタイルのバイトプレーンシャッフル、そしてストリームごとの zstd 圧縮を利用します。このプロセスにより、出力サイズはシンボルストリームの 0 次エントロピーに近づきます。
決定的エラーバウンド
PSNR や平均誤差に依存するフォーマットとは異なり、splats4D は SZ/ZFP スタイルのエラー有界量子化を使用します。これにより、すべてのフレームのすべてのスプラットのすべての属性が、ソースに対して決定的かつ点ごとの境界内に収まります。
| 属性 | 境界 | デフォルト |
|---|---|---|
| 位置 | ± ミリメートル、軸ごとの Lⁿ | ±2 mm |
| カラー RGB | ± 8 ビットレベル/チャンネル | ±4/255 |
| 不透明度 | ± 8 ビットレベル | ±4/255 |
| 回転 | ± クォータニオン成分 | 正確 (±0) |
| スケール | ± 相対 %、軸ごと | ±2% |
ストリーミングとオブジェクトストア統合
フォーマットはプレーンな HTTP Range リクエストを前提としています。クライアントは以下の少数のターゲット取得でシーンを描画できます。
- ヘッダー: 最初の 256 KB を取得し、マジックナンバーとバイトオフセットを含むヘッダー JSON を取得。
- 静的セクション: 静的スプラットを取得して最初のビュー全体を描画。
- GOP チャンク: 再生中または事前取得で対応する GOP チャンクを取得。
- シーク: チャンクプレフィックス範囲を取得し、約 100〜150 ms でキーフレームを表示。
パフォーマンスベンチマーク
Dynamic 3D Gaussians や Neu3D などのパイプラインからの 8 つのシーケンスで、splats4D は汎用圧縮を常に上回ります。例として、2 秒間の "flame" シーンは 427 MB(生データ)から 18.5 MB に削減され、23.2 倍の圧縮率を実現しました。
| シーケンス | フレーム × スプラット | 生データサイズ | Gzip サイズ | splat4d サイズ |
|---|---|---|---|---|
| Birthday | 40 × 659k | 844 MB | 724 MB | 40.7 MB (20.7×) |
| Boxes | 40 × 351k | 450 MB | 423 MB | 27.2 MB (16.5×) |
| Flame | 40 Ó 334k | 427 MB | 367 MB | 18.5 MB (23.2×) |
| Juggle | 150 Ó 337k | 1616 MB | 1515 MB | 83.4 MB (19.4×) |
| Sear | 40 Ó 109k | 16.9× | 8.2 MB | |
| Softball | 40 Ó 336k | 430 MB | 404 MB | 25.9 MB (16.6×) |
| Tennis | 40 Ó 333k | 426 MB | 401 MB | 26.2 MB (16.3×) |
実装
本プロジェクトは MIT ライセンスで提供され、.splat フレームの時系列を単一の .splat4d ファイルにエンコードする Python パッケージ(pip install splats4d)を提供します。ビューアは antimatter15/splat レンダラの移植版で、WebGPU をサポートし、WebGL2 フォールバックも備えています。