Unity WebGLで動的にインポートしたvrmのShadeがおかしい
環境情報
- UniVRM version:
0.128.1 - Unity version:
Unity-2022.3.42 - OS:
Windows 11 - Build: WebGL
- RenderPipline: URP
バグについて
- バグの内容
Unity URP WebGL環境で、UnityWebRequestを使用して VRM ファイルを読み込む Web サイトを作成しています。
しかし、読み込んだ VRM モデルの ShadeColor の表示が異常です。
画像左:読み込んだモデル(問題が発生している)
画像右:シーン上に配置しておいたモデル(正しく表示されている)
※わかりやすいようにShadeColorを赤に設定しています。
以下のコードを利用してVRMファイルを読み込んでいます:
await Vrm10.LoadBytesAsync( webRequest.downloadHandler.data, awaitCaller: new RuntimeOnlyNoThreadAwaitCaller(), materialGenerator: new UrpVrm10MaterialDescriptorGenerator() );
補足情報 エディター上で動作させた場合、またはシーンに直接配置したモデルでは問題が発生しません。 ファイルインポート時のデータサイズは正常でした。
VertexBuffer のレイアウトが WebGL は違うのかもしれない。
WebGL 環境で Material のランタイムロードをしたときに、 Shader の Variant 解決が正しく動作しないことが原因のようです。
このため、WebGL 環境で URP 版 MToon をランタイムロードしたときに、
- NormalMap が未使用でも、NormalMap を使う Variant になる
- NormalMap に無関係なカラーテクスチャーがアサインされる
という事象が再現しました。 NormalMap 以外のテクスチャーでも発生する可能性があります(目立たないかもしれない)。
v0.128.2 で Vrm10Viewer サンプルでカスタムシェーダーのサンプル実装を提供予定です。
https://vrm.dev/api/material/make_custom_material/
とりえあず 代替 Shader を適用するサンプルを作りました。
TinyMToon の機能を増やすのは v0.128.3 以降の予定です。
https://vrm-c.github.io/UniVRM/