噂の glTF PBR Next を試してみるテスト（2022年版）

この記事は[Web グラフィックス Advent Calendar 2021](https://qiita.com/advent-calendar/2021/webgraphics)の18日目の記事です。
「[噂の glTF PBR Next を試してみるテスト（2021年版）](https://qiita.com/cx20/items/b9c77ba65b4bc45903da)」については[こちら](https://qiita.com/cx20/items/b9c77ba65b4bc45903da)を参照下さい。

### はじめに

みなさんは Khronos の [glTF](https://www.khronos.org/gltf/) というフォーマットについてご存じでしょうか？
glTF は <b>GL</b> <b>T</b>ransmission <b>F</b>ormat の略でランタイム用途の 3D アセットの標準仕様を狙った比較的新しいフォーマットです。今年 2022年、国際標準規格 [ISO/IEC 12113](https://www.khronos.org/news/press/khronos-gltf-2.0-released-as-an-iso-iec-international-standard) としてリリースされました。

### glTF の歴史について

少し glTF の歴史について振り返ってみたいと思います。

|登場した年|バージョン|主な内容|
|:---:|:---:|:----|
|2015年|glTF 1.0|glTF 1.0 発表。主に WebGL 向けとして誕生。|
|2017年|glTF 2.0|glTF 2.0 発表。実行環境に依存する仕様(GLSL)を廃止。PBRマテリアルを採用。|
|2018年|glTF 2.0|[Draco圧縮](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_draco_mesh_compression) 拡張が発表。|
|2020年|glTF 2.0|PBR 拡張機能の開発成果（**PBR Next フェーズ１**）として <br>[Clearcoat](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness) / [Transmission](https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_materials_transmission) / [Sheen](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_sheen) 拡張が発表。|
|2020年|glTF 2.0|[Variant](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_variants) 拡張が発表。|
|2021年|glTF 2.0|PBR 拡張機能の開発成果（**PBR Next フェーズ２**）として <br>[IOR](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_ior) / [Volume](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_volume) / [Specular](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness) 拡張が発表。|
|2021年|glTF 2.0|[KTX 2.0 Universal Textures](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_texture_basisu) 拡張が発表。|
|2021年|glTF 2.0|[XMP Metadata](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_xmp_json_ld) 拡張が発表。|
|2022年|glTF 2.0|PBR 拡張機能の開発成果（**PBR Next フェーズ３**）として <br>[Emissive Strength](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_emissive_strength) / [Iridescence](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_iridescence) 拡張が発表。||
|2022年|glTF 2.0|glTF 2.0 の規格が国際標準規格 [ISO/IEC 12113](https://www.khronos.org/news/press/khronos-gltf-2.0-released-as-an-iso-iec-international-standard) としてリリース。|

### PBR Next とは？

PBR Next は glTF 2.0 以降に提案されている新しいマテリアル仕様の総称です。
https://github.com/KhronosGroup/glTF/milestone/2

|拡張名|拡張機能の概要|
|:-----|:-----------------------------|
|[KHR_materials_emissive_strength](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_emissive_strength)|emissiveFactor および emissiveTexture を [0.0,1.0] の範囲を超えて設定できるようにします。|
|[KHR_materials_iridescence](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_iridescence)|シャボン玉、油膜、昆虫の羽などによく見られる相互反射や干渉を可能にする薄い半透明な層を追加します。|

### Emissive Strength 拡張の例

[Babylon.js + EmissiveStrengthTest.gltf result:](https://cx20.github.io/gltf-test/examples/babylonjs/index.html?category=tutorialModels&model=EmissiveStrengthTest&scale=0.3&type=glTF)
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26094/9c791164-42f5-6699-d5d6-33fd08278fec.png)](https://cx20.github.io/gltf-test/examples/babylonjs/index.html?category=tutorialModels&model=EmissiveStrengthTest&scale=0.3&type=glTF)

### Iridescence 拡張の例

[Babylon.js + IridescenceMetallicSpheres.gltf result:](https://cx20.github.io/gltf-test/examples/babylonjs/index.html?category=tutorialModels&model=IridescenceMetallicSpheres&scale=0.1&type=glTF)
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26094/927cbb5f-0a9e-1939-87d4-1b7327ed1692.png)](https://cx20.github.io/gltf-test/examples/babylonjs/index.html?category=tutorialModels&model=IridescenceMetallicSpheres&scale=0.1&type=glTF)


### 次に来る拡張は？

現在、下記の拡張が仕様策定中です。これらは上記 PBR Next と組み合わせて使えることを目標としています。

[https://github.com/KhronosGroup/glTF/tree/main/extensions#in-progress-khronos-and-multi-vendor-extensions-for-gltf-20](https://github.com/KhronosGroup/glTF/tree/main/extensions#in-progress-khronos-and-multi-vendor-extensions-for-gltf-20)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26094/453d1c2a-bec5-667f-eaa2-2dac0658a883.png)


### おわりに

上記のサンプルは、私が趣味で日々更新している [gltf-test](https://github.com/cx20/gltf-test) からの抜粋になります。
glTF をサポートするライブラリも増えています。自分にあったライブラリを探してみるのも良いのではないでしょうか。

### 参考情報

■ glTF Overview（glTF に関する資料はここにまとまっています）
https://www.khronos.org/gltf/
■ glTFミートアップ - glTFのご紹介
https://www.khronos.org/developers/linkto/gltf-gltf-meetup-japan
■ SIGGRAPH 2022 / 3D Formats and glTF: Wat's new in 2022
https://www.khronos.org/assets/uploads/developers/presentations/3D_Formats_and_glTF_-_Whats_new_in_2022.pdf
■ gltf-test （ライブラリ毎の glTF モデルのテストを行っているリポジトリです）
https://github.com/cx20/gltf-test
■ glTF Extension Registry（glTF 拡張の一覧が記載されています）
https://github.com/KhronosGroup/glTF/tree/main/extensions
■ 噂の glTF PBR Next を試してみるテスト（2021年版）
https://qiita.com/cx20/items/b9c77ba65b4bc45903da
■ 噂の glTF PBR Next を試してみるテスト（2020年版）
https://qiita.com/cx20/items/abe100be05a677e51936