#13 VRM作成アプリケーションを作りたかったがうまくいかなかった
YATTA!駆動開発の第13回。VRMが出力できるアプリケーションをUnityで作りたかったがうまくいかなかった
基本情報
前回:#12 VRM対応アプリケーション
次回:#14 WebXRアプリをMetachromiumを使ってVRゲームにオーバレイする
VRM作成アプリケーション
パーツ切り替えでVRMを出力できるアプリケーションをUniVRMを使って開発しようとしました.が、ランタイムエクスポートが実装できませんでした.
AssetDatabaseを使用していたため
環境
Unity 2018.4
UniVRM 0.57.1
パーツ切り替えによるキャラメイク
Unityで「装備品によって見た目が変わる」を実現する(あるいはコスチューム変更)
のプロジェクトを改造して実験しました.
SkinnedMeshCombinerを使用してVRMに出力できるGameObjectを作成します.
構造
root (humanoid のAnimatorを持つ)
skin (SkindMeshRenderer と Materialを持つ)
このままVRMで出力すると結合後のMeshが出力できませんでした.
AssetDatabaseでassetとして保存することでmeshを出力することができました
AssetDatabase.CreateAsset(r.sharedMesh, savePath + r.sharedMesh.name + ".asset");
が、これだとEditorでしか動かないのでダメだったという話です.
VRMをエクスポート
VRMをスクリプトでエクスポートする
UniVRM0.57.1の
code:cs
void VRMEditorExporter.Export(string path,VRMExportSettings settings)
を使ってエクスポートします.
VRMEditorExporterはEditor向けのエクスポート処理みたいなので
VRMExporter.Exportを使って実装した方が良いとは思います.
そもそもEditor以外で実行できていないので…
出力したモデルをプロトタイプ版 VRMお手軽ポーズで確認してみた
https://gyazo.com/41de54486e5beff9dbac8ae0d9004563
できた!
出来てません。
VRM 1.0
VRM 1.0 はまだ仕様が決定していませんが,たぶんエクスポート処理も変わるみたいです.
code:cs
VrmLib.Model ToModel(UnityEngine.GameObject target)
byte[] ToVrm10(VrmLib.Model model)
https://vrm.dev/dev/univrm-1.xx/api/
あとはランタイムインポート, エクスポートのサンプルも公開されるっぽいです.
https://vrm.dev/dev/univrm-1.xx/use_vrm/
わかりやすい.
3連休で作りたかったんですがAssetDatabaseを使ってしまうと
本来の目的(VRMのランタイムエクスポート)にならないことに気がつくのが遅すぎました.
ひとまずVRMをスクリプトでエクスポートするを更新していきたいと思います。
参考
Unityで「装備品によって見た目が変わる」を実現する(あるいはコスチューム変更)
https://vrm.dev/docs/
https://github.com/vrm-c/UniVRM
次回は#14 WebXRアプリをMetachromiumを使ってVRゲームにオーバレイする
#VRM