GLTF

GLTFファイルとは

ウェブ向けの 3D 形式。形状も材質もアニメーションも、すべて 1 つの JSON に入ります。

GLTF とは何か

GLTF はプレーンテキスト形式です。どのエディターでも開けます。 ピクセルではなく図形と座標を保存するので、どんな大きさでも鮮明なままです。看板の大きさまで引き伸ばしたロゴでも、失うものはありません。 ウェブと完成したファイルの受け渡しのために使われます。

拡張子は .gltf、正式名称は GL Transmission Format です。ただしどちらも、そのファイルが中に何を持てるかほどには多くを語りません。このページの残りは、その中身についての話です。

GLTF はどこから来たのか

Khronos Group が 2015 年に公開しました。 仕様は glTF 2.0 です。

古さが役に立つのは、ごく実務的な理由からです。形式が古いほど、それを覚える時間が多くのプログラムに与えられてきたということだからです。

仕様は公開されています

仕様書がそのまま公開されているので、中身を推し量るのではなく文書を読んで実装できます。この形式が数多くのプログラムに載っているのはそのためであり、20 年前に書かれたファイルが今も開けるのもそのためです。ただし「仕様が公開されている」ことと「使用料が要らない」ことは別の話です。中でコーデックを包んでいる形式では、特許のライセンスは仕様書が答えていない別の問題として残ります。

捨てられるものはありません

GLTF ファイルは中身をそのまま保存します。保存し直しても何も変わらないので、開いて、直して、また保存する——それを何度繰り返しても劣化は積み上がりません。これが、渡すための形式ではなく作業のための形式である理由です。

複数のフレームを持てます

GLTF ファイルは静止した 1 枚ではなく、アニメーションまるごとを保存できます。変換の前に知っておくべきことです。1 フレームしか持てない変換先は、最初の 1 枚を取って残りを落とします。しかもたいていは、何も言わずにです。

GLTF を開けるのは何か

Blender、three.js、Babylon.jsが読めますし、同じ種類のプログラムならたいてい読めます。

ファイルが開かないとき、形式が悪いことはめったにありません。たいていはプログラムのほうが形式より古いのです。もっと古い形式に変換してしまうのが確実な逃げ道で、このサイトの残りの部分はそのためにあります。

ブラウザーで開く

これを読めるブラウザーはありません。

これを変換するいちばんよくある理由がこれです。形式が悪いのではありません。ファイルを見せたい場所が、それを読めないというだけのことです。

作業のための形式です

GLTF は、開いて手を入れるために作られています。作業が続いているあいだはこの形式でファイルを持ち、完成したものが必要になるたびに、ここから書き出してください。

モデリングのためではなく、配信のために作られました

このサイトにあるほかの 3D 形式はどれも、モデリングソフトのための交換形式か、スキャナーのための取り込み形式です。glTF はどちらでもありません。2015 年に Khronos Group が設計した、完成したシーンをレンダラーへ「配送する」ための形式で、グラフィックスカードがほぼそのまま使える形をしています。

これが設計者たちが「3D の JPEG」と呼んだ意味です。誰も写真スタジオで JPEG を編集しません。それは最後に出てくるものです。glTF はジオメトリ、マテリアル、テクスチャ、アニメーション、カメラ、ライトを、ビューアーが読み込んでほとんど手間なく描画できるように整えて持っています。

トップは JSON、その下はバイナリ

.gltf ファイルは JSON で、読めます。開けばノードの階層やマテリアルの定義、アニメーションのチャンネルが名前の付いたフィールドで並んでいるのが見えます。何かがおかしいときに、この読みやすさが本物の価値になります。

JSON が含まないのはかさばる部分です。頂点の位置、法線、テクスチャ座標、アニメーションのキーフレームは別のバイナリバッファに入っていて、たいてい隣に置かれた .bin ファイルで、テクスチャは普通の PNG や JPEG のファイルとしてパスで参照されます。だからモデルは一つのファイルというよりフォルダーになります ── これはまさに GLB が解決しようとしている問題です。

マテリアルは物理ベースで、だから見た目が正しくなります

glTF はメタリック・ラフネスのマテリアルモデルを使います。各面がどれだけ金属的か、どれだけ粗いか、ベースカラーは何か、加えて任意で法線・オクルージョン・エミッシブのマップを宣言します。今のレンダラーはたいていこの語彙を理解しているので、同じモデルがブラウザーでもゲームエンジンでも、スマートフォンの AR ビューアーでも製品コンフィギュレーターでも一貫して見えます。

これは OBJ とのいちばん際立った違いです。OBJ の相棒である MTL ファイルは 1990 年代初頭のシェーディングの考え方を記述していて、ラフネスやメタルネスの居場所がありません。OBJ に書き出したモデルは実質的にマテリアルの説明を失いますが、glTF に書き出せばそれを保ちます。だから、モデルがレンダリングされる先へ向かうときには、この変換をする価値があります。

アニメーションとリギングも一緒に運ばれます

glTF はスケルタルアニメーションを持てます。関節の階層、スキニングの重み、平行移動・回転・拡大縮小のキーフレーム付きチャンネル。表情やシェイプのブレンドのためのモーフターゲットも持てます。

ウェブで一般的に使われているほかのものは、それを何も持ちません。OBJ にはアニメーションがまったくなく、STL と PLY も同じで、FBX はたくさん持っていますが独自形式で文書化もされていません。ウェブページ上でモデルを動かす必要があるなら、glTF は選択肢の一つではなく、唯一の選択肢です。

どこで出会うか

まずウェブビューアーです。three.js、Babylon.js、model-viewer 要素はどれも glTF をそのまま受け付け、ウェブページ上の 3D の大半は内側で glTF です。製品コンフィギュレーターと EC の商品ビューアーは商業的な応用です。

次に Android の拡張現実で、Scene Viewer を通じて glTF を直接使います。そしてアセットライブラリ ── Sketchfab、Poly Haven、Khronos 自身のサンプルモデル ── は、変換なしでどこでも動く形式だからこれで公開しています。Blender、Unity、Unreal、Godot、Substance、Cinema 4D はすべてこれを読み書きできます。

拡張機能、とくに Draco

仕様は拡張の仕組みを定義していて、実用上重要なのは二つです。Draco はジオメトリを圧縮し、しばしば五分の一から十分の一のサイズにします。ウェブページにとっては、それが瞬時の読み込みと目に見える待ち時間の違いです。Basis Universal を伴う KTX2 は同じことをテクスチャに対して行い、さらにグラフィックスカードがメモリ上で圧縮したまま保持できるようにします。

落とし穴は、その拡張を実装していないビューアーではファイルが使えなくなることです。Draco 圧縮された glTF は一部の古いツールで開けなくなるので、これはマスターに適用するものではなく、配信時点での最適化です。圧縮していない版を残し、出口で圧縮してください。

変換元・変換先として

OBJ、STL、PLY からはジオメトリはきれいに変換され、マテリアルはたいてい変換すべきものがそもそも存在しません。裸のメッシュは既定の灰色のマテリアルを持つ裸のメッシュとして渡り、何か見た目がほしいならあとでマテリアルを割り当てる必要があります。

OBJ や STL への変換では、glTF が持っていたものに比例した損失を覚悟してください。アニメーション、リギング、カメラ、ライト、シーンの階層、物理ベースのマテリアルは、どちらにも対応物がなく、STL はさらにテクスチャ座標と色も捨てます。それらの形式を具体的に必要とするとき ── STL なら 3D プリンター、OBJ なら古いモデリングツール ── だけ下位に変換してください。

基本情報

GLTFフォーマットの識別子と出自。
拡張子.gltf
メディアタイプmodel/gltf+json
公開元Khronos Group
初版2015
仕様glTF 2.0

glTF ファイルについてよくある質問

glTF ファイルはどう開けばいいですか

Blender で読み込め、Unity や Unreal、Godot、たいていのモデリングツールも同様です。手早く見るなら Windows の 3D ビューアーや多くのウェブベースのビューアーで直接開けます。ただし .gltf はたいてい隣に .bin とテクスチャファイルが必要です。

glTF と GLB の違いは何ですか

パッケージングです。.gltf は別のバイナリバッファとテクスチャファイルを参照する JSON なので、モデルはフォルダーになります。.glb はそのすべてを一つのバイナリファイルに詰め込みます。中身は同じで、送るなら GLB です。

glTF のモデルがテクスチャなしで表示されるのはなぜですか

テクスチャはパスで参照される別のファイルで、JSON と一緒には移動しません。OBJ を MTL なしで送ってしまうのと同じ失敗です。すべてを一つのファイルに詰め込む GLB を使うか、フォルダーごと送ってください。

glTF と OBJ の違いは何ですか

OBJ はモデリングソフトのための交換形式で、そのマテリアルは 1990 年代初頭のシェーディングモデルを記述します。glTF は配信のための形式で、物理ベースのマテリアル、アニメーション、リギング、シーンの階層を持ち、レンダラーがほぼそのまま使える形に整えられています。

glTF はアニメーションを持てますか

はい。関節とスキニングの重みを持つスケルタルアニメーション、キーフレーム付きの変換、表情のためのモーフターゲット。ウェブで一般的に使われるほかの何もアニメーションを持てません。OBJ、STL、PLY はまったく持ちません。

Draco 圧縮とは何ですか

ジオメトリを圧縮する拡張機能で、しばしば五分の一から十分の一のサイズになります。ウェブでの読み込みにとって大きな意味を持ちます。落とし穴は、それを実装していないビューアーではファイルを開けなくなることです。出口で圧縮し、圧縮していないマスターを残してください。