本ページにはプロモーションが含まれます
AssetUnityVRM

【Unity】UMotion Proを使う

この記事は約4分で読めます。

はじめに

UnityでHumanoidモデルのアニメーションを扱うとき、私は普段BlenderでIKを自作したり、AutoRigを使ってリグを組んでモーションを作成し、それをFBX経由でUnityに持ち込み、最終的にVRMモデルに適用して活用しています。
ただし「モーションを少し修正したい」と思ったときに、わざわざBlenderに戻って編集するのは手間がかかります。そこでVery Animationなども試してみましたが、ちょっとしたモーションを割り込ませて調整しようとすると、結局は該当する全フレームを編集し直さなければならず、効率が良くありませんでした。

「もっと柔軟にモーションを編集できるアセットはないか」と探していたところ、UMotion Proに行きつきました。
UMotion Proには「モーションレイヤー機能」があり、これはAnimatorのレイヤーでモーションをブレンドする仕組みに似ています。この機能を使えば、既存のモーションに後から上書きや補正を加えるような編集が可能になります。

このレイヤー機能に惹かれて、セールのタイミングでUMotion Proを購入しました。結果として、Unity上でのアニメーション調整が格段に楽になり、Blenderに戻る回数も大幅に減らせています。

さよならVRMフォーマット

UMotion Proを購入してから知ったのですが、VRM1.0モデルをUnityにインポートしたものはUMotion Proで直接使えない。どうやら一度 FBXフォーマット にしないと編集できない仕様。※Unityの標準がFBXでもある。

私はこれまでずっと、BlenderからVRMを書き出して → Unityにインポート、アニメーションはBlenderで作ってFBXに書き出し → Unityで再利用
という流れでやっていました。なので「最初からBlenderでFBX書き出してUnityで使えば?」と思うわけです。……私も最初はそう思いました。
ところがBlenderからVRMをFBXに変換する過程で、どう設定を調整しても Unityに持ってきたときに下記の問題が発生して解決できませんでした。
・FaceオブジェクトのBlendShapeが消える
・モデルの法線が微妙に変わる
・BlenderとUnityでアニメーションのモーション差異がでる。
・VRMインスタンスが使えなくなること。結果として スプリングボーンの情報もコライダーの情報も全部消える。あばばばばばっ!

対応

結論、VROIDでベースモデル作成→VRM出力(VRM1.0)→Blenderで編集→VRM出力(VRM1.0)→UnityでインポートしたVRM(VRM1.0)をFBXで出力→UMotionでアニメーションです。
UnityのFBXエキスポートアセットをそのまま使うとこれまたBlendShapeの情報が飛んだり、ボーンの構成がかわったりで、BlenderでFBXエキスポートと結果がかわらんかった。試行錯誤の中、自作FBXエキスポーターを使うことに行きつきました。私用だからな・・・なんでもいいんだ。
使い方:
1・UnityのFBXアセットをインストールする。
2・このスクリプトをAssets/Editor/VrmToFbxExporter.csにコピペ
3・Tools->VRM(VRM1.0)->FBX Exporterを開く

5・HierarchyにドラッグしたVRMをエディタでエキスポートする。

うぉおおん!BlendShape生きてるFBX書き出せるじゃん。

 

UMotion ProでBlendShapeを使えるか確認

ヘッドボーン(J_Bip_C_Head)選択するだけで、BlendShapeにアクセスできます。
なぜか服とか別のところにセットしたカスタムBlendShapeも全部J_Bip_C_Headに集約してるな・・・なんでだ?

揺れ物の対応

VRM1.0のSpring Bone jointやコライダーをVRMから移植。
FBXにしたモデルにVRM1.0インスタンスを追加。Select UIをSpring Boneにして、揺らしたいSpring Bone jointを登録。
ランタイムで揺れるようになる。この状態だとUMotion Proにポーズを読ませることはできIKでコントロールできる。

私はMagica Cloth 2もっているので揺れ物はMagica で対応した

 

Bone Constraintの対応

Bone Constraint は、 Rotation Constraint componentで各ボーンに設定。Blenderで追加したしたボーンが指定したボーンと連動して指定量可動してくれた。その状態でUMotion Proにポーズ読ませボーンを動かして、ここでもConstraintしたボーンは連動して動いてくれた。UMotion ProでもConstraint 設定ができるようだが、使わず。スクリプトでボーン動的に動かして操作するものを作っているのためRotation Constraintに任せている。

 

おわりに

UMotion Proのレイヤー機能使ってみた。既存のアニメーションに追加も上書きもできるのですごい便利ですね。Unity上で途中から途切れなくスムーズにアニメーションが差し込める。Very Animationもう使わんかな・・・どちらにしろタイムラインでキー打つし、ならUMotion Pro一択かなと思います。