ラリルレロ

ラリルレロ

【Unity勉強】9日目:VRoid で作った VRM を VRChat にアップロードして動かす

VRoid で作ったアバターを VRChat で動かしてみたかったのでやり方調べてみました。
最近は VRChat 熱が高まってきた僕です。友達いないので全然慣れてないんですけど!誰か一緒にやりましょう!

動画撮りたかったんだけどまだ良い感じのやり方がわかってないので写真だけ撮りました。

作業メモ

この動画が最高でこれ見ながらやったら簡単にできた。

注意点としては Unity のバージョンは 2017.4.28f1 でやること。 Unity Hub を使うと Unity のバージョンを簡単に管理できて便利。
VRChat SDK は公式から落とす
VRM Converter for VRChat は booth で無料で配布している。とは言えめちゃめちゃありがたいのでお布施しました 🙏

ちょっと困ったこととしては、 VRM Converter によって Convert されてできたオブジェクトの VRC_Avatar Descriptor というコンポーネントの View Position を良い感じの値に変える必要があるんだけど、変えてしばらくたってから見ると元に戻ってしまっていてなぜなんだとなっている…。
変えたあとに save してプロジェクトを再起動しても元に戻ってしまっていてまったくわからない…。
-> これプロジェクト作り直ししたら保存されるようになった。謎すぎた…。

ここからは動画に載ってないことについての話。

Unity 上で Hierarchy に入れた VRM に対して VRM Converter for VRChat で「Duplicate and Convert for VRChat」ってのをするんだけど、その際にデフォルトの設定のままだと僕のアバターの場合は実際に VRChat で動かした時に肩がめちゃめちゃなで肩になってしまった違和感があった。

ググるとこんなツイートがあったので書いてある通りに「肩の高さ」を0.01に変更したら良い感じになった。

次に、髪の毛を重力に合わせて動かしたかったので、やり方を調べた。揺れ物を動かすには Dynamic Bone を入れる必要があるっぽい。
有料のアセットなんだけど買った。

Dynamic Bone の設定のやり方はこの動画が参考になった。

あとはこのブログを見ながら細かい値の調整をした。
Dynamic Boneを使ってVRChatでもVRoidの髪の毛揺らしたい。 - Pikali’s diary

ここまでやったけど実際に動かしてみると、確かに髪の毛は揺れるんだけど髪の毛が顔にめり込んでしまって辛かった。
髪の毛が当たる部分に当たり判定を入れてめり込まないようにする作業が必要っぽい。

Dynamic Bone の中に Dynamic Bone Collider というのがあって、髪の毛をめり込ませたくないオブジェクトのところに空のオブジェクトを作って Dynamic Bone Collider を当てて、それを髪の毛側の Dynamic Bone に渡してお互いを認識させてあげる。
その上でお互いの radius やらの値を調整して良い感じに反発する位置を見つける。これを髪の毛に入っているボーンの数だけやったのでめちゃくちゃ面倒くさかった。これ新しいモデル作るたびにやらなきゃいけないのかなーとか考えるとなかなか辛い気持ちになった。
多分実際はもうちょっと賢いやり方があるはずなので模索していきたい。もしくは知ってる人いたら教えてください 🙏

最後にもう一つ困ったこと。
実際に VRChat で動かしてみると、 Dynamic Bone がなぜか効いていなくてなんでやろと思っていたらパフォーマンス的な問題で Dynamic Bone の制限があったらしい。特定の数を超えている場合は Dynamic Bone が機能しない状態になっているらしく、 VRChat の Safety -> Performance Operation -> Limit Dynamic Bone Usage のチェックを外すと Dynamic Bone が機能した。
ただこれをすると多分 VRChat のパフォーマンスに影響を与えてしまうので、この制限にひっかからないようにモデルを作るのが大事なんだろうな〜と思った。

終わり

VRChat で楽しいことしたいってのがモチベーションになってここにきてさらに勉強熱が高まっているのでどんどんやっていきたい。
次は自作のワールドを VRChat にあげたい。終わり。