バーチャル3Dクリエイター神部まゆみです(*^-^*)
この記事はunityのVRMインポートでException: UnityEngine.Texture:Shader_NoneNormal.normal is not converted. っていうエラーが出たのでその解決策についての記事です。
以前もVRMインポートでエラーが出たことがあるけど、UniVRMのバージョンを変えたら直ったことがあるので↓こちらも参考になるかもしれません。
使用したバージョンはunity2022.3.22です。
症状:VRMモデルをインポートしようとしたらエラーが出てインポートできない…
URP用のStarter Assetsをいじろうと思ってVRoid Studioで作った私のモデルをインポートしようとしたら、失敗したのかインポートできませんでした。
↓みたいに謎のファイルと空のフォルダができただけで、モデルがインポートできなかったっぽい。
使ったのは↓のアセットです。
インポート成功するといつもはプレハブができて使えるようになるのだけど、失敗してなんか空のフォルダみたいなのができていた。


コンソールにはこんなエラーが出ていた。


Exception: UnityEngine.Texture:Shader_NoneNormal.normal is not converted.
UniGLTF.TextureExtractor.Extract (VRMShaders.SubAssetKey key, VRMShaders.TextureDescriptor texDesc) (at Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/TextureExtractor.cs:62)
ChatGPTに聞いてみたけど「uniVRMかunityのバージョンを確認しろ」と言われるだけでダメだった。
検索しても出ないし、あまり報告例がないエラーだとダメっぽいか…。
実行した環境
実行した環境を書いておきます。
- unity 2022.3.22(URPプロジェクト)
- Starter Assets: Character Controllers | URP 使用
- uniVRM v.0.124.0
- VRoid Studio v.1.28.2でエクスポートしたVRM 0.0モデル
新しくなったStarter Assets URP をいじっていたらエラーが出ました。




多分URP関係のエラーかな?
でもマテリアルエラーになるなら分かるけど、インポートもできないってあるのかなぁ?
仮説1 : VRM 0.xはURPに対応してないことが問題かも?
VRMの公式ドキュメントを見るとそう書いてあった。






VRM-0.X MTOON の URP 対応はありません
URP 対応状況 | VRM
unlit に fallback します。 import 時に VRM-1.0 にマイグレートすることで、MToon-1.0 の URP 版を使うことを検討してください。
でもVRM 1.0は、インスペクターメニューで変換すればURP用のマテリアルに変換できるみたいなことが書いてあります。
glb と vrm-1.0 inspector から URP Material への差し替えができます。 ただし、export はできません。 VRM セットアップには、builtin material をご利用ください。
URP 対応状況 | VRM
じゃあVRoid StudioでVRM 1.0のモデルとしてエクスポートして、uniVRMも1.0用のやつにすれば行けるかな?
2024/12/17追記:UniVRMのバージョンアップで、VRM0.xのモデルをVRM1.0に変換ロードできるようになったみたいです。




VRM-0.x のモデルを VRM-1.0 に変換ロードできます。UniVRM10_Vrm10
【ダメだった】VRoid StudioでVRM 1.0モデルとしてエクスポート、VRM1.0用のuniVRMにしてやってみる
VRoid StudioでVRM1.0モデルとしてエクスポートします。


2024/07/02現在で最新版のuniVRM v.0.124.0のVRM1.0のやつを入れてやってみます。



これでできるはず……?
いやダメでした(-_-;)
仮説2: uniVRMの不具合か、unityバージョンと相性が悪い?
これまでもVRoidモデルのインポートに失敗することは何度かあったけど、大抵はuniVRMのバージョンを変えたら普通にインポートできた記憶がある。
以前も「Shader error in ‘VRM10/Universal Render Pipeline/MToon10’~」っていうシェーダーエラーが出たことがあるけど、uniVRMのバージョン変えたら直った。
一応対応unityバージョンは書いてあるのだけど、まぁすべてのunityバージョンとuniVRMバージョンでテストしてるわけではないだろうし…。


uniVRMのバージョンを変えてやってみる
今入れているuniVRM v.0.124.0 は消します。そのまま上書きインポートしてもいけるかも?しれないけど一応。
これパッケージマネージャーに出ないのでいつも手動で削除していますが、この三つを削除する。


- UniGLTF
- VRM
- VRMShaders
の三つのフォルダを削除。
もしかしてUPMパッケージなら削除できるのかな?まぁ後でやってみます。
ひとつ前のuniVRM v.0.123.0でやってみます。

これでダメなら110番台に戻してやってみようかな…。
【一応解決?】インポートはできたけど紫色のマテリアルエラーになったΣ(゚Д゚)
あれ、なんかインポートはできたんですがマテリアルエラー?なのか紫色になりました。
インポートできたのはいいけど、uniVRM v.0.124.0とv.0.123.0の間でそんなに変わったのか…?
まぁインポートはできたから、多分uniVRMの問題は解決かな?(;^_^A
これはHDRPの時もなったような…シェーダーが対応していないやつかな。


unlit/Textureシェーダーなら表示されたのでMTOONが対応してないっぽい。
でもインスペクターでマテリアル変換すればいけるとか書いてあったなあ。


或いはすべてのレンダーパイプラインに対応している、UTS2の後継のUnity Toon Shader(UTS3)を使うのも良いかな。

でもその場合はマテリアル作り直しになりそうでめんどくさいので、なんとかできる方法を探してみます。
【解決】モデルのプレハブを開いて、マテリアル設定でRender PipelineをURPにする
これで解決しました。
インポートしたVRM1.0のVRMモデルのファイルを選択、インスペクターのMaterials のところの下にRender Pipelineを選ぶところがあるので、そこでUniversal Render Pipelineを選べばOK。




これでちゃんとURPに対応できた!


ゲーム画面でもちゃんと表示されてました。
おわりに
案外簡単にURP対応できて良かった。
しかしVRM 0.xだと対応してないっぽい?VRM1.0はもう出て結構経つから、そろそろ移行していったほうが良いか…。
また何かあれば追記します(*^-^*)