どうも初めまして、C-kunです。
A-kun Advent Calendar 2024の3日目です。
はじめに
最近一億年ぶりにVRChatのアバター改変をしました。ModularAvatar便利ですね。おかげでほとんどの衣装がModularAvatarを使っている状態になりました。
しかしながらこの状態、VRMを作成する環境としてどうなのか?と思いました。ArmatureやBoneの設定ができない状態なので、結局手作業で調整することになるのでは...?ここまでくるとその辺も自動化してみたくなります。
調べてみると、VRM Converter for VRChatというものがあるようです。今回はそれについて、使ってみた所感等をメモ程度に書いていきたいと思います。
先に結論を教えて
結論としては、ModularAvatarが入っている状態からVRM出力まではとりあえずツールの力を使って出力するところまではできました。しかし、VRMConverter for VRChatを使ってVRMに変換する際に、一部のメッシュがずれてしまう問題が発生しました。
そのため、今回はツールの出力結果も参考にしながら、UniVRMに標準で備わっている機能でVRMを作成する方法に挑戦します。
ModularAvatar抜きのアバターを作成
まずはアバターのルートオブジェクトで右クリック、ModularAvatarから
ManualBakeAvatarを選択します。
すると、以下のようにアバターが複製されます。
複製されたアバターにはModularAvatar関連のコンポーネントが削除されています。また、アバターの複数のArmatureがある場合は、それらが統合されています。
複製されたアバターの軽量化
VRMファイルを使う際、ほとんどのプラットフォームでファイルサイズの制限があります。そのため、VRMに変換する前のこの段階で不要なGameObjectは削除しておいたり、使用するテクスチャのサイズを圧縮したりするなどはしておいた方がいいでしょう。
参考までに、Clusterでは100MB以下のファイルサイズに収めることが推奨されています。
https://help.cluster.mu/hc/ja/articles/360029465811-%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%82%A2%E3%83%90%E3%82%BF%E3%83%BC%E3%81%AE%E5%88%B6%E9%99%90
アバターをGithubで管理している人も、100MB以上のファイルはアップロードすることができないので、注意が必要です。
VRM Converter for VRChatでVRMファイルへの変換
次に、アバターをVRMに変換します。
まずは一度Unityを閉じ、下記のリンクからVRM Converter for VRChatをVCCに追加します。
前項で複製したアバター(名前に(clone)がついている方のアバター)を選択した状態で、上のVRM0からExport VRM file from VRChat Avatarを選択します。VRMをUnityで扱うために必要なアセットも同時に追加してくれます。
あとは、VRMファイルに保存する各種パラメータを設定します。個人で使う分に関しては、上の表情設定以外は適当でも良いと思います。
最後に、一番下のExport VRM FileでVRMファイルを出力しましょう。
変換が...失敗?
VRM Converter for VRChatは、VRMファイルに変換する際に、以下のような問題が発生しました。素体の位置は正しいものの、服の位置がずれています。
上が変換前、下が変換後です。
変換前のアバターの位置は正しいので、これはVRM Converter for VRChatのなんらかの処理に失敗によるものかもしれません。おそらくですが、UniVRMのVRM0.0対応版の方の処理で失敗しているのではないかと...?詳細は不明ですが、モデルをVRMに変換するところはVRM Converter for VRChatを使わずにUniVRMを使ってやってみる方が良さそうです。いずれにせよ、VRM Converter for VRChatはVRM対応する際にやらなくちゃいけない処理を一括でやってくれているので、自分でVRM対応化するときの参考にするために取っておきましょう。
もしここまでで普通にVRMファイルが出力され、モデルの位置も正しかった人は下記の記事を参考に手順を進めるといいかもしれません。
https://zenn.dev/hitsub/articles/9b6cd40dc1dc8c
VRM0.0でなく、VRM1.0で出力していく理由
現状、VRM1.0に対応しているツールは少ないですが、今後VRM1.0に対応するツールが増えていくことが予想されます。
ちなみにですが、ClusterもVRM1.0に対応しています。
https://note.com/cluster_official/n/n394990adbd1
そこで今回はVRM1.0で出力することにしました。
VRM1.0に対応したUniVRMのインストール
前項でUniVRMのVRM0.0版の処理で失敗していると考えたので、UniVRMのVRM1.0で出力していくことにしました。
次に、VRM1.0に対応したUniVRMをインストールします。
Package ManagerからVRM1.0に対応したUniVRMをインストールします。
Window -> Package Manager から、左上の+ボタンの右の三角ボタンを開き、Add package by git URLを選択します、
以下のURLを入力し、バージョンを指定してインストールします
xにはUniGLTFなどと同じバージョンを指定してください。
以下のようにVRMConsortiumの欄のバージョンが揃っていれば正しいです。
VRM1.0での出力
出力したいアバター(前項で出力・軽量化したアバター)を選択した状態でVRM1 -> Export VRM 1.0を選択します。
Windowが開くので、ファイル名とAuthorを入力し、Exportをクリックします。
VRMファイルの追加、読み込み
出力されたVRMファイルをUnityプロジェクトに追加します。今回はAssets直下に__VRMという名前のフォルダを作成し、その中にVRMファイルを追加しました。
この状態で、VRMファイルをHierarchyにドラッグアンドドロップすると、アバターがシーン上に表示されます。
とりあえず先ほどのような失敗はしていないようです。
VRM0.0モデルをVRM1.0モデルに変換
VRM Converter for VRChatはVRM0.0モデルとして出力されるため、VRM1.0モデルに変換する必要があります。
VRM0.0ファイルを選択し、ModelタブからMigrate To Vrm 1 にチェックを入れて、Applyをクリックします。
Materialの調整
まず、手元にMaterialの参考になるようなアバターがある場合はProjectの中に読み込んでおきます。(この時、前項と同様にVRMファイルを選択した際にModelのタブにMigrate To Vrm が表示されている場合、VRM0.0ファイルなので前項と同じようにVRM1.0へ変換しておいてください。)
次に、Hierarchy上にアバターを追加し、(PrefabではなくVRMファイルを直接展開する)Materialを調整していきます。下記のように左からVRM Converter for VRChatで出力したもの、変換前のアバター、UniVRMのVRM1.0版で出力したもの、Materialの参考となるアバターを並べて編集すると便利です。
MaterialがProject内に展開されていなかった場合、またはMigrate To VrmでVRM0.0から変換した場合、InspectorからExtract Materials And Textures と Extract Meta And Expressionsを選択してTexture、Material情報をVRMファイルから抽出します。
VRM0.0から変換されたモデルのMaterialを変更する際は、下記のように、vrm1のついているフォルダ内のファイルを編集します。
ここからは半分気合です...うぉぉ
まとめ
一旦今回はここまでです。次回は残りの設定を行っていきます。
参考文献