GlTF

**glTF** (**GL Transmission Format**) はJSONによって3Dモデルやシーンを表現するフォーマットである。「3DにおけるJPEG」と表現されることもある。Khronos Group 3D Formats Working Groupによって開発され、APIを問わないランタイムアセット配布フォーマットとしてHTML5DevConf 2016において発表された。glTFは3Dシーンを圧縮し、WebGLなどのAPIを利用するアプリケーションの実行時処理を最小化する、効率的で相互運用可能なアセット配布フォーマットとなることを意図している。glTFはまた、3Dコンテンツ作成ツールやサービスのための共通発行フォーマットを定義している。

## 歴史
2012年3月、KhronosはCOLLADAとWebGLの活用に関する構想のための会合を行った。その際にFabrice Robinetが外部のバイナリデータを参照する効率的なJSONフォーマット案の実装を希望した。SIGGRAPH 2012のWebGLミートアップでBrandon JonesとFabrice Robinetによって"WebGL TF" (WebGL Transmissions Format) と題した形式のデモが行われた。

2013年3月には、Google Earth APIのオープンな代替であるCesiumが、「独自のアセット形式を新しく設計する」代わりに、glTFを採用する旨を発表した。

その後の2015年8月10日には、現在は名を変えてOGC Community Standardとなっている3D Tilesが空間データ構造やメタデータ、巨大でヘテロジニアスな3D空間データセットの整形のための記述をglTFに加える形で構築された。

### glTF 1.0
2015年8月19日、glTF 1.0の仕様が公表された。

2016年6月、ジョン・カーマックは以下のように述べている。

SIGGRAPH 2016においてOculusは独自のovrsceneフォーマットとの類似性を根拠にglTFとの親和性を主張した。 

2016年6月、マイクロソフトはglTFの策定に協力するため、Khronos Groupの3D Formats working groupに加入した。

2016年12月、Archilogicは3Dの見取り図をglTFで出入力できる機能をWebベースの3Dモデルエディタに追加した。

### glTF 2.0
2017年3月3日のGDC WebGL/WebVR/glTFミートアップにおいて、MicrosoftがglTF 2.0を採用し、ペイント3DやView 3D、3Dモデル共有サイトのRemix3D、Babylon.js、Officeなどの自社製品で共通のアセットフォーマットとして使用することを発表。フラウンホーファーIGDやペンシルバニア大学の大学院生らと共にglTF 2.0アセットをWebGL、DirectX、Vulkanでレンダリングするデモを行った。同じ場ではSketchfabがglTF 2.0のサポートを発表した。

同じく2017年3月にGoogleは3Dメッシュの圧縮形式であるDracoをglTFに統合させる拡張を発表した。

glTF 2.0はもともとglTF 1.0.1 (後のglTF 1.1) として2016年6月に開発が開始され、それはglTFバリデータの開発中に見つかった、めったに発生しないケース (corner case) を厳密に取り扱うためのバグフィックスリリースだった。折しもフラウンホーファーにより急速に発達した物理ベースレンダリング (PBR) のための拡張が提案されたこともあって、glTF 1.1はAPI中立なPBRを実現すべく以下に挙げられる新機能を加えてglTF 2.0となった: 

* 標準でメタリック・ラフネス、拡張でスペキュラ・発光のモデルに対応したPBRマテリアル。
* 表情アニメーションなどのためのモーフターゲットや差分データ。
* glTF 1.0のバイナリ拡張 (glb) のコア仕様への統合。
* スキーマの微調整、及び曖昧な領域やパフォーマンスのための破壊的変更。トップレベルのプロパティを高速化のためにオブジェクトから配列に変更したことなど。

glTF 2.0は2017年6月5日のWeb3D 2017 Conferenceで正式発表された。

8月3日、SIGGRAPH glTF BOFにおいて、MicrosoftによるMinecraftのglTF出力、AutodeskによるForgeのglTF入力、MozillaとGoogleによるA-Frame上でのglTFアセット表示などのデモが行われた他、Sketchfab上のglTFアセットの数が十万を超えたことが発表された。

On September 6, 2017, Binomial announced plans to make their cross-platform texture compression format an open standard.

2017年9月7日には、Blender はglTF出力プラグインの開発を発表し、2018年9月現在はサードパーティプラグインとして存在している。

2017年9月時点で、Apple Watch Series 3のWebサイト はglTFを使用している。

2018年2月20日、Facebookは自社のプラットフォーム上でglTF 2.0を使ったのベータテストを発表し、レゴの3Dモデルのデモンストレーションを実施した。

2013年以降のはサンタとトナカイのモデルにglTFを用いていた。

Unityにおける出入力対応 や複数エンジンを搭載したビューワーやバリデータの開発も進んでいる。

On March 11, 2018, the Cairo Buddy system team has agreed to support glTF.

2018年6月19日、Oculus Homeはバージョン1.27でglTF2.0に対応した。

### GLB
glbフォーマットはglTFのバイナリ形式であり、テクスチャを外部ファイルを参照することなく同梱することができる。これはの標準フォーマットでもある。

### glTFのロードマップ
2017年6月30日からglTFの次の仕様や拡張、エコシステムについての議論がGitHubにおいてなされている。

## 批判
ベテランのエンジン開発者であるEric Lengyelは、COLLADAやのような既存の3D交換フォーマットと比較して、glTFにおける柔軟性の欠如や設計の貧弱さを批判している。

He points out that glTF lacks many capabilities when it comes to scene structure, material application, skinning, and lighting, as well as an inability to define physical units or a global up direction vector. He further reveals that the animation support in glTF is insufficient for accurately reproducing animations created in most popular modeling software (including Blender, Autodesk 3ds Max, and Autodesk Maya) due to the requirement that time be linear for cubic spline interpolation. Godot Engine lead developer Juan Linietsky also provided harsh criticism and has responded to Lengyel's feature comparison with both agreement and disagreement about the importance of various issues.

## ソフトウェアエコシステム
 Three.js、BabylonJS、Cesium、PEX、xeogl、A-Frameを始めとする多くのオープンソースWebGLエンジンにglTFの読み込み機能が搭載されている。

オープンソースのglTFコンバータも存在し、COLLADA、FBX、OBJからの変換が可能である。Assimp は出力にも対応している。

Blenderをはじめ3ds Max (Verge3Dエクスポーターを使用)、Maya、Modo、ペイント3D、Substance Painterなど様々な3DCG作成ソフトウェアがglTFの出力に対応している。

オープンソースの glTFユーティリティライブラリ は、JavaScript, Node.js, C++, C#, Java, Go, Rust, Haxe, Ada, TypeScriptなどの言語で利用可能である。

3DモデルがglTFの仕様に適合しているかどうかを確認できるオープンソースのglTFバリデータ が公式に提供されている。

glTFの公式GitHubリポジトリでは対応ソフトウェアなどのリストが更新されている。

## 参照

* COLLADA
* 

## 参考文献

## 外部リンク

* 
* 仕様