01 早見表:まず全体像から
まずこの表で8フォーマットの性格をつかんでください。詳しくは各セクションで解説します。バイト単位の技術仕様は、各セクション内の「仕様の中身」を開くと読めます(普段は畳んであります)。
| フォーマット | 一言でいうと | 拡張子 | 圧縮 | 対応ソフト | 向いている用途 |
|---|---|---|---|---|---|
| PLY | 全部入りの原本。でかい | .ply | 基本は非圧縮 | ほぼ全ツール | ソフト間のやり取り、互換性優先 |
| SPLAT | 初期の簡易版。今は選ばない | .splat | SH係数を削り量子化 | 初期のWebビューアー中心 | 旧ビューアーとの互換用(新規では非推奨) |
| KSPLAT | 特定ビューアーの専用形式 | .ksplat | チャンク分割+2段階圧縮 | GaussianSplats3Dのみ | プログレッシブ表示の自前ビューアー |
| SPZ | 配布用の定番圧縮。PLYの1/10 | .spz | v1-3=gzip/v4=zstd | Scaniverse、splat-transform、Spark等 | 配布・保存用の汎用コンパクト形式 |
| SOG | 画像圧縮の技で最小クラス | フォルダ+meta.json | 属性ソート+WebP(約20倍) | PlayCanvas系ツール | Webでの配信・ストリーミング |
| RAD | 巨大シーンの配信専用 | .rad + .radc | 16byte/ガウシアン+チャンク配信 | Sparkのみ | 1億点超級の超大規模ストリーミング |
| LCC / LCC2 | 都市を丸ごと入れる箱 | .lcc2 + SOG/SPZ | 内部フォーマットに準拠 | XGRIDS SDK、splat-transform(読込) | 都市規模でのLOD切り替え |
| glTF(GLB) | 標準規格版。これからの本命 | .glb / .gltf | SPZ方式のKHR圧縮拡張 | Cesium系、gsbox(対応拡大中) | 標準規格での保存・地理空間配信 |
02 PLY(オリジナル・非圧縮)
3DGSの元論文(Inria)がそのまま出力する、事実上の共通言語です。1ガウシアンごとに位置(x, y, z)・スケール・回転(クォータニオン)・不透明度・色情報を記録します。色は球面調和関数(SH)係数として保存され、次数3まで使うと1ガウシアンあたり45個の係数(3チャンネル×15)が必要になるため、ファイルサイズは全フォーマット中もっとも大きくなります。
| 項目 | 内容 |
|---|---|
| 拡張子 | .ply |
| 圧縮 | 基本は非圧縮(splat-transform等が対応する「Compressed PLY」という派生もあり) |
| 対応ソフト | ほぼ全てのDCC・ビューアー・変換ツールが読み込み可能 |
| 向いている用途 | ソフト間でのやり取り、DCCへの取り込み。互換性を最優先したいとき |
仕様の中身(オタク向け)
仕様の中身 ── ヘッダーはASCIIテキストで、ply→format binary_little_endian 1.0→element vertex Nに続いてproperty行が並びます。SH次数3の標準レイアウトでは1ガウシアン=62プロパティ×float32=248バイトです: 位置x,y,z/法線nx,ny,nz(3DGSでは未使用)/f_dc_0..2(SH0次=ベース色)/f_rest_0..44(SH1〜3次)/opacity/scale_0..2/rot_0..3。値は学習時の内部表現のまま格納されるため、表示時にはopacityにシグモイド、scaleに指数関数を通し、クォータニオンを正規化します。テキストエディタでヘッダーを開けばproperty構成がそのまま読めるので、手元のツールで読めるかどうかの一次判定に使えます。
実例 ── Inria公式実装の出力そのもので、Polycam・Luma AI・XGRIDS LCC Studioのエクスポートもこのレイアウトを踏襲します。SuperSplatが直接読み書きするため、編集のハブになるのもPLYです。
03 SPLAT(antimatter15)
初期のWebビューアーsplat(antimatter15)のために作られた、シンプルな固定長バイナリです。1ガウシアンあたり32バイト固定(位置・スケール・色・共分散)で、視点による色変化を表すSH係数を持たないため、PLYよりおよそ半分のサイズになります。
| 項目 | 内容 |
|---|---|
| 拡張子 | .splat |
| 圧縮 | SH係数を削り量子化する形での軽量化(コーデック的な圧縮ではない) |
| 対応ソフト | 初期のWebビューアー中心。正式な仕様書は無く、慣習で決まっている |
| 向いている用途 | とにかく手早くWebで表示したいとき。視点依存の質感(反射・光沢)は失われる |
仕様の中身(オタク向け)
仕様の中身 ── ヘッダーはなく、1ガウシアン固定32バイトの連続です: 位置 float32×3(12バイト)+スケール float32×3(12バイト)+色 RGBA各8bit(4バイト)+回転クォータニオン各8bit(4バイト)。ファイルサイズ÷32がそのまま点数になります。SH係数は0次から計算した色をRGBAに焼き込んで捨てるため、視点依存の質感が失われます。正式な仕様書はなく、antimatter15のリポジトリの実装とREADMEが事実上の定義です。
04 KSPLAT(mkkellogg/GaussianSplats3D)
Three.jsライブラリGaussianSplats3D専用の圧縮フォーマットです。データをチャンク単位に分割し、届いたチャンクから順に描画するプログレッシブストリーミングを前提に設計されています。100MBを超えるシーンでも0.5〜1秒で最初の絵が出せます。圧縮レベルを選べ、SH係数を8bitまで圧縮する設定もあります。
| 項目 | 内容 |
|---|---|
| 拡張子 | .ksplat |
| 圧縮 | チャンク分割+2段階の圧縮レベル(レベル2はSHも8bit圧縮) |
| 対応ソフト | GaussianSplats3Dのみ(専用フォーマット)。PLY/SPLATからの変換ツールが同梱される |
| 向いている用途 | GaussianSplats3Dベースの自前ビューアーで、大きいシーンを段階的に表示したいとき |
仕様の中身(オタク向け)
仕様の中身 ── 圧縮レベルは3段階です: 0=非圧縮(float32)/1=位置・スケール・回転・SHをfloat32→16bitへ/2=レベル1に加えSH係数を8bitへ。空間をブロック(既定5.0)で区切り、バケット(既定256ガウシアン)単位に格納する構造が、そのままプログレッシブロードの単位になります。変換は同梱のnode util/create-ksplat.js [入力] [出力] [圧縮レベル] …で行い、保持するSH次数(0〜2)も引数で指定します。
05 SPZ(Niantic Spatial)
Niantic Spatial(Scaniverse)が開発した圧縮フォーマットで、業界標準になりつつあります。glTFのKHR_gaussian_splatting圧縮拡張(09)の圧縮方式にも採用されました。v1〜v3はgzip圧縮、最新のv4はzstd圧縮+平文32バイトヘッダーという構成に変わりました。v4のヘッダーはmagic「NGSP」から始まり、ガウシアン数・SH次数・バージョンなどがテキストで直接読めるため、ファイル全体をデコードしなくてもヘッダーだけ覗いて点数を確認できます。
| 項目 | 内容 |
|---|---|
| 拡張子 | .spz |
| 圧縮 | v1〜3=gzip/v4=zstd(高圧縮率) |
| 対応ソフト | Scaniverse、splat-transform、Spark、UnityGaussianSplatting、3ds Max 2027.2など幅広く対応 |
| 向いている用途 | 配布・保存用の汎用コンパクト形式として。今後の事実上のデファクトスタンダード候補 |
仕様の中身(オタク向け)
仕様の中身(v4) ── 32バイトの平文ヘッダー(magic NGSP=0x5053474E・ガウシアン数・SH次数0〜4・固定小数点ビット数・アンチエイリアスフラグ・ストリーム数・目次オフセット)に、属性ごとに独立したzstdストリームが続きます。ストリームが独立しているため並列に展開できるのがv4の狙いです(v1〜3はgzip一本)。量子化は属性ごとに変えてあります:
| 属性 | 量子化 |
|---|---|
| 位置 | 座標あたり24bit固定小数点 |
| スケール | 8bit(log域) |
| 回転 | smallest-three方式: 最大成分のインデックス2bit+残り3成分を10bitずつ |
| 色・不透明度 | 各8bit |
| SH係数 | 1次=5bit、2次以降=4bit(既定) |
実例 ── ScaniverseアプリのエクスポートがSPZで、NianticがMITライセンスでOSS化しています(nianticlabs/spz)。公称でPLY比およそ1/10に縮みます。
06 SOG(PlayCanvas)
PlayCanvasが開発した、「Gaussian Splatting版のWebP」と呼ばれるフォーマットです。ガウシアンを位置・スケール・色などの属性でソートしてから、属性ごとにWebP画像として圧縮し、meta.jsonで紐付けます。似た性質のガウシアンを隣接させてから画像圧縮をかけるため圧縮効率が高く、1GBのPLYが55MB程度まで縮む(約20倍)例が報告されています。
| 項目 | 内容 |
|---|---|
| 拡張子 | フォルダ+meta.json(単一ファイルではない) |
| 圧縮 | 属性ソート+WebP画像圧縮。実測で約20倍 |
| 対応ソフト | SuperSplat、splat-transform、SparkなどPlayCanvas系ツール |
| 向いている用途 | ブラウザでの配信・ストリーミング。ファイルサイズを最優先したいとき |
仕様の中身(オタク向け)
仕様の中身 ── meta.json+WebP画像で1シーンを表します(必須5ファイル+高次SH用の2ファイルは任意)。「同じピクセル座標(x,y)が全画像を通して同じガウシアンを指す」という取り決めがフォーマットの核心です:
| ファイル | 内容 |
|---|---|
| means_l / means_u.webp | 位置。16bit値をlog域で量子化し、下位/上位8bitを2枚に分割(RGB=xyz) |
| quats.webp | 回転。smallest-three方式(3成分×8bit+捨てた成分のインデックス) |
| scales.webp | スケール。8bitコードブック参照(log域) |
| sh0.webp | ベース色。RGB=コードブックのインデックス、A=不透明度 |
| shN_centroids / shN_labels.webp | 高次SH。K-meansで最大65,536個のパレットへ集約し、16bitラベルで参照 |
WebPは量子化値を保つためロスレス必須です。全ファイルをZIPに固めた単一.sogも定義されています。仕様はPlayCanvas公式ドキュメントで公開されています。
07 RAD(Spark)
Three.js向けレンダラーSparkが2.0で追加した、LODツリーをそのまま保存できるストリーミング専用フォーマットです。あらかじめbuild-lodコマンドでLODツリーを構築して保存しておき、閲覧時はHTTP Range Requestでチャンク(.radc)を必要な分だけ取得します。粗いバージョンを一瞬で表示し、視点の移動に応じて詳細を追加でストリーミングする「coarse-to-fine」設計です。ロケハン3Dの自社ビューアーも、このRADフォーマットを軸にした独自の並列デコード・LOD制御を組み込んでいます。
| 項目 | 内容 |
|---|---|
| 拡張子 | .rad(ヘッダー・LODツリー)+ .radc(チャンク本体) |
| 圧縮 | 内部は16バイト/ガウシアンのPackedSplatsが既定。チャンク単位でHTTP Range配信 |
| 対応ソフト | Spark(paged:trueで読み込み)。他ツールへの対応は今のところ限定的 |
| 向いている用途 | 1億点を超えるような超大規模シーンを、GPUメモリに収まる範囲でストリーミング表示したいとき |
実例 ── 当社ビューアーでは934MB・4,940万ガウシアンのRADを、初回表示まで約6秒でストリーミングできています(以降の視点移動は常駐キャッシュで待ちなし)。フォーマットの一次情報はSparkのドキュメントとソースコードのみで、SPZやSOGのような独立した仕様書はまだありません。
08 LCC / LCC2(XGRIDS)
XGRIDSが開発した、都市規模のシーンをLOD(詳細度)付きで扱うためのコンテナフォーマットです。単一のファイルではなく、JSONメタデータ(octree型のLODツリー)と、実データを格納するdata/3dgs/フォルダで構成されます。実データはSOGかSPZのどちらか一方で保存され、隣接するノードは1ファイルに統合されます。PortalCamのスキャンでも、LCC Studioの書き出しにLcc2/lcc2-result/フォルダ(3dgsはSOG、meshはPLY)として含まれています。
| 項目 | 内容 |
|---|---|
| 拡張子 | .lcc2(メタ)+ data/3dgs以下にSOGまたはSPZ |
| 圧縮 | 内部で使うSOG/SPZの圧縮率に準拠 |
| 対応ソフト | XGRIDS純正SDK(UE5/Unity/Web)、splat-transform(読み込みのみ)、SuperSplat、3ds Max 2027.2(読み込み) |
| 向いている用途 | 都市1エリア丸ごとなど大規模シーンで、カメラ距離に応じたLOD切り替えをしたいとき |
09 glTF(KHR_gaussian_splatting)
Khronosが標準化を進めている、glTF/GLBに3DGSを格納するための公式拡張です。2026年2月にリリース候補(RC)が公開され、正式承認に向けた最終段階にあります。圧縮にはNiantic Spatialが寄贈したSPZ方式の拡張(KHR_gaussian_splatting_compression_spz)を使います。最大の意義は、専用フォーマットの乱立からglTFという汎用3D標準の上に乗る流れができたことです。Cesiumはこれをペイロードに採用して3D Tilesの階層LODストリーミングに対応し(2026年4月)、都市スケールの3DGSを地理座標付きで配信できるようになりました。gsboxなどの変換CLIもPLY⇄GLBに対応しています。
| 項目 | 内容 |
|---|---|
| 拡張子 | .glb / .gltf(KHR_gaussian_splatting拡張) |
| 圧縮 | SPZ方式の圧縮拡張(PLY比で最大90%減) |
| 対応ソフト | CesiumJS、Cesium for Unreal、Cesium ion、gsbox。RC段階のため対応は拡大中 |
| 向いている用途 | 標準規格での長期保存・配布。3D Tilesと組み合わせた都市スケールの地理空間配信 |
仕様の中身(オタク向け)
仕様の中身(RC) ── メッシュprimitiveの属性としてPOSITIONに加え、拡張名を接頭辞にしたKHR_gaussian_splatting:ROTATION(VEC4・単位クォータニオン)/:SCALE(VEC3)/:OPACITY(SCALAR・0〜1)/:SH_DEGREE_0_COEF_0(VEC3)を定義します。高次SHは3次(計45係数)までで、使う場合は下位の次数を必ず含める階層ルールです。0次係数からの表示色はColor = SH0 × 0.282095 + 0.5で導出します。3DGS非対応ビューアー向けに、点群としてフォールバック表示するためのCOLOR_0を併記できるのも標準規格らしい設計です。仕様はKhronosのglTFリポジトリで読めます。
10 結局どれを選べばいいか
先に大原則をひとつ。SPZ・SOG・KSPLATなどの圧縮フォーマットは量子化で情報を削っており、一度圧縮したデータから元の品質は戻せません。そのため、配信用にどのフォーマットを選ぶ場合でも、学習直後のPLYをマスターとして保管し、そこから用途別に派生させる運用にします。フォーマット選びは「マスターをどれにするか」ではなく「配信・受け渡しをどれでやるか」の問題です。
そのうえで、用途ごとの目安です。3DGSを扱えるソフト・ツール比較もあわせて、「どのソフトでどのフォーマットを使うか」を決めてください。
- 他のDCCソフト(Houdini/Blenderなど)に渡す ── PLY。3ds Max 2027.2のようにSPZを直接読める環境も増えましたが、確実に全ツールで開けるのは今もPLYだけです
- Webで公開・共有したい ── 使うビューアー側の対応で決めます。SuperSplat・SparkなどPlayCanvas系で表示するならSOG(圧縮率最優先・ただしフォルダ構成)、単一ファイルで配りたい・相手の環境が読めないならSPZが無難です
- 都市規模のシーンでLODを切り替えたい ── XGRIDSのSDK(UE5/Unity)で使うならLCC2、標準規格でGIS・地理座標と組み合わせるならCesiumの3D Tiles+glTF(09)です。LCC2は独自ライセンスの確認を忘れずに
- 1億点を超える超大規模シーンをストリーミングしたい ── RAD。Spark専用ですが、LODツリーごとHTTP Range配信できるのは現状これだけです
- GaussianSplats3Dで自前ビューアーを組む ── KSPLAT。プログレッシブ表示の恩恵を受けられます
- 標準規格で長期保存・配布したい ── glTF(KHR_gaussian_splatting)が本命ですがまだRC段階です。現時点のアーカイブはPLYマスター+圧縮派生の2本持ちが確実です
なおSPLATを今から新規に選ぶ理由はほぼありません。正式な仕様書がなくSH係数も失われるため、「手早く試したいだけ」の用途も、PLYをそのまま読めるSuperSplat等に投げるほうが早くて確実です。
フォーマット間の変換は、splat-transformでほぼ一括してカバーできます。
フォーマットを気にせず巨大な3DGSデータを扱いたいなら
ロケハン3Dの自社ビューアーは、SOG・SPZを含む主要フォーマットに対応したSparkをベースに、オフライン・ブラウザだけで巨大な3DGSデータを扱えるよう開発しています。ダウンロードや会員登録なしでサンプルシーンを試せます。
サンプルシーンをブラウザで試す →
