SPZ 4 リリース—より軽量に、より高速に、より将来性を高めた設計へ
2024年末にSPZをオープンソース化 した際、私たちはそれを「3Dガウシアンスプラット版JPG」と表現しました。スプラットのファイルサイズをPLYと比べて約10分の1に圧縮し、どこでも手軽に共有できる、シンプルで合理的なフォーマットです。それ以降、Adobe Photoshopのユーザーだけで、過去2ヶ月間に約80万件のSPZファイルが作成されました。このフォーマットは今や、Web環境、リアルタイムエンジン、ロボティクスパイプライン、モバイルプラットフォームにわたって広く展開されており、当初の実装が想定していたよりもはるかに大規模かつ複雑なシーンで活用されています。
本日、SPZ 4をリリースします。コアとなる設計思想を引き継ぎながら、格段に大規模で高負荷なデータセットをサポートするための機能拡張を加えた、フォーマットの進化版です。
これまでのSPZは、モバイルデバイスからガウシアンスプラットを直接共有することを実用的なものにし、コンパクトでポータブルなフォーマットとして広く採用されるに至りました。その後のリリースでは、圧縮効率の向上、仕様の安定化、レンダリングエンジン・Webパイプライン・下流システムへの互換性拡大に注力してきました。
SPZ 4は、現在のワークロードにおけるスケールと複雑さへの課題に対応します。数千万ポイントにおよぶキャプチャをサポートし、重要なメタデータを外部管理ではなくファイル自体に埋め込む、より堅牢なデータモデルを導入しています。
より大きなシーン、より高速なエンコード
SPZ 4は約3〜5倍高速に圧縮し、エンドツーエンドのロード速度は約1.5〜2倍向上します。非圧縮PLYと比較して10分の1のファイルサイズを維持しながら、開発者が品質を細かく制御できる新機能も提供します。これにより、同じフォーマットで最高品質のワークフローと最高効率のワークフローの両方に対応できます。SPZ 4における最大の変更点は、ファイルの圧縮方式です。従来のSPZはペイロード全体を単一のGZipストリームで圧縮していました。2024年当時の一般的なスプラット(スマートフォンスキャンによる数十万ポイント程度)には有効でしたが、単一CPUコアでしか圧縮・展開できないという制約がありました。数百万ポイントのキャプチャでは処理時間がかかりすぎます。
SPZ 4ではGZipを廃止し、属性ごとに1つ、合計6つの並列ZSTDストリーム(位置・色・スケール・回転・アルファ・SH係数)に置き換えました。各属性は独立して圧縮されたバッファとして管理され、先頭に小さな目次を持ちます。これにより、パーサー/ローダーがファイルを展開・スキャンすることなく、各圧縮属性ストリームのサイズとレイアウトを素早く把握できます。エンコードとデコードがCPUコアをまたいでスケールするようになりました。
8.5 GB / 3,400万ポイントのPLYを用いたベンチマーク結果:
| Format | Encode Time | File Size vs. Baseline |
|---|---|---|
| SPZ3 (baseline) | 3 min 26 sec | - |
| SPZ4 | 1 min 8 sec (3x faster) | 2.5% smaller |
全CPUコアをフル活用しながら、より小さなファイルサイズとはるかに高速なエンコードが実現します。デコードも同様に並列化されます。また、PLYローダーとSPZデシリアライザーの旧来の1,000万ポイント上限を撤廃しました。SPZ 4は数千万のガウシアンを問題なく処理できます。
高速化の効果はダウンストリームにも及びます。並列デコードによりレンダリングまでの時間(展開+レンダラーへのロード)はテストシーン全体で顕著に短縮されました(約33〜52%削減、すなわち約1.5〜2.1倍高速化):
| Benchmark Scene | Points | v2/v3 size | v4 size | TTR v2/v3 | TTR v4 |
|---|---|---|---|---|---|
| Scene A | 3.6M | 66.2MB | 65.7MB | 1,264ms | 844ms |
| Scene B | 7.1M | 254MB | 128MB | 3,450ms | 1,660ms |
| Scene C | 2.6M | 39.3MB | 40.5MB | 958ms | 619ms |
| Scene D | 1.0M | 20.7MB | 18.9MB | 364ms | 238ms |
| Scene E | 2.6M | 118.5MB | 65.1MB | 1,375ms | 657ms |
プレーンテキストヘッダー
SPZ 4では、32バイトのファイルヘッダーを圧縮領域の外側、固定オフセットにプレーンテキストで配置しています。ペイロードデータを1バイトも展開することなく、ファイルのポイント数・SH次数・バージョン・フラグを確認できます。
ファイルの先頭は従来のGZipマジックではなく、マジックバイトNGSPで始まります。ローダーは最初の4バイトを確認して適切なパスに分岐するため、旧SPZ v2/v3ファイルもフォールバックパスから問題なくロードできます。v4ファイルを読み込もうとした旧ローダーは、クラッシュや不正なスプラットの生成ではなく、「未対応フォーマット」エラーで即座に終了します。
本格的な拡張システム
SPZ 4のもう一つの大きなアーキテクチャ変更が、拡張(エクステンション)システムです。当初のフォーマットは意図的に厳格な設計でした(圧縮度固定、パラメータレイアウト固定で変更の余地なし)—普遍的な最小公倍数フォーマットであるためです。しかし、SPZの用途が当初の想定を超えて拡大するにつれ、この厳格さが制約となってきました。SPZ 4では制御された拡張性を導入し、相互運用性を損なうことなく新しい属性やメタデータをフォーマット内で発展させられるようになります。
その仕組みはオプトイン式のベンダー拡張チェーンです。各レコードはベンダータグ付きID・データ長・ペイロードを持ちます。未知の拡張は安全にスキップでき、複数のベンダーが互いに干渉することなく同一ファイル内に共存できます。拡張はデフォルトで無効化されており、PackOptionsからオプトインします。拡張を持たないファイルは標準SPZと同一の外観を保つため、旧リーダーは引き続き動作します。
最初の拡張はアーキテクチャ設計を主導したAdobeから提供されています:
-
0xADBE0002 Safe Orbit Camera— スプラットビューワーがシーンのフレーミングやナビゲーション方法を推測しなくても済むよう、オービットスタイルのカメラ操作に推奨される仰角と半径の範囲を格納します。
ベンダーIDの割り当てルールはextensions/README.mdに記載されています。今後さらに多くの拡張が追加される見込みです。独自の拡張追加を検討されている方は、まずREADMEをご参照ください。
より高品質なスプラット、思いどおりに
SPZ 4はスプラットの品質の上限を引き上げ、開発者が品質カーブのどこに位置するかを選択できる自由度を提供します。
球面調和関数量子化の設定SH係数は、スプラットの視点依存の外観—光が表面でどのように反射するか、カメラをオービットするときにハイライトがどのように動くか、素材がどの程度光沢または艶消しに見えるか—を決定するものです。同時にファイルサイズへの最大の寄与因子でもあります。スプラットを再編集することなく、同じシーンを最高品質のアーカイブレンダー向けと最高効率のモバイルビューワー向けにチューニングできます。内部テストでは3ビットで18倍の圧縮率、8ビットで事実上ゼロのMSEを達成しており、ほとんどのシーンで5ビットがスイートスポットです。
SH次数4による高精細スプラットこれまでのSPZバージョンはSH次数3が上限でした。これはスマートフォンキャプチャのスプラットのほとんどをカバーしていますが、より鋭い視点依存サーフェスを生成するパイプラインには対応できませんでした。SPZ 4ではSH次数4をサポートするため、これらの高次スプラットをSPZフォーマットに保存・再読込しても、ライティングのディティールを損なうことはありません。
この2つにより、SPZ 4はSPZフォーマット初の品質調整ダイヤルを備えたバージョンとなります。
AdobeとのSPZの大規模展開
SPZは、主要なクリエイティブ・デベロッパーツール全体にわたるガウシアンスプラットの共通基盤となりつつあります。AdobeはSPZを3Dツールチェーンの中核に位置づけており、最近では Photoshopの新機能「オブジェクトを回転」をリリースしました。2D画像を3D空間で回転させるこの機能は リリース直後から大きな反響を呼んでいます。SPZはこの機能を支える基盤のフォーマットとして、数百万人のユーザーに届いています。
Webでの高速化と成長するエコシステム
SPZの利用の多くが今やブラウザ上で、Emscripten/WASM ビルドを通じて行われています。SPZ 4フォーマットのリリースにあわせて、リファレンスライブラリでは、ガウシアンデータを適切な TypedArray ビューとして扱えるよう再構築された WASM/TypeScript バインディング層と、エディタの自動補完用に生成された spz.d.ts も提供しています。ブラウザでのSPZファイルのロードは最大20倍高速になりました。SPZ 4ではC++からJavaScriptへのEmscriptenバインディングを追加し、Webベースのワークフローで大きなパフォーマンス向上を実現します。
SPZを取り巻くWebエコシステムも拡大しています。最近ではAdobeがBabylon.jsのSPZサポートを拡張し、WebベースのパイプラインでSPZアセットをより簡単にロード・レンダリングできるようにしました。
スプラットの検査・変換Webツール
ライブラリリリースと同時に、nianticspatial.com/spz-converterにて、スプラットファイルを操作するための小型WASMWebツールを公開しました。.spzまたは.plyファイルをページにドロップすると、ヘッダー・ポイント数・SH次数・ストリームレイアウト・バウンディングボックスが表示され、フォーマット間の変換やメタデータのJSONエクスポートが行えます。すべての処理はブラウザ上でローカルに実行されます。
後方互換性
読み込みの互換性についてまとめます:
-
SPZ 4はすべてを読み込めます。旧SPZ v2/v3ファイルはレガシーパスから問題なくロードできます。
-
旧ローダーはSPZ 4ファイルを読み込めません。新しいNGSPマジックを確認し、未対応フォーマットであれば適切にエラーを報告します。
-
拡張を持たないファイルは、拡張を実装・認識しないローダーには標準SPZとして見えます。
旧リーダーとの前方互換性を切るという決断は、軽々しくできるものではありません。しかし、エンコードの高速化・並列デコード・プレーンテキストヘッダー・将来の成長余地、これらを総合して、明確に「Yes」という結論に達しました。
今後の展望
v4のアーキテクチャ変更により、将来的な改善への道が開かれました。v5に向けて検討中の方向性の一部をご紹介します:
-
ストリーミングとプログレッシブローディング
-
SH量子化の改善
-
空間チャンク化とLOD
-
ベンダー拡張の追加
探求してほしいアイデアがあれば、リポジトリにIssueを作り議論を始めてください。すでにプロトタイプを作成済みの方は、プルリクエストをお送りください。SPZのベストな部分は、コミュニティからのプッシュによって生まれてきました。
SPZ 4を始める
やりたいことに応じて、いくつかの始め方があります。
PLYを圧縮したい、またはSPZファイルの中身を確認したいだ場合は、nianticspatial.com/spz-converter へアクセスしてファイルをドロップしてください。インストール不要、サインアップ不要、アップロード不要。数秒でヘッダー情報が表示され、ワンクリックで.plyを.spz v4に変換できます。


