ユーザーガイド

第8章 — エクスポート形式

Simple モードでのエクスポート形式選択 — 6 つの形式カード
Simple モードでのエクスポート形式選択 — 6 つの形式カード
flowers ブーケで 5K 反復トレーニング後のライブエクスポート形式グリッド — 6 つすべてのカードに動的サイズ計算 (PLY 742 KB 選択、SPZ 74 KB、glTF 708 KB、.splat 96 KB、Orbit Video ~Zero KB、Web Viewer 133 KB)、右側のエクスポート履歴にすでに保存された PLY
flowers ブーケで 5K 反復トレーニング後のライブエクスポート形式グリッド — 6 つすべてのカードに動的サイズ計算 (PLY 742 KB 選択、SPZ 74 KB、 glTF 708 KB、.splat 96 KB、Orbit Video ~Zero KB、Web Viewer 133 KB)、 右側のエクスポート履歴にすでに保存された PLY

画像で見えるもの (2 991 Gaussian、SH degree 3、Bjoern の合成 Blender ブーケを IP クリーンテストセットとして): 各形式カードの下のサイズ表示は、 現在の Gaussian カウントと形式オーバーヘッドからライブで計算されます — ハードコードではありません。2 991 Gaussian (SH degree 3) から、742 KB PLY、 74 KB SPZ (量子化により約 10 倍小さい)、708 KB glTF (KHR_gaussian_splatting 拡張により、ほぼ PLY 相当)、96 KB .splat (圧縮された Gaussian あたり 24 バイト形式) が生成されます。Orbit Video は、サイズが MP4 エンコーディング後にのみ判明するため「~Zero KB」と表示されます。Web Viewer (133 KB) は、組み込み WebGL ビューアーと圧縮された Splat データを含む独立した HTML ファイルをバンドルします — ビューアーオーバーヘッドのため、純粋な .splat より大きくなります。右側のエクスポート履歴には、すでに完了した PLY エクスポート (「training_20260527T211321Z.ply、743 KB、23:13」) と形式ピル、 Finder で開くアクションがリストされます。

完了したトレーニングは Gaussian Cloud を生成します — シーンを再構築する数十万 から数百万の 3D ガウス分布のコレクションです。RadianceKit は、この Cloud を ディスクに書き込む 10 通りの方法を知っています。そのうち 6 つは純粋な 3D データ 形式 (PLY、Compressed PLY、SPZ、SOG、glTF、.splat)、1 つは Cloud を完成した HTML ビューアーとともにバンドル (Web Viewer)、1 つは Orbit カメラ走行から MP4 ファイルを レンダリング (Orbit Video)、2 つは Gaussian コンテンツをエクスポートせず、他の トレーニングパイプラインで再利用するための SfM 結果 (カメラポーズと粗い点群) のみを エクスポートします (transforms.json + COLMAP Workspace)。

どの形式がいつ正しいかは、目的によって異なります。品質損失なしのフルデータ アーカイブには PLY を使用します。自分のサイトの Web ビューアーには、通常 .splat または組み込み Web Viewer で十分です。ファイルが最小である必要がある場合は、SPZ または SOG が価値があります。Nerfstudio、Postshot、または Brush で SfM 結果を 再利用するには、transforms.json と COLMAP Workspace が正しい方法です。

すべてのエクスポート機能は「Export」メニューと、Simple モードの最後のウィザード ステップにあります。ほとんどの形式は完全に Sandbox 準拠で、App Store バージョンで 動作します。SOG のみ、App Store ビルドには必ずしも存在しない外部バイナリ (cwebp) が必要です — 詳細は E4 を参照してください。

E1 — PLY (.ply)

場所

メニューバー → Export → 3D Formats → Export PLY… (⌘E)。 Simple モード: ウィザードステップ Export → 形式カード「PLY」。 サイズ: 通常 100 % (基準値)。互換性: SuperSplat、PolyCam、すべての 3DGS ビューアー。

技術詳細

PLY は 3D Gaussian Splatting の標準保存形式です。RadianceKit は 標準化された 3DGS プロパティレイアウトを持つバイナリリトルエンディアン ファイルを書き込みます: Gaussian あたり 3 成分の位置、常にゼロに設定される 3 つの法線、基本 RGB 色用の 3 つの DC SH 係数 (f_dc_0..2)、続いて Kerbl 2023 論文で定義された転置チャンネルメジャー配置で最大 45 個の追加 SH 係数 (f_rest_0..44) (まず R チャンネル係数すべて、次に G、次に B)、続いて logit opacity (生の pre-sigmoid 値)、3 つの対数空間スケール、wxyz クォータニオン 回転。最大エクスポート SH 次数は、ユーザー希望と実際に学習された次数の最小値に クランプされます。デフォルトは 3 (45 個の Rest 係数)。書き込み前に、非常に 大きな Cloud でのオーバーフローを検出するため、ペイロードサイズが 64 ビット 整数で計算されます。ファイルはアトミックに書き込まれるため、大きな Cloud では ディスク容量を一時的に倍占有します。

E2 — Compressed PLY (.ply)

場所

メニューバー → Export → 3D Formats → Export Compressed PLY…。 Simple モード: 形式カード「Compressed PLY」。 サイズ: PLY に対して約 10〜20 % (5〜10 倍の圧縮)。 互換性: SuperSplat、PlayCanvas エンジン、ウェブベースのビューアー。

技術詳細

チャンクごとの量子化を持つ PLY 形式の PlayCanvas バリアント。 Gaussian は 256 個のチャンクにグループ化されます。チャンクごとに、位置、スケール、 色の Min/Max 境界がヘッダーに個別に保存されます。個々の Gaussian はこれらの 境界に対する値を参照し、それぞれ 32 ビットに圧縮されます: 位置とスケールは 11-10-11 ビットパッキング、回転は 2-10-10-10 ビット「Smallest-Three」 クォータニオン、色は 8-8-8-8 RGBA。より高い SH 係数は、コンポーネントあたり 8 ビットのみで量子化されます (Gaussian あたり shCoeffCount * 3 uchar)。 形式自体は依然として ASCII ヘッダー PLY であるため、PLY ツールで基本的に検証 可能ですが、頂点プロパティは uint フィールドとして宣言されます。SH 次数は 圧縮を最大化するためデフォルトで 0 (Rest 係数なし) です — より高い SH 次数を 明示的に選択できます。

E3 — SPZ (.spz)

場所

メニューバー → Export → 3D Formats → Export SPZ…。 Simple モード: 形式カード「SPZ」。 サイズ: PLY に対して約 10 % (90 % 小さい)。 互換性: Niantic Scaniverse、Niantic Spatial Fields、MetalSplatter。

技術詳細

Niantic の SPZ v2 形式。位置は 24 ビット固定小数点としてパックされます (約 0.25 mm の解像度)、スケールは対数空間で 8 ビット量子化、回転は 8 ビット Smallest-Three (v2 では xyz のみが保存され、w は Decoder でクォータニオン ノルムから導出される)、Opacity はシグモイド化された 8 ビット値。DC SH は SPZ 固有のパック式 (dc_raw * 0.15 * 255 + 0.5 * 255) で保存され、より高い SH バンドは係数あたり 5 ビット (Band 1) または 4 ビット (Band 2-3) で保存 されます。全パックされたバイナリブロブは、標準 gzip (RFC 1952) で圧縮され、 Magic Bytes 1f 8b を持つ gzipped コンテナ形式が生成されます。Apple の組み込み zlib API が独自の Apple フレーミングを生成し、Spatial Fields や MetalSplatter の SPZ リーダーと互換性がないため、RadianceKit はシステム gzip を呼び出します。 システム gzip は macOS Sandbox 内でも spawn 可能です。

E4 — SOG (.sog)

場所

メニューバー → Export → 3D Formats → Export SOG…。 Simple モード: 形式カード「SOG」。 サイズ: PLY に対して約 5〜6 % (15〜20 倍圧縮 — 最小のオプション)。 互換性: PlayCanvas エンジン、SuperSplat エディター。

技術詳細

「Spatially Ordered Gaussians」— Cloud を複数の Lossless WebP 画像で GPU ready に保存する PlayCanvas 形式です。まず、すべての Gaussian が 3D Morton コード (30 ビット Z-Order、軸あたり 10 ビット) で空間的にソートされ、 画像にレンダラーでの後のキャッシュ局所性が与えられます。次に、位置は対称対数変換 (より良いダイナミックレンジのため) で 16 ビット値に量子化され、2 つの RGBA 画像に分割されます (means_l.webp は下位 8 ビット、means_u.webp は上位)。 回転は、3×8 ビット + 2 ビットモードを持つ Smallest-Three として RGBA 画像に エンコードされます (モードはアルファに 252 + largest として配置されます)。 スケールと DC SH は、それぞれ 256 エントリのコードブック (パーセンタイル ベースですべての値にわたって分散) で量子化され、インデックスは scales.webpsh0.webp に配置されます。5 つの画像とコードブックと境界を含む meta.json は、 ZIP ファイル (Sandbox がシステム zip をブロックするためカスタムエンコーダー) に パックされ、拡張子 .sog で保存されます。

Sandbox 注意: SOG は、外部バイナリを必要とする唯一の形式オプションです。 WebP エンコーダーステージは、/usr/local/bin/cwebp または /opt/homebrew/bin/cwebp から cwebp を呼び出します。cwebp バイナリが見つから ない場合、コードは生の PNG エンコーディングにフォールバックします — しかし: PNG フォールバックは SuperSplat で動作しません。 App Store バージョンでは、ビルドバリアントに基づいて可用性を評価します。 Developer バリアントでは、cwebp を Homebrew 経由でインストールする必要があります (brew install webp)。

E5 — glTF (.glb)

場所

メニューバー → Export → 3D Formats → Export glTF…。 Simple モード: 形式カード「glTF」。 サイズ: PLY と同等。互換性: KHR_gaussian_splatting 拡張 (Khronos ドラフト標準) を持つ glTF ビューアー。

技術詳細

KHR_gaussian_splatting 拡張仕様に従って、自己完結型の .glb バイナリ ファイル (別の bin ファイル添付なし) を書き込みます。位置は通常の glTF POSITION 頂点データ (float3) として保存され、他のすべての属性 (回転は float4、 スケールは float3、Opacity は float、SH 係数は float3 × shCoeffCount) は追加の 頂点属性に配置され、拡張経由で参照されます。重要: glTF は右手座標系 Y-up を 使用し、COLMAP/3DGS は Y-down/Z-forward で動作します。そのため、エクスポーターは X 軸周りの 180 度回転を適用します — 位置は (x, -y, -z) で書き換えられ、 クォータニオンは (w, x, -y, -z) に調整されます。これにより、glTF ビューアーで 幾何学的に正しく、右手 (鏡像ではない) 表現が得られます。GLB 標準で要求される通り、 JSON とバイナリチャンクは 4 バイトアラインメントにパディングされます。

E6 — Splat (.splat)

場所

メニューバー → Export → 3D Formats → Export .splat…。 Simple モード: 形式カード「.splat」。 サイズ: Gaussian あたり正確に 32 バイト。互換性: gsplat.js、ウェブベースのビューアー (antimatter15 リファレンス)、ほとんどの ブラウザ 3DGS デモ。

技術詳細

antimatter15 .splat 形式 — Gaussian あたり 32 バイト、ヘッダーなし、 間接化なし。エントリごとのレイアウト: 3 × float32 位置 (世界座標)、 3 × float32 スケール (内部バッファの対数空間から exp 変換)、4 × uint8 RGBA 色 (DC SH 係数を SH_C0 = 0.282... でスケーリングし、[0,255] にクランプ)、 4 × uint8 クォータニオン (w,x,y,z、正規化して 128 + 128*q でバイト範囲に エンコード)。DC SH のみが保存されます — より高い SH バンドは破棄されます。 これにより形式は非常にコンパクトになりますが、反射や鏡面ハイライトで発生する ビュー依存の色変化が失われます。書き込み順序は Cloud のインデックス順序と 正確に同じ (空間ソートなし) で、gsplat.js のような Web ビューアーはそれに 基づいてレンダリングします。

Firefox で開かれた Web Viewer — Bjoern のブーケ Splat が周囲のカメラマーカー球とともにレンダリングされ、上部にブラウザのタブバーが表示され、CDN/サーバーセットアップは不要
Firefox で開かれた Web Viewer — Bjoern のブーケ Splat が周囲の カメラマーカー球とともにレンダリングされ、上部にブラウザのタブバーが 表示され、CDN/サーバーセットアップは不要。スタンドアロンの flowers-01.html が Finder からデフォルトブラウザでダブルクリックして 直接開かれました — 組み込みの WebGL2 プログラムは、ネットワークや サーバーなしですぐに Gaussian Cloud をレンダリングします。ブーケの 周りの黒いマーカーはトレーニングカメラで、オプションで表示できます。 マウスドラッグで回転、スクロールでズーム。

E7 — Web Viewer (.html)

場所

メニューバー → Export → Media → Export Web Viewer…。 Simple モード: 形式カード「Web Viewer」。 サイズ: base64 エンコードされた Splat データ (≈ 4/3 オーバーヘッド) + 約 5 KB HTML/JS シェル。互換性: WebGL2 対応のすべての最新ブラウザ (すべてのデスクトップ、iOS 15+、Android 5+)。

技術詳細

Gaussian Cloud を完全にインラインで書かれた WebGL2 レンダラーと一緒に、 単一の .html ファイルにバンドルします。CDN 依存性、WASM、2 番目のファイルは ありません。Cloud は内部的に最初に .splat バイナリ (E6 と同じ 32 バイト ロジック) としてエンコードされ、次に base64 で埋め込まれ、ブラウザで atob で デコードされます。組み込みレンダラーは独自の WebGL2 ソート、マウスオービット 制御、フレームごとの CPU ソートを実行します。すべての JS コード (シェーダー、 数学、ループ) は出力 HTML で表示されます。ストレージとレンダラーの境界での 軸規約は E5 と完全に同じです: 位置 (x, -y, -z)、クォータニオン (w, x, -y, -z)。 オプションで、ブランディングオーバーレイを表示できます (Free Tier スイッチ)。 すべてがインラインなので、ファイルは file:// プロトコルから直接動作します — テストにローカル Web サーバーは不要です。

flowers-01.mp4 から抽出された単一フレーム — Bjoern のブーケのプロファイルレンダリング、カメラマーカー付きの白いプラットフォームが見え、黒い背景 — ビデオ実行に約 5 秒の典型的な Orbit カメラ走行フレーム
flowers-01.mp4 から抽出された単一フレーム — Bjoern のブーケの プロファイルレンダリング、カメラマーカー付きの白いプラットフォームが見え、 黒い背景 (デフォルトのビューポート背景、設定で変更可能)。カメラは パラメトリックパスでシーンを周回 (仰角 + 距離は固定、Yaw は回転)、 通常 30 または 60 fps で 6〜10 秒の長さ。フレーム解像度は VideoPreset 経由で 480p から 8K までスケーラブル。

E8 — Orbit Video (.mp4/.mov)

場所

メニューバー → Viewport → Record Turntable Video または メニューバー → Export → Media → Export Orbit Video…。Simple モード: 形式カード「Orbit Video」、Duration スライダー 3〜30 秒。 サイズ: 長さ、解像度、ビットレートに依存。 互換性: すべてのプラットフォーム (H.264 と HEVC は Apple 標準)。

技術詳細

パラメトリック Orbit カメラ走行に沿って Gaussian Cloud をレンダリングし、 AVAssetWriter 経由で各フレームを MP4 または MOV ファイルにエンコードします。 Orbit 構成は、回転数 (公転)、距離、仰角、FOV、長さ、Ease-In/Out 係数を制御します。 フレームごとに、世界調整マトリクス (レンダラーで計算され、内部座標を Y-up Orbit 世界に回転させる) がカメラと乗算され、続いて MetalSplatter 固有の Y 反転が 適用されます。オフスクリーンレンダーターゲットは、IOSurface 経由でエンコーダー用の CVPixelBuffer に引かれます。エンコーダーは H.264 と HEVC、構成可能なビットレート、 480p から 8K までの解像度をサポートします。最初のフレームの前に、レンダラーは 初期 Splat ソートが完了するように 200 ms 待機します。このエクスポートは GPU バウンドです — 8K と数百万 Gaussian では、フレームあたりのレンダリング時間が 数秒になり、6 秒のビデオで合計 10〜30 分のレンダリング時間になることもあります。

E9 — SfM Transforms (transforms.json)

場所

メニューバー → Export → Photogrammetry → Export SfM (transforms.json)…。 サイズ: 通常 1〜10 KB (ポーズと内部パラメータのみ、画像なし、 Gaussian なし)。互換性: nerfstudio、Brush、gsplat、OpenSplat、Meshroom、 すべての最新フィードフォワード 3DGS トレーナー。

技術詳細

カメラポーズリストと共有内部パラメータを持つ nerfstudio transforms.json 形式を書き込みます。カメラごとに、ビューマトリクス (RadianceKit 内部: COLMAP 規約での World-to-Camera) が反転され、次にカメラ ローカル Y と Z 基底ベクトルが反転されて nerfstudio 規約 (OpenGL スタイル、 カメラは -Z 方向を見る、+Y が上) に変換されます。最終 4×4 マトリクスは、 各フレームの transform_matrix フィールドに double の行優先ネストされた配列として 配置されます。内部パラメータはトップレベルに保存されます (焦点距離 x/y、主点 x/y、 画像幅/高さ、camera_model = "OPENCV"、加えて歪み係数 k1, k2, p1, p2) — ただし、エクスポーターが複数の異なる内部パラメータセットを検出する場合は、 フレームごとに書き込まれます。画像パスは JSON ファイルに対して相対的に images/<filename> として書き込まれます。ユーザーは、トレーニング写真を含む 兄弟 images/ フォルダを作成する必要があります。

E10 — COLMAP Workspace (sparse/0/)

場所

メニューバー → Export → Photogrammetry → Export SfM (COLMAP Workspace)…。 サイズ: 3 つのバイナリファイル合計通常 4〜8 MB — points3D.bin が支配的 (スパース Cloud の 3D 点ごとに 1 行)、 images.bincameras.bin はそれぞれ 100 KB を大きく下回ります。 互換性: COLMAP 自体、Nerfstudio、Postshot、Meshroom、COLMAP sparse/ ディレクトリを期待するすべてのツール。

技術詳細

3 つのバイナリファイルを持つ標準 COLMAP sparse/0/ レイアウトを 書き込みます: cameras.binimages.binpoints3D.bin。形式リファレンスは 公式 COLMAP ドキュメントです。cameras.bin には、重複排除された内部パラメータ リストが含まれます (同じ内部パラメータと画像サイズを持つカメラは、単一の エントリにまとめられます)。使用されるカメラモデルは OPENCV (Model 4) で、 fx/fy/cx/cy と 4 つの歪み係数 k1/k2/p1/p2。images.bin は、画像ごとに wxyz クォータニオンとしてのポーズ、続いて translation、カメラ ID、ファイル名を リストします。2D-3D 対応は保存されません。points3D.bin には、位置、色 (0-255 RGB)、再投影と Track 長のデフォルト値を持つ SfM 点群が含まれます。 すべてリトルエンディアンで書き込まれます。RadianceKit への再インポートは File メニュー → 「Import COLMAP/Metashape Workspace…」(SfM バックエンド章の Q3 参照) で機能します。

どの形式をいつ?

目的形式
自分のサイトの Web ビューアーE7 Web Viewer (.html)
gsplat.js を使用した Web ビューアーE6 Splat (.splat)
Postshot / Nerfstudio でのパイプライン再利用E9 transforms.json + E10 COLMAP Workspace
SuperSplat 編集E1 PLY または E2 Compressed PLY
Niantic Scaniverse / Spatial FieldsE3 SPZ
最大圧縮E4 SOG (cwebp 必須)
マーケティング/ソーシャルビデオE8 Orbit Video

クイック比較

形式拡張子Sandboxサイズ (1M Gauss)最適用途
E1 PLY.plyはい~250 MBアーカイブ、最高 互換性
E2 Compressed PLY.plyはい~40 MBWeb + SuperSplat
E3 SPZ.spzはい (gzip spawn)~40 MBNiantic + モバイル
E4 SOG.sog条件付き (cwebp)~20 MB最大 圧縮
E5 glTF.glbはい~250 MBKhronos パイプライン
E6 Splat.splatはい~32 MBgsplat.js Web ビューアー
E7 Web Viewer.htmlはい~45 MBスタンドアロン ブラウザファイル
E8 Orbit Video.mp4/.movはい可変ソーシャル/マーケティング
E9 SfM Transforms.jsonはい~5 KBポーズ受け渡し
E10 COLMAP Workspaceディレクトリはい~4–8 MBポーズ受け渡しバイナリ

サイズ列は SH 次数 3 で 100 万 Gaussian の大まかな目安です。実際の値はシーンの 圧縮性によって異なります。SH 次数 0 では PLY/glTF が 4 倍縮小します。