Unreal Engine 初心者の技術メモ

趣味でUEやってる初心者が日頃学習したり試したこととかを書いてます。最近はVRのロボゲームを作ってます。

【UE4】既存アニメーションを修正する為のコントロールリグを組んでみた話

f:id:pupurigesu:20210524015341p:plain


記事の概要>

 既存のアニメーションを修正して使い回したいのでコントロールリグサンプルを色々触って勉強していたけど、思うように修正できないので、自分なりに既存アニメーション修正に最適化したコントロールリグを組んでみた。

 <目次>

<作業した環境>

 Unreal Engine4.26.1

<やったこととか>

やり始めた理由

ゲーム用にモーションをいくつか欲しいけど、一から作る技術もないので、既存のアニメーションを簡単に修正できないか調べていたら、4.26から既存のアニメーションをコントロールリグで修正できる機能が実装されたらしい。早速、おかず様のブログを参考に既存アニメーションをリグにベークしてみると。。。

f:id:pupurigesu:20210524035542p:plain

おうふ。。。

大量に生成されたキーを見て、瞬時に諦める。これを修正するくらいなら、もう自分で一から作った方が早いすらあるかもしれない。

もうちょっと調べてみると同じようなことをされている方がいてそちらも見た感じやっぱり非常に手間がかかりそう。

<2021.5.26追記>

キーが大量に打たれる問題について、当記事投稿後におかず様から対処策を教えて頂きました!もとのブログ記事にもこのへんのことをわざわざ追記頂けたようです。ありがとうございました!

 

別のアプローチ方法が無いかいろいろ調べてみると、リグの組み方次第で意図することが出来そうだったので今回試してみた。

やりたいこと

今回は大きく以下3点を実現する

(1)コントロールリグを使って既存のアニメーションシーケンスを容易に修正できるようにする

(2)修正はFK、IKを使い分けできるようにし、適用ウェイトも調節できるようにする

(3)IKは「固定位置への追従」と「元アニメーション+オフセット補正位置への追従」と二通りの追従方法を選択できるようにする


できたもの

で、だいたい2週間くらい、時間あるときにPCに張り付いてなんとか出来上がったのがこちら。

時間かかるかもだけど、同じ様に組めば再現可能だと思います。

 <スケルトンメッシュ>

f:id:pupurigesu:20210524123950p:plain

<リグ階層>

f:id:pupurigesu:20210524124309p:plain

<ノード> Graph.png - Google ドライブ

※画像が大きすぎたのでグーグルドライブに入れてます。いつか消すかも

できること

・具体的には以下のことが可能。IKの適用ウェイト等のコントロール設定項目は全て周りにエフェクタとして配置してビューポート内で調整できるようにした。

・後、標準的なヒューマノイドケルトンを使ってるので恐らく使い回しも可。(多分、多少ボーン構造が違っても同じボーン名を使っていれば適用できる?)

<頭、上半身>

→頭FK補正、視線追従(適用ウェイト調整可)

f:id:pupurigesu:20210524133919g:plain

<腕>

→FK補正、IKによる補正・追従(適用ウェイト調整可)

 ※IKのターゲットは「固定位置追従(赤箱エフェクタ)」と「元アニメーション位置追従(青箱エフェクタ)」を切替可

 ※「固定位置追従」は完全に位置固定か体の揺れを同期させるかを調節可能

f:id:pupurigesu:20210524153808g:plain

<手>

→手指開閉・指の横の開き(適用ウェイト調整可)

f:id:pupurigesu:20210524154324g:plain

<足>

→IKによる補正・追従(適用ウェイト調整可)

  ※IKのターゲットは「固定位置追従」と「元アニメーション位置追従」を切替可

f:id:pupurigesu:20210524155011g:plain

アニメーション修正方法

(1)レベルシーケンスを新規作成

f:id:pupurigesu:20210524173814p:plain

(2)作成したシーケンスに使用するスケルタルメッシュを投入

 ※今回はサードパーソンテンプレの標準的なマネキンを使用

f:id:pupurigesu:20210524174554p:plain

(3)続いてシーケンスに使用するアニメーションを投入

f:id:pupurigesu:20210524174956p:plain

(4)スケルタルメッシュにコントロールリグを適用する

f:id:pupurigesu:20210524180010p:plain

(5)リグを使ってアニメーションを修正・キー打ちをする

f:id:pupurigesu:20210524222947p:plain

(6)修正結果をアニメーションシーケンスとして出力

f:id:pupurigesu:20210524223449p:plain

(7)できた

(修正前)

f:id:pupurigesu:20210524224010g:plain

(修正後)

f:id:pupurigesu:20210524223828g:plain

 

このくらいの簡単な修正がUE内で5分程度でできるように!

 

感想

もっといい方法があるかもしれないけど、とりあえず自分の意図することができたので満足。

公式の無料アセットとかmixamoのアニメーションをブレンドしながら今回のリグで修正すればかなりの範囲をカバー出来そう。今後結構使いそうなので、使っていきながらまた改良(地形対応等)していくつもり。

やってて思ったのは同じモデルのリグでも用途に合わせてリグの組み方を変えていく必要があるっぽい。(今回みたいなアニメーション修正用とか、変数を入れてアニメーションブループリント連携用 とか)まぁもともとそういう運用を前提に作られた機能だとは思いますが。

後、やり残したこととしてフルボディIKを使って体の重心を補正(走っている方向に対して体をs自然な感じで傾けるとか)できる様にしたくて結構な時間を使ったけど、結局うまく実装できず今回断念したので、またいつか挑戦したい。

<参考にさせて頂いたサイト・動画> 

Using Control Rig in Unreal Engine - YouTube

→公式のチュートリアル動画(字幕あり)。いくつか見た中ではこれが程よい長さ(37分)でコントロールリグの複数の実例(標準的な足IKセットアップ、多脚IKセットアップ、尻尾IKセットアップ 等)をわかりやすく解説されていた。

 

UE4.26 Control Rig における IK ノードまとめ - ほげたつブログ

→各IKノードの説明を参考にさせてもらいました。

 

UE4.26 Control Rigのおすすめチュートリアル&情報まとめ | TECH ART ONLINEy

→わかりやすいチュートリアル情報とかTwitterの解説投稿とか

 

UE4.26で追加されたControlRigのループ(Looping)を使って、手の開閉を簡単に実装してみる - ぼっちプログラマのメモ

→手の開閉はこちらを参考に実装