glTF

3D シーンとモデルの ランタイム配信向け オープン標準。Khronos Group が策定し、しばしば 「3D の JPEG」 と呼ばれる。現行は glTF 2.0(2017 公開、以後拡張で進化)。Web・モバイル・AR/VR の事実上のデファクト。

何のために作られたか

3D ファイルフォーマットは大きく二系統に分かれる:

系統用途
編集向け(オーサリング).fbx, .blend, .max, .usd(z)制作の途中、ツール間の往復、編集情報の保存
配信向け(ランタイム).gltf / .glbアプリ起動時にロード・即描画。サイズ最適、パース高速

glTF は「制作データを編集できる形」ではなく、「できあがった成果物を最短で読んで描画する」ことに振り切った規格。Three.js / Babylon.js / Unity glTFast / Apple Quick Look / Blender / Substance / model-viewer 等、ほぼすべてが対応。

2 種類のファイル形式

flowchart LR
    subgraph Sep[".gltf 形式(分離型)"]
      Json[".gltf<br/>(JSON 記述)"] --> Bin[".bin<br/>(頂点・インデックス)"]
      Json --> Tex["*.png / *.jpg<br/>(テクスチャ)"]
    end
    subgraph One[".glb 形式(単一バイナリ)"]
      Glb[".glb<br/>(JSON + binary + texture を 1 ファイルに packing)"]
    end
拡張子中身利点欠点
.gltfJSON + 別ファイルの .bin + テクスチャテキストエディタで JSON が読める、CDN に分散配信できる複数ファイルの取り回しが面倒
.glb上記すべてを 1 ファイルに binary 連結配布が楽、HTTP リクエスト 1 回で済むエディタで中身を見にくい

実運用では .glb が主流(特に Web / VR で配布する際)。

glTF 2.0 が標準で持っているもの

注: 物理演算・コリジョン・ゲームロジックは含まれない。それらは拡張または上位レイヤの仕事。

拡張システム(核心)

glTF の真の強さは 拡張 にある。仕様コアを最小に保ち、用途別の機能は extensions フィールドで追加する。

プレフィックス意味
KHR_*Khronos 公式(仕様レビュー済み)
EXT_*マルチベンダ採用
<VENDOR>_*ベンダ固有(例: MSFT_*, ADOBE_*, VRMC_*

代表的な KHR 拡張:

VRMC_* は VRM 1.0 が定義したベンダ拡張。glTF 標準にヒューマノイドアバター用の意味(ボーンマッピング、表情、揺れ、ライセンス)を追加して .vrm を成立させている。

PBR メタリック・ラフネス

glTF が「これだけでとりあえず見られる」ようにするため、デフォルトのマテリアルモデルとして PBR Metallic-Roughness(pbrMetallicRoughness)を採用:

統一的な物理ベースなので、Substance や Blender で書き出したモデルが Three.js で同じ見た目になる、という相互運用性の根拠。

glTF と類似フォーマットの位置関係

flowchart LR
    Edit["編集系: fbx / blend / usd"] -->|export| Glt["glTF / glb"]
    Glt -->|拡張| Vrm[".vrm<br/>(VRMC_* 拡張)"]
    Glt -->|拡張| Usdz["AR Quick Look<br/>(usdz の代替)"]
    Glt -->|読込| Three[Three.js]
    Glt -->|読込| Babylon[Babylon.js]
    Glt -->|読込| Unity[Unity glTFast]
    Glt -->|読込| Browser["model-viewer / WebXR"]

押さえどころ(カード化候補)

Graph