Standard

2020-09-15 20:06:14 +0900 +0900
最終更新 2020/09/15: tags(unity, detail, api, gltf...) (cdaf1eb)

Standard

UnityのデフォルトでGLTF標準のPBRマテリアルとほぼ互換性があります。

UnityのデフォルトGLTFのPBRマテリアル
Albedo カラー/materials/pbrMetallicRoughness/baseColorFactor
Albedo テクスチャ/materials/pbrMetallicRoughness/baseColorTexture
Metallic レベル/materials/pbrMetallicRoughness/metallicFactor
Smoothness レベル1.0f - (/materials/pbrMetallicRoughness/roughnessFactor)
Metallic テクスチャ/materials/pbrMetallicRoughness/metallicRoughnessTexture
法線マップ/materials/normalTexture
バンプスケール/materials/normalTexture/scale
ハイトマップN/A
オクルージョンテクスチャ/materials/occlusionTexture
オクルージョン強度/materials/occlusionTexture/strength
Emission カラー/materials/emissiveFactor
Emission テクスチャ/materials/emissiveTexture
詳細マスクN/A
セカンダリマップN/A
レンダリングモード/materials/alphaMode

UniVRMのマテリアルインポートに関して、roughnessFactor値はMetallicテクスチャにベイクされる。マテリアルエクスポートではsmoothness値はMetallicテクスチャにベイクされる[参照]

Unity と GLTF でテクスチャーの仕様に非互換があるので、 export/import で変換しています。

テクスチャ変換

Standardシェーダーのカラー以外のテクスチャ(Linear)の処理について。

  • ノーマルマップの修正。MToonと共通なので次項で説明します

    • Materialのプロパティ名 _BumpMap で判定します。
    • EditorImport: TextureImporterType.NormalMap
    • RuntimeImport: 法線テクスチャのPack
    • Export: 法線テクスチャのUnpack
    • sRGBとLinearの対応
    • Tangentの対応
  • Metallic, Roughnes, OcclusionMapの変換

    • RGBAチャンネル組み換え
    • Roughness値とSmoothness値の反転
    • sRGBとLinearの対応
    • Importerで変換、Exporterで逆変換

トラブルシューティング

  • ピカピカに反射してしまう。
    • Shaderの種類が Standard (Unityの標準) で metallicsmooth 値が高い状態になっています。 マテリアルのシェーダーを Unlit/UniUnlit にするとテクスチャがそのまま表示できます。

VRM - humanoid 3d avatar format for VR