Closed2
URPにVRMアバターを導入する(マテリアルエラーの解決)
環境
- Unity 2021.3.5f1
- URP
- UniVRM v0.102.0
VRMモデルの準備
- くつしたさんこちらのモデルがCC0で配布
https://hub.vroid.com/characters/5271108759876567944/models/9069514665234246177
Unity
- UniVRMをインポート
https://github.com/vrm-c/UniVRM/releases
- 途中出た注意書き
- VRMファイルをインポート(D&Dするだけ)
マテリアルエラーの解決
- VRMをインポートしてprefabを設置しただけの状態(マテリアルエラーが起きている)
- URP対応シェーダーの導入、READMEに従って該当コードの置換
https://github.com/simplestargame/SimpleURPToonLitOutlineExample - 'MaterialFactory' does not contain a constructor that takes 2 argumentsのエラーが出る
→ 同じ現象が発生しているissueがあるので従う
https://github.com/simplestargame/SimpleURPToonLitOutlineExample/issues/1
Assets\UniGLTF\Runtime\UniGLTF\IO\ImporterContext.cs
33行目から("Removing MaterialFallback.FallbackShaders parameter fixed this issue"とのこと、以下は元のコード)
public ImporterContext(
GltfData data,
IReadOnlyDictionary<SubAssetKey, UnityEngine.Object> externalObjectMap = null,
ITextureDeserializer textureDeserializer = null,
IMaterialDescriptorGenerator materialGenerator = null)
{
Data = data;
TextureDescriptorGenerator = new GltfTextureDescriptorGenerator(Data);
MaterialDescriptorGenerator = materialGenerator ?? new GltfMaterialDescriptorGenerator();
ExternalObjectMap = externalObjectMap ?? new Dictionary<SubAssetKey, UnityEngine.Object>();
textureDeserializer = textureDeserializer ?? new UnityTextureDeserializer();
TextureFactory = new TextureFactory(textureDeserializer, ExternalObjectMap
.Where(x => x.Value is Texture)
.ToDictionary(x => x.Key, x => (Texture)x.Value),
Data.MigrationFlags.IsRoughnessTextureValueSquared);
MaterialFactory = new MaterialFactory(ExternalObjectMap
.Where(x => x.Value is Material)
.ToDictionary(x => x.Key, x => (Material)x.Value), MaterialFallback.FallbackShaders);
AnimationClipFactory = new AnimationClipFactory(ExternalObjectMap
.Where(x => x.Value is AnimationClip)
.ToDictionary(x => x.Key, x => (AnimationClip)x.Value));
}
が、解決しない。
→ 一度Assetsから削除して、再度インポートしたのちSceneに配置したら治った。
importerのスクリプトを編集していたので、再度インポートしないと適応されないのは当たり前か..
参考
このスクラップは2023/03/12にクローズされました