はじめに
●やりたいこと
アニメーション作成において、Vroidのモデル用に対してCascadeurでアニメーションを編集(上方向の移動量を変更)→編集したアニメーションをUnreal Engineでのインポートして使いたい時に、上方向(Unreal EngineではZ軸方向)のルートモーションを適応させる操作が該当します。
例として、ルートボーンのZ軸の位置が、左図のようにフロアと同じになっているアニメーションを、右図のようにアニメーションに合わせて移動させるということをします。


●上方向のルートボーンの移動を適応する方法
今回はCascadeurの「Root Constraint」を使用します。「Root Constraint」の詳細については公式のヘルプページを参照ください。
https://cascadeur.com/help/tools/animation_tools/root_constraint
●前提
・Vroidのモデルは、Vroid Studioで作成したモデルをVRM4UプラグインでUnreal Engineにインポートしたものを使用
・Cascadeurにインポートするモデル・編集対象のアニメーションは上記のモデルを適応したものを使用します
※Cascadeurにモデルを表示させるため、Unreal EngineのAnimSequenceにてPreviewMeshにVroidのSkeletal Meshを適応した状態でExportします(Export設定でExport Preview Meshにチェック)

●検証バージョン
・Unreal Engine: 5.5.2
・Cascadeur: 2024.3.1 (Indie License)
※2025/2現在では、無料のライセンスではFBXの出力ができないのでご注意ください
・Vroid Studio: 2.0.2
・VRM4Uプラグイン: 20250103
Cascadeurでの操作
●インポート~アニメーション編集
インポート、リグ作成の操作詳細の説明は割愛します。
・以下画像の通りにインポートの設定をして、Unreal EngineからExportしたAnimationSequenceのFBXファイルを指定
・Rig Mode(インポートした時に自動で開きますが、設定し忘れてもメニューバーのRigModeで再度開けます)のQuickRigToolにて編集に必要なボーンを選択してリグを作成
その後、AutoPosing等で上方向(CascadeurではY軸方向)に移動するように編集します。元のアニメーションが上方向に移動する、かつ、移動量を変える必要がなければ何もしなくてOKです。

●Root Constraintを追加
公式の説明にもあるようにRigの移動をルートに反映させるためRoot Constraintを追加します。
追加の方法はメニューバーからRig Modeを選択して、アウトライナーのRoot(Joint)とRigElement_J_Bip_C_Hips(Rig Element)を指定した後、Main actionsのRoot ConstraintのAddをクリック
※RigElement_J_Bip_C_HipsはQuickRiggingToolで「J_Bip_C_Hips」を指定した時に作成されます。ボーン名を変更した場合は、変更した名前になっているかと思います。


●Root Constraintの追加
アウトライナーで上記で追加したRoot Constraint(他に作成していなければroot_constraint(0))について、以下の通りに設定します(constraintが対象なので、後で編集でも問題ないと思います)
・「Follow on Y Axis」:Unreal Engineで使用するときにルートが上方向に動くようにするためTrue
・「Follow on Rotation」:ルートは回転させたくないのでFalse (Trueにすると今回の場合ではConstraint作成時に指定したRigの回転が適応されると思います)
・「Root position offset zeroed」:Yの値を設定
値に関しては、アニメーションに依りますが”0″または”0未満”が良いかと思います。
※0より大きいと、Rootの位置がJ_Bip_C_Hipsの位置に近づくことになります。そのため、Unreal Engineで再生した時に、ほとんどの場合はメッシュが地面に埋まると思います。
個人的な所感ですが、”0″ or “0未満”にするかは以下の基準で値を決めたらよいかと思いました。なお、Root Constraintは全フレームに適応されるので、フレームごとでの調整はできなかったです。
【0にする場合】
・終盤のフレームでRootの上方向の位置が0に近い場合
→0より大きいほど、Unreal Engineで再生した時に、該当箇所でメッシュが地面に埋まります。
・終盤のフレームでRootの上方向の位置が0より大きくても、アニメーションの方で調整できる場合
→内容としては、最後の方を再生しない、または、Unreal EngineのBlend Outの長さ・カーブで目立たないように調整する、などで目立たないようにできる場合が該当します。
【0未満にする場合】
・終盤のフレームでRootの上方向の位置が、0より大きい、かつ、アニメーションで調整しずらい場合
・Unreal Engineで使用するときに、コリジョンとメッシュの位置が多少離れていても問題ない場合
→Unreal Engineにおいて、空中にいる時の「Root」と「Root」以外のZ軸位置の差が大きくなるので、「Root」基準で当たり判定を付けている場合は影響を受けます。

操作前後ではRootの移動が左図から中央の図 or 右図の通り、上方向にも移動するようになると思います。
・左図:Root Constraint適応前
・中央図:Root Constraint適応後(「Root position offset zeroed」のY = 0)
・右図:Root Constraint適応後(「Root position offset zeroed」のY = -15)
※右図については、中央の図の終盤のフレーム(中央の図の左端が該当)で、Rootの位置が地面より上になっているので、Y軸方向を調整したものになります。



上記が全て完了したら、FBXファイルを出力します。設定は特に変えなくてよいと思います。

Unreal Engineでの操作
●FBXのインポート~Anim Sequenceの設定
Cascadeurから出力したFBXファイルをインポートします。
インポートの設定はデフォルトのままで問題ないです。今回はVRMのモデルがUnreal Engineに存在する状態なので、スケルトンをVRMのアセットにしてアニメーションのみインポートした方が不要なアセットが作成されないです。
今回はルートモーションの移動を適応する想定なので、インポートしたAnim SequenceについてEnable Root MotionをTrueにします。
※Cascadeurの設定が上記と違っても、Animationエディタ上では問題なく再生されるようには見えるので、AnimationエディタでRootを選択して位置・回転を確認したり、ランタイムで確認することをお勧めします。
●Movement Modeの設定
公式のルートモーションに記載がある通り、ルートモーションを適応している場合は重力が適応されるので、Z軸方向への移動が発生しないようになっています。
そのため重力の影響を受けないようにするためMovement ModeをFlyingに変更します。
※ずっとFlyingにすると不都合がある場合が多いと思いますので、Anim Notify StateなどでMovement Modeを変更できるようにした方が良いかと思います。
●気を付けた方がよいこと
不具合ではないですが、ルートをZ軸方向に移動させた場合に気を付けた方が良いかと思ったことです。
・カメラコンポーネントがあるアクタの場合、カメラも動くので、Z軸の移動量が大きい or 動きが速いアニメーションの場合は、カメラの垂直方向の移動は小さくした方が良いかと思いました(連続で動くと酔いそうになるので)
・空中でアニメーションを開始する場合、Z軸が一番下の位置になる前にMovement Modeを切り替える必要がある(空中で止まった状態になるため)
さいごに
CascadeurにはVRoidのモデル(Epic標準のスケルトンのボーン構造ではない)を使用することは少ないと思いますので、ニッチな内容ですが参考になれば幸いです。

コメント