MeshBakerを活用してVRoidをUnityモバイル用に使う

VRoidはだれでもスムーズに理想の3Dモデルを作成できる素晴らしいツールだ。しかし、モバイル用に使うためには、ひと手間必要なときもあるので備忘録として残しておく。

VRoidで生成したVRMデータをUnityのモバイルゲームで使うのはきつい時がある

VRoidで作成したモデルは、VRoidでVRMに変換して、更にUniVRMでUnityで使える形式に変換してUnityで使うことができる。しかし、これをAndroidやiOSのゲーム用に利用しようと思うと場合によっては重すぎて使えないことがある。

例えば、普通にUnityにVRoidで作成したモデルをインポートしてみると、SetPass callsは50を越えるぐらいだが、Batchesが100を余裕で越える。

この数値は、私の経験からすると、単体で軽い動作ならモバイルでも動くぐらいだと思う。しかし、数体VRoidモデルをカメラに収まる範囲内に配置して、その他オブジェクトを配置して、それなりの動きを求めるならFPSが30を下回るのは間違いない。

難しいかもしれないが、ゲーム全体でBatchesとSetPass callsが100ぐらいか、それ以下になるようにしたい。そうすれば(プログラムに関する話を抜きにすれば)、iOSのほとんどの端末でストレスなく動作し、Android端末の5割以上はスムーズに動くアプリが作れると思う。

VRoidを軽くするためにはMeshBakerを使う

この問題点はMeshBakerを使うことで解決できる。MeshBakerの使い方は、多くの方がブログなどで解説されているので問題ないように思える。しかし、私個人が遭遇した問題や情報不足に感じた点が多々あった。それで、VRoidデータをUnityで軽く利用するためにMeshBakerをどのように使うのか記しておきたいと思う。

以下使い方の注意点

  • ゲーム製作用の使い方であり、VRChatの利用などには試していないので不都合が生じる場合がある。
  • PCのスペックに従ってMeshBakerでMeshを合成するのに1体あたり数十分かかることがある。
  • モバイル向けの使い方であり、その他の環境では最善ではないかもしれない。
  • MeshBakerは有料版。

上記をご留意の上、使い方を参照していただきたい。

VRoid+Unity+MeshBakerの使い方

まず、VRoidでモデルを作成。次に、VRMデータとしてエクスポート。

VRoidでエクスポートしたVRMデータをUnityにインポート

  1. UniVRMをUnityにインポート。
  2. VRMデータをUnityにドラッグアンドドロップ。

表情の切り替えに関してMeshBakerを改造

  1. 下記ツイートにあるように MB3_MeshCombinerSimpleData.csの1507行目の「+ blend…ID」までを削除する

Blendshapeといって表情の変化を司るプロパティがある。MeshBakerでMesh合成するときに勝手に番号が振られてしまい、Blendshapeの変数を呼ぶときにプログラムを一々書き換える必要が生じてしまう。そのため、この作業が必要となる。

MeshBakerでMeshとTextureを合成

  • Windows10 64bit
  • Unity 2019.1.14f1
  • MeshBaker 3.28.1

上記の環境で下記の通りMeshBakerを使うと、Meshの合成に成功する。

  1. UniVRMでインポートしたときに生成されたPrefabをシーンに配置
  2. Unityのウィンドウバーから、GameObject > CreateOther > MeshBaker > TextureBaker and MultiMeshBakerを選択
  3. シーンに生成された “TextureBaker(0)”を選択し、Inspectorから”Open Tools For Adding Objects”ボタンを選択
  4. ウィンドウが表示される。Then Group Byの”OutOfBoudsUVs”をNoneとする。
  5. “Select Folder For Combined Material Assets”ボタンを選択し、生成するMaterialとMeshの配置箇所を指定
  6. “List Shaders In Scene”ボタンを選択する(検索に数分かかるかも)
  7. “Generate Baker”ボタンを押してウィンドウを閉じる(時間がかかる。辛抱する)
  8. シーン上に”MeshBaker-VRM-MToon-LM-1″なるGameObjectが生成されているはずなので、それを選択する。
  9. Inspectorの”Multiple Combined Material”のチェックを外す。(忘れるとエラーがでる)
  10. Inspectorの”Include Blend Shapes”にチェックをいれる。(忘れると表情が動かない)
  11. InspectorのRendererを”Skinned Mesh Renderer”とする。(忘れるとアニメーションが働かない)
  12. 9と10と11を忘れていないか確認して、”Bake Materials Into Combined Material”ボタンを選択。(時間がかかる)
  13. 空のGameObjectをシーン上に作成し、それをAssetsフォルダーにドラッグアンドドロップして空のPrefabをつくる。
  14. “MeshBaker-VRM-MToon-LM-1” の子GameObjectの”MeshBaker”を選択。
  15. InspectorのOutputを”Bake Into Prefab”とする。
  16. InspectorのCombined Mesh Prefabに、13で作成したPrefabをAssetsフォルダーよりドラッグアンドドロップ。(間違えるとPrefab化に失敗する)
  17. InspectorのBakeボタンを選択。

MeshBakerを使った後

MeshBakerでMeshを合成すると見事 Batchesが 7、そして SetPass callsが 7 となった。

ご覧の通り残念ながら完璧にMeshを合成して元通りとはならない。髪の毛が白くなったり手や足先の色だけおかしくなったりすることがある。その際は、合成されたTextureを塗ったりユニティちゃんトゥーンシェーダーを使ったりすることで解決できる。 また、UniVRMに付属している便利なプロパティも移行させる必要がある。その点の詳細は、 必要であれば加筆するかもしれない。

リンク

共有する

このエントリーをはてなブックマークに追加

コメントをする

メールアドレスが公開されることはありません。
*のついている項目は必須です。


*