glTF 2.0¶
Reference
- Category
Import-Export
- Menu
使用方法¶
glTF™ (GL Transmission Format) は、ウェブやネイティブアプリケーションでの3Dモデルの転送と読み込みに使用されます。 glTFは、3Dモデルの容量や、それらのモデルを解凍してレンダリングするために必要なランタイム処理を削減します。このフォーマットはウェブ上で一般的に使用されており、Unity3D、Unreal Engine 4、Godotなどの様々な3Dエンジンでサポートされています。
このインポーター/エクスポーターは、以下の glTF 2.0 の機能をサポートしています。
Meshes
Materials (Principled BSDF) and Shadeless (Unlit)
Textures
Cameras
Punctual lights (point, spot, and directional)
Extensions (listed below)
Extras (custom properties)
Animation (keyframe, shape key, and skinning)
Meshes¶
glTF の内部構造は、リアルタイムでレンダリングする際にグラフィック チップで一般的に使用されるメモリ バッファを模倣しているため、アセットをデスクトップ、ウェブ、モバイル クライアントに配信し、最小限の処理で迅速に表示することができます。その結果、glTFへのエクスポート時に、四角形やn角形は自動的に三角形に変換されます。不連続なUVやフラットシェードのエッジは、エクスポートによって頂点が分離されるため、glTFではBlenderと比較して頂点数がやや多くなることがあります。同様に、曲線やその他の非メッシュデータは保持されず、エクスポートする前にメッシュに変換しなければなりません。
マテリアル¶
glTFのコアとなるマテリアルシステムは、以下の情報チャネルで metal/rough なPBRワークフローをサポートしています。
Base Color
Metallic
Roughness
Baked Ambient Occlusion
Normal Map (tangent space, +Y up)
Emissive
Some additional material properties or types of materials can be expressed using glTF extensions:
Clearcoat, Clearcoat Roughness, Clearcoat Normal (uses
KHR_materials_clearcoat
)Transmission (uses
KHR_materials_transmission
)"Shadeless" materials (uses
KHR_materials_unlit
)
Imported Materials¶
glTFのマテリアルシステムはBlender独自のマテリアルとは異なります。glTF ファイルがインポートされると、アドオンは Blender ノードのセットを構築して、それぞれの glTF マテリアルを可能な限り忠実に複製します。
インポーターは、Metal/Rough PBR(core glTF)、Spec/Gloss PBR(KHR_materials_pbrSpecularGlossiness
)、Shadeless(KHR_materials_unlit
)マテリアルをサポートしています。
ちなみに
マテリアルのインポート処理の結果を調べることで、glTF にエクスポートできるマテリアル ノードや設定の種類の例を見ることができます。
Exported Materials¶
エクスポータは、Metal/Rough PBR (core glTF) と Shadeless (KHR_materials_unlit
) マテリアルをサポートしています。Blenderマテリアルの中で認識したノードに基づいてglTFマテリアルを構築します。マテリアルのエクスポート処理では、以下に説明する設定を処理します。
注釈
マテリアルで画像テクスチャを使用する場合、glTFではその画像がPNGまたはJPEG形式である必要があります。このアドオンは、他の形式の画像を自動的に変換し、書き出し時間を長くします。
Base Color¶
glTFのベースカラーは、Principled BSDFノード上のBase Color入力を探すことで決定されます。入力が未接続の場合は、入力のデフォルトカラー(未接続ソケットの隣のカラーフィールド)がglTFマテリアルのベースカラーとして使用されます。
Image TextureノードがBase Color入力に接続されていることが判明した場合、その画像がglTFのベースカラーとして使用されます。
メタリックとラフネス¶
これらの値は、Principled BSDFノードから読み込まれます。これらの入力の両方が接続されていない場合、ノードは0.0から1.0の間でそれぞれの値を制御するためのスライダを表示し、これらの値はglTFにコピーされます。
画像を使用する際にglTFは、メタリックの値が青(B
)チャンネル、ラフネスが同じ画像の緑(G
)チャンネルでエンコードされることを期待しています。 もし画像がこの規則に従わない方法で Blender ノードに接続されている場合、アドオンはエクスポート中に画像を正しい形に適合させようとするかもしれません(エクスポート時間が長くなります)。
Blenderのノードツリーでは、Image Textureノードからチャンネルを分離するためにSeparate RGBノードを使用し、緑色(G
)のチャンネルをRoughnessに、青色(B``)のチャンネルをMetallicに接続することが推奨されます。glTF エクスポータは、この配置が glTF 標準に一致していると認識し、エクスポート中にイメージ テクスチャを glTF ファイルに単純にコピーすることができるようになります。
このためのImga Textureノードの Color Space は Non-Color に設定されている必要があります。
Baked Ambient Occlusion¶
glTFは、ベイクされたアンビエントオクルージョンマップを保存することができます。現在のところ、BlenderがこのようなマップをglTFで意図されているのと全く同じ方法で使用するようなノードの配置はありません。しかし、もしエクスポータが glTF Settings
という名前のカスタムノードグループを見つけ、そのノードグループに Occlusion
という名前の入力を見つけると、glTFのオクルージョンマップとして使用するために、そこに添付されているImage Textureを探します。Blenderにはアンビエントオクルージョンを表示する他の方法があるので、この効果をBlenderで表示する必要はありませんが、この方法ではエクスポーターがオクルージョンイメージをglTFに書き込むことができます。これはリアルタイムのglTFビューア、特にレンダリング時にそのようなことを計算するためのパワーに余裕がないプラットフォームでは有用です。
ちなみに
カスタムノードグループを作成する最も簡単な方法は、オクルージョンマップを含む既存のglTFモデル、例えば`water bottle<https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/WaterBottle>`__や他の既存のモデルをインポートすることです。手動で作成したカスタムノードグループを使用することもできます。
glTFは、赤(R
)チャンネルにオクルージョンを格納し、ラフネスやメタリックチャンネルと同じ画像を共有することができます。
ちなみに
Cyclesレンダーエンジンにはベイクパネルがあり、これを使ってアンビエントオクルージョンマップをベイクすることができます。出来上がった画像は保存して、 glTF Settings
ノードに直接接続することができます。
Normal Map¶
glTFでノーマルマップを使用するには、Image Texture ノードのcolor出力をNormal Mapノードのcolor入力に接続し、Normal Mapのnormal出力を Principled BSDF ノードのnormal入力に接続します。このためには、Image Texture ノードの Color Space プロパティが Non-Color に設定されている必要があります。
Normal Mapノードは、現在 glTF でサポートされているノーマルマップの唯一のタイプであるため、Tangent Spaceのデフォルト プロパティのままにしておく必要があります。ノーマルマップの強さは、このノードで調整できます。エクスポータはこれらのノードを直接エクスポートするのではなく、正しい画像を見つけるためにこれらのノードを使用し、Strengthの設定をglTFにコピーします。
ちなみに
Cycles レンダーエンジンにはベイクパネルがあり、法線ベクトルノードの他のほぼすべての配置から接線空間法線マップをベイクするために使用できます。Bake typeをNormalに切り替えます。glTF にこのベイクパネルを使用する場合は、デフォルトのスペース設定(スペース: Tangent、R: +X、G: +Y、B: +Z)を維持してください。結果として得られたベイク画像は、上記のようにNormal Mapノードを使用して保存し、新しいマテリアルに差し込むことができ、正しく書き出すことができます。
Emissive¶
glTFマテリアルに放射マップを含むために、Image Texture ノードをPrincipled BSDF ノードの放射 入力に接続することができます。あるいは、Image Texture ノードをEmissionシェーダーノードに接続し、Add Shader ノードを介して、Principled BSDFノードからのプロパティと組み合わせることもできます。
エミッシブマップがマテリアル内に単独で存在する場合、ベースカラーのデフォルトを黒に、ラフネスのデフォルトを1.0に設定するのがベストです。これにより、他のチャンネルが不要な場合の影響を最小限に抑えることができます。
Clearcoat¶
When the Clearcoat input on the Principled BSDF node has a non-zero default value or
Image Texture node connected, the KHR_materials_clearcoat
glTF extension will be
included in the export. This extension will also include a value or Image Texture
from the Clearcoat Roughness input if available.
If Image Textures are used, glTF requires that the clearcoat values be written to
the red (R
) channel, and Clearcoat Roughness to the green (G
) channel.
If monochrome images are connected, the exporter will remap them to these color channels.
The Clearcoat Normal input accepts the same kinds of inputs as the base Normal input, specifically a tangent-space normal map with +Y up, and a user-defined strength. This input can reuse the same normal map that the base material is using, or can be assigned its own normal map, or can be left disconnected for a smooth coating.
All Image Texture nodes used for clearcoat shading should have their Color Space set to Non-Color.
Transmission¶
When the Transmission input on the Principled BSDF node has a non-zero default value or
Image Texture node connected, the KHR_materials_transmission
glTF extension will be
included in the export. When a texture is used, glTF stores the values in the red (R
) channel.
The Color Space should be set to Non-Color.
Transmission is different from alpha blending, because transmission allows full-strength specular reflections. In glTF, alpha blending is intended to represent physical materials that are partially missing from the specified geometry, such as medical gauze wrap. Transmission is intended to represent physical materials that are solid but allow non-specularly-reflected light to transmit through the material, like glass.
glTF does not offer a separate "Transmission Roughness", but the material's base roughness can be used to blur the transmission, like frosted glass.
ちなみに
Typically the alpha blend mode of a transmissive material should remain "Opaque", the default setting, unless the material only partially covers the specified geometry.
注釈
In real-time engines where transmission is supported, various technical limitations in the engine may determine which parts of the scene are visible through the transmissive surface. In particular, transmissive materials may not be visible behind other transmissive materials. These limitations affect physically-based transmission, but not alpha-blended non-transmissive materials.
警告
Transmission is complex for real-time rendering engines to implement,
and support for the KHR_materials_transmission
glTF extension is not yet widespread.
Double-Sided / Backface Culling¶
正面のみが見えるマテリアルの場合は、Eeveeマテリアルの*Settings*パネルで*Backface Culling*をオンにしてください。他のエンジン(Cycles、Workbench)を使用している場合、一時的にEeveeに切り替えてこの設定を設定した後、元に戻すことができます。
double-sidedマテリアルの場合は、このボックスのチェックを外したままにしておきます。
ブレンドモード¶
ベースカラー入力には、オプションでアルファ値を与えることができます。これらの値が glTF でどのように扱われるかは、選択されているブレンド モードに依存します。
Eevee レンダーエンジンが選択されている場合、各マテリアルにはマテリアル設定パネルのブレンドモードがあります。この設定を使用して、ベースカラーチャンネルからのアルファ値が glTF でどのように扱われるかを定義します。glTF では 3 つの設定がサポートされています。
- Opaque
アルファ値は無視されます。
- Alpha Blend
アルファ値が低いと、背景オブジェクトとの混ざり合いが発生します。
- Alpha Clip
クリップしきい値 設定以下のアルファ値は、マテリアルの一部が全くレンダリングされない原因となります。それ以外の部分はすべて不透明としてレンダリングされます。
注釈
透過(または Alpha Blend モード)は、リアルタイムエンジンがレンダリングするには複雑で、エクスポート後に予期せぬ挙動を示す可能性があることに注意してください。可能であれば、代わりに Alpha Clip モードを使用するか、Opaque ポリゴンを Alpha Blend ポリゴンの 1 つのレイヤーだけの後ろに配置してください。
UVマッピング¶
UV Map ノードと Mapping ノードを任意の Image Texture ノードに接続することで、UV マップの選択と変換の制御が可能になります。
Mappingノードからの設定は、``KHR_texture_transform``という名前のglTF拡張機能を使ってエクスポートされます。上の方にマッピングタイプセレクタがあります。*Point*はエクスポートに推奨されるタイプです。*Texture*と*Vector*もサポートされています。サポートされているオフセットは以下の通りです。
Location - X and Y
Rotation - Z only
Scale - X and Y
*Texture*タイプの場合、XとYの*Scale*は等しくなければなりません(一様なスケーリング)。
ちなみに
これらのノードはオプションです。すべてのglTFリーダーが複数のUVマップやテクスチャ変換をサポートしているわけではありません。
要因¶
任意のイメージ テクスチャ ノードには、オプションで定数の色またはスカラーを乗算することができます。これらは glTF ファイル内に因子として書き込まれ、指定された画像テクスチャに乗算された数値となります。これらは一般的ではありません。
Exporting a Shadeless (Unlit) Material¶
To export an unlit material, mix in a camera ray, and avoid using the Principled BSDF node.
拡張機能¶
コアとなる glTF 2.0 フォーマットは、glTF の拡張子を使用して、追加情報で拡張することができます。これにより、最初の公開時にはユニバーサルではないと考えられていた詳細な情報をファイルフォーマットに保持することができます。すべてのglTFリーダーがすべての拡張子をサポートしているわけではありませんが、かなり一般的なものもあります。
Blender の特定の機能は、これらの拡張機能を介してのみ glTF にエクスポートすることができます。以下の glTF 2.0 拡張モジュール は、このアドオンで直接サポートされています。
Import
KHR_materials_pbrSpecularGlossiness
KHR_lights_punctual
KHR_materials_unlit
KHR_texture_transform
KHR_materials_clearcoat
KHR_mesh_quantization
Export
KHR_draco_mesh_compression
KHR_lights_punctual
KHR_materials_clearcoat
KHR_materials_transmission
KHR_materials_unlit
KHR_texture_transform
Third-party glTF Extensions¶
It is possible for Python developers to add Blender support for additional glTF extensions by writing their own third-party add-on, without modifying this glTF add-on. For more information, see the example on GitHub and if needed, register an extension prefix.
カスタムプロパティ¶
Custom properties are always imported, and will be exported from most objects
if the extras
field on the corresponding object in the glTF file.
Unlike glTF extensions, custom properties (extras) have no defined namespace, and may be used for any user-specific or application-specific purposes.
アニメーション¶
glTFでは、エクスポート時に特定のオブジェクトをターゲットにしたアニメーションを使用して、1つのファイルに複数のアニメーションを作成することができます。アニメーションを確実に含めるには、(a)オブジェクト上でアクティブなActionにするか、(b)シングルストリップのNLAトラックを作成するか、(c)Actionを隠しておくかのいずれかを選択します。
サポート済み
特定の種類のアニメーションのみサポートされています。
キーフレーム (translation, rotation, scale)
シェイプキー
アーマチュア / スキニング
ライトやマテリアルなど、これ以外のプロパティのアニメーションは無視されます。
*NLA Strip animation*は、複数のオブジェクトに対して複数のアクションを同時に再生することで構成されます。My Animation "という名前のNLAストリップ・アニメーションを作成するには、"My Animation "という名前のオブジェクトのNLAトラックに、各オブジェクトを再生するアクションをプッシュします。
オプションが選択されている場合(デフォルトではオン)、NLA Stripアニメーションがエクスポートされます。すべてのglTFアニメーションはNLA Stripアニメーションとしてインポートされます。
このオプションを無効にすると、BlenderのNLAストリップアクションは無視されます。各オブジェクトのアクティブなアクションのみが考慮され、1つのglTFアニメーションにマージされます。
注釈
In order to sample shape key animations controlled by drivers using bone transformations, they must be on a mesh object which is a direct child of the bones' armature.
ファイル形式のバリエーション¶
glTFの仕様では、データが保存されるさまざまな方法を特定しています。インポーターはこれらすべての方法を処理します。エクスポータは、以下の形式のいずれかを選択するようにユーザーに要求します。
glTFバイナリ (.glb
)¶
これにより、すべてのメッシュデータ、イメージテクスチャ、関連する情報を一つのバイナリファイルに詰め込んだ .glb
ファイルが作成されます。
ちなみに
1つのファイルを使用することで、モデルを他のシステムやサービスに簡単に共有したりコピーしたりすることができます。
glTF Separate (.gltf
+ .bin
+ textures)¶
これは全体の構造を記述したJSONテキストベースの .gltf
ファイルと、メッシュとベクトルデータを含む .bin
ファイル、そしてオプションで .gltf
ファイルで参照された画像テクスチャを含む .png`
または .jpg
ファイルを生成します。
ちなみに
別々のファイルを用意しておくと、エクスポートが完了した後、ユーザーが戻ってJSONや画像を編集するのが非常に簡単になります。
注釈
このフォーマットを共有するには、これらの別々のファイルをすべてグループとして共有する必要があることに注意してください。
glTF Embedded (.gltf
)¶
これはJSONテキストベースの .gltf
ファイルを生成し、すべてのメッシュデータと画像データはファイル内で(Base64を使用して)エンコードされます。この形式は、アセットをプレーンテキストのみの接続で共有しなければならない場合に便利です。
警告
これは、利用可能なフォームの中で最も効率が悪いので、必要な場合にのみ使用してください。
プロパティ¶
Import¶
- Pack Images
すべての画像をblendファイルに詰め込みます。
- Shading
インポート時の法線の計算方法です。
- Guess Original Bind Pose
編集モードでのボーン(結果としてスキンメッシュ)のポーズを決定します。オンにすると、逆バインド行列の計算に使われたポーズを推測しようとします。
- Bone Direction
インポーターがボーンチップをどこに配置するかを決定する際に使用するヒューリスティックを変更します。Fortune設定は、不均一なスケーリングを使用しているモデルでは不正確さを引き起こす可能性があることに注意してください。それ以外の場合は、これは純粋に美しいものです。
Export¶
- Format
- Textures
テクスチャファイルを配置するフォルダ。glTFファイルを基準にしています。
- Copyright
モデルの法的権利と条件です。
- Remember Export Settings
エクスポート設定をblendファイルに保存し、次回ファイルを開いたときに呼び出せるようにします。
Include¶
- Selected Objects
選択したオブジェクトのみをエクスポートします。
- カスタムプロパティ
カスタム プロパティを glTF extrasとしてエクスポートします。
- Cameras
カメラをエクスポートします。
- Punctual Lights
ディレクショナルライト、ポイントライト、スポットライトをエクスポートします。KHR_lights_punctual`` glTF 拡張モジュールを使用します。
Transform¶
- Y Up
glTFの規定に沿って、+Yが上でエクスポートします。
Geometry¶
- Apply Modifiers
モディファイア(アーマチュアを除く)をメッシュオブジェクトに適用します。
- UVs
UV(テクスチャ座標)をメッシュでエクスポートします。
- Normals
頂点の法線をメッシュでエクスポートします。
- Tangents
頂点の接線をメッシュでエクスポートします。
- Vertex Colors
頂点カラーをメッシュでエクスポートします。
- マテリアル
マテリアルをエクスポートします。
- Images
画像の出力形式。一般的には損失の少ないPNGが好まれますが、ウェブアプリケーションではファイルサイズが小さいためJPEGの方が好まれるかもしれません。
Compression¶
Google Dracoを使ってメッシュを圧縮します。
- Compression Level
圧縮率が高くなると、エンコードやデコードが遅くなります。
- Quantization Position
値が大きいほど圧縮率が高くなります。
- Normal
値が大きいほど圧縮率が高くなります。
- Texture Coordinates
値が大きいほど圧縮率が高くなります。
- Generic
値が大きいほど圧縮率が高くなります。
アニメーション¶
- Use Current Frame
現在のアニメーションフレームでシーンをエクスポートします。
アニメーション¶
アクティブなアクションとNLAトラックをglTFアニメーションとしてエクスポートします。
- Limit to Playback Range
選択した再生範囲にアニメーションをクリップします。
- Sampling Rate
アニメーションの値を評価する頻度(フレーム数)です。
- Always Sample Animations
すべてのアニメーションにサンプリングを適用します。
- Group by NLA Track
NLAストリップアニメーションをエクスポートするかどうかです。
- Export Deformation Bones Only
変形用のボーンのみをエクスポートします(階層に必要なボーンも含む)。
Shape Keys¶
シェイプキー(モーフターゲット)をエクスポートします。
- Shape Key Normals
シェイプキー(モーフターゲット)を使って頂点法線を書き出します。
- Shape Key Tangents
シェイプキー(モーフターゲット)を使って頂点の接線をエクスポートします。
Skinning¶
スキニング(アーマチュア)データをエクスポートします。
- Include All Bone Influences
4つ以上のジョイント頂点の影響を許可します。多くのビューアでモデルが正しく表示されない場合があります。
Contributing¶
このインポータ/エクスポータは glTF-Blender-IO リポジトリ を通じて開発されており、バグレポートの提出、機能要求の提出、コードの貢献が可能です。
glTF 2.0フォーマット自体の議論や開発はKhronos Groupの `glTF GitHubリポジトリ <https://github.com/KhronosGroup/glTF>`__で行われており、そこでのフィードバックは歓迎されています。