正確に言えば
(アニメーション初心者が語る)(独断と偏見による)アニメーション大全
になります。
実際はアニメーション入門という名前が正しいのでしょうけど、なんとなく大全のほうがかっこいいので…。
とにかくアニメーション周りはアセットの種類が多いし、テクノロジーも多くて分かりにくい!!(私は)
なので自分の備忘録としてUnreal Engineのアニメーション周りのことを記事にしました。
新しい情報が入ってきたら常に更新していきます。
お約束 | |
---|---|
この記事作成にあたって使用した主なUnreal Engine バージョン | UE5.4.0 (Experimental) |
本日のゴール
アニメーションについてちょっと理解する
アニメーションの全体像のおさらい
まずはUnreal Engineのアニメーションに関する全体像についておさらいしておきましょう。間違いがあったらコメントで教えて下さい。
あと、今回は初心者向けに大雑把に解説しているのでそれはご了承ください。(ゴニョゴニョ)
まず、アニメーションには基本的にスケルタルメッシュが不可欠です。
スケルタルメッシュとは何かといえば、骨(Bone)の情報が格納されたメッシュのことでした。
結果的に、アニメーションシーケンスを適用すれば、スケルタルメッシュを動かすことができます。
そうなんですよ。ゲーム以外だったら、工夫すればアニメーションシーケンスだけでアニメが作れちゃいます。
※作ったことないやつが言うなよというツッコミは禁止
しかし、ゲームだと状況に応じてどのアニメーションを再生するかを決めてやらないといけません。この機能を司るのが、アニメーションブループリント(BP)でした。
例えばジャンプのボタンを押したらジャンプの準備のアニメーションシーケンスを再生し、
空中にいる場合は飛んでるアニメーションシーケンスを再生する、
などという感じです。
コントローラーの入力や、キャラクターの速度、場所などによって再生するアニメーションを変えます。
ポイントとしては、
●スケルトン
●スケルタルメッシュ
●アニメーションシーケンス
●アニメーションBP (※作り方による)はそれぞれのみ対応しており、他のスケルタルメッシュには基本的に適用できないということです。(※適用する手段であるリターゲットについては後述)
また、最近は、GameplayAbilitySystemによってアニメーションを再生するやり方も流行りの一つです。
もちろんアニメーションBPだけでも、すべてのアニメーションの制御はできるのですが、プレイヤーの入力に対するアクションに対してはGASはいろいろな面で優れています。なので最近は
●アニメーションBPは状況に対するアニメーション (空中にいる、水中にいる、待機中)を再生する役目が多く、
●入力に対するアニメーション(ジャンプ、攻撃、防御など)はGASが担っているケースも多いです。
まあここは好みです。
また、走ったりするときは速度によって段々と走っているモーションにしたいと思うのが人情でしょう。つまり、複数のアニメーションを合成して、あるパラメータで合成具合を調整するということをしたいわけです。これをやるのが「ブレンドスペース」です。
ブレンドスペースで、どれくらいどっちを合成するかを制御するのは、だいたいアニメーションBPが管轄することが多いです。
(なので、走るアニメーションはアニメーションBPで制御するべきなのか、GASで制御するべきなのかよく議論になります。)
まだ終わりじゃありません。このままではキャラクターのコリジョンが設定されていないからです。このコリジョンを設定したりするのが、物理アセット(Physics Asset)です。モコモコしているやつです(笑)。
これまで説明してきたのが、UE4から連綿と続くアンリアルエンジンのアニメーション周りの仕組みとなります。
UE5での進化ポイント:ブレンドスペース
先程のブレンドスペースですが、これが非常に変わってきています。3つのアニメーションシーケンス合成みたいなことは以前からできていたのですが、上半身だけの合成、みたいなことができるようになっていますし、ボーンごとにどの程度混ぜるかを調整する機能が追加されてます。(Blend Mask)
結構めんどくさいので、丁寧にいじるかた以外は気にされずにスルーするかなと言うことろはありますけど。
一番大きいポイントとしては、ブレンドスペースというアセットを作らなくてもアニメーションBPの中のノードでブレンドスペースを作ることができるようになった点ですかね。大分使いやすくなった気がします。
アニメーションBPの中でBlendSpaceをつなぎます。なんのパラメータで合成比率を変えるかはこの緑色のところにつなぐ。 |
BlendSpace1Dノードをダブルクリックして、ここにアニメーションシーケンスを放り込めば合成可能。 |
UE5での進化ポイント:アニメーションBP
アニメーションBPはかなり変わりました。
まず前述したGASの台頭により、入力に紐づいたアニメーション制御の座は奪われつつありました。アニメーションBPは廃れるのかと思われましたが、それは杞憂。一回り大きくなって帰ってきたのです。
先ほどもいった、「状況に対するアニメーションの適切な選択」に加え、アニメーションの微修正も担当範囲であるため、どちらかというとこれに集中するような設計になっています。
例えば後述する、「Template Animation BP」は、アニメーションBPが乱立して理由がわからなくなる現状を考えて作られたもので、Templateとなるブループリントでアニメーションの骨子を作っておき、その子となるアニメーションレイヤー側でキャラごとの設定をするという感じです。
進化したのはState Machine(ステートマシーン)という、先ほど申し上げた"状態"によってアニメーションを変えるためのノードになります。この説明だけで多分1記事作れるな…。
新しくなったState Machineの記述 |
参考になるブログ記事を貼り付けておきます。
【UE5】State Alias を使ったアニメーションステートの制御 | トンコツ開発ブログ
Unreal Engineが提供するいろいろなアニメーション機能
さて基本を説明したということで、Unreal Engineが提供する素晴らしい機能を見ていきましょう。
参考:猫でも分かる UE5.0, 5.1 におけるアニメーションの新機能について | CEDEC+KYUSHU 2022
※Experimental(実験的)機能も含まれています。ご注意ください。
なんじゃこりゃ、ワシを殺す気か?
しかも、これで全部説明できたわけではないという恐ろしさ。
これを全部説明するには、あまりに余白が足りないのでできません。
ブログなんだから余白なんて無限大だろいい加減にしろ。
普通に触ったことのない機能めちゃめちゃ多いです。(これプロの人って全部触ってるのかな。)
この中でも私的に使える機能、今後使いたい機能にフォーカスして説明していきます。
Anim Notify
この中では最も基本的な機能になりますかね。
実は標準で使われています。
これです。
これはアニメーションシーケンスを開いたところですが、なんか緑色のマークがありますね。このマークがAnim Notifyで、要するに通知です。
Anim Notifyするたびに実行するブループリントを作成できるので、やれることは無限大ですが、主にやることとしては例えば「足音を鳴らす」ですかね。あとはコンボ攻撃を実装するなどにも使われますね。
44. Anim Notifyによるアニメーションの特定のタイミングで処理をするような独自のロジック | Zenn[ちゃんす]
リターゲット
リターゲットというのは、Unreal Engine歴が長い人なら聞いたことがあるんじゃないかなと思います。
リターゲットとは、とあるスケルトンを持っているスケルタルメッシュに登録されている、アニメーションシーケンスを、別のスケルトンを持っているスケルタルメッシュ用に作り変える機能のことをいいます。
先ほどアニメーションシーケンスとは、Boneをいつどこでどう動かすのかを書いてある手順書であるといいました。この手順書を、別のキャラでそのまま使い回すのは無理があるってものです。(骨の大きさが違ったり、そもそも骨の名称や数が違う場合がある)
そこでアニメーションシーケンスを、別のキャラで使えるように読み替える作業という感じですね。
リターゲットはアニメーションシーケンスを右クリックしてリターゲットするを選べばできます。(以前に比べると格段に簡単なんですけどね)
あの方が動画化していたので、紹介します。
ただリターゲットは、アニメーションシーケンスを変換してそのキャラ用に新しいアニメーションシーケンスを作る作業なので、キャラが多いとどんどんアニメーションシーケンスが増えていきます。これは大変です。
なので、後述のIKリターゲッター / Compatible Skeltonの出番になります。
IKリターゲッター
IKリターゲッターではリターゲットをプレイ中に実行ができます。プレイ中に作成したキャラとかに対してもリターゲットをすることが可能。これで人外のキャラクターですら、人のアクションを使えたりするらしいです(できない場合ももちろんある)。すごい時代になったもんだ…
ただそれなりに負荷がかかるらしく、何百体も同時に起動するのはやめたほうがいいらしいです。
使い方の順序としては、
① IK Rigの作成 (リターゲットの対象と参照先それぞれについて)
② IKリターゲッターの作成
③ IKリターゲッターをアニメーションBPに適用
という順序になります。ちょっとそれぞれが面倒な手順になります。
IKリターゲッターの利点と欠点
【欠点】
IK Rigとリターゲッターアセットの作成が結構めんどくさいです。
【利点】
非常に高い精度のリターゲットが可能。リターゲットの精度を上げたい場合に必要。
IKリターゲッターを使う場合は、アニメーションBP、アニメーションシーケンスの使いまわしが可能。
なので、次に話すCompatible Skeltonをまず試してみて、もっと精度が必要ならこちらのIKリターゲッターを使うことを検討するイメージでいいと思います。
【IK Rigの作り方】
基本的にはおかずさんが解説されているこの動画の通りです。
Lyraには、UE4マネキンからUE5MannyにリターゲットするためのIK Rigがマネキン及びMannyそれぞれで作成済みなので、それを見ながら作成していくことになります。
また、もしも、IKリグを作成したいキャラクターのBoneの名称と構造が全く同じであれば、IK Rigの使いまわしが可能です。
ほとんど販売されているアセットはUE4スケルトンに互換性があると思います。UE4スケルトンのIKリグをコピーしてスケルトンを変更して特にエラーが出なければ使い回せると思います。まずはこれからやってもいいかも。
以下、普通に作る場合についても記載します。
まずIK Rigを作成したいキャラを右クリックして、IK Rigを作成を選択します。
IKリグをいじります。
① Retargeting Rootの選択
左上のBone一覧画面から、Rootを右クリックしてリターゲットルートを設定します。Rootがない場合は…Pelvisとかを指定する...んですかね?
【リターゲッターの作成】
まずリターゲッターを作成します。
IKリグを右クリックして作成も可能なんですが、その場合は今作成したターゲット側のIK Rigではなく、UE5 MannyのIKリグを右クリックして作成します。
Source(ソース)に UE5 MannyのIK Rig (これはLyraのサンプルの中にあります)を設定し、
Targetに今作成したご自分のIK Rigを設定します。何やら下記の案内が出るのでいいえを押しておきます。
こんな感じで両者が重なった状態で表示されるはずです。
その際に、前項④で作成したIK Goalが黄色い四角で表示されていると思います。ここがIKリターゲットで、リターゲットの対象のキャラとUE5Mannyのそれぞれの位置を合わせる目標になるので、両者の手足が重なるように調整していきます。
LeftLegを選択した状態でオフセットを調整する、これをGoal毎に実施する |
これでリターゲッターの作成は終わりです。
【アニメーションBPの作成】
あとはアニメーションBPに反映するだけです。これは簡単。
Retarget Pose from Meshでアセットはさっき作ったリターゲッターを指定するだけ |
Compatible Skelton
アニメーションのアセットを購入してきて、UE5標準あるいはUE4標準のマネキンに適用したアニメーションなのに、なぜか自分のところのマネキンで使おうとしたらリターゲットが必要だった経験ってありませんか?
これはUE5側はこの2つが同じものだ、と判別できる手立てがないからなんですよね。
だったらそういう手立てを作ってしまえよ、となってできたのがこのCompatible Skeltonです。
スケルタルメッシュに登録されている骨(Bone)構造が (ほぼ)同じであれば、同じアニメーションシーケンスを使うことができます。やり方は簡単で、スケルタルメッシュを開いて、このスケルタルメッシュAはこのスケルタルメッシュBとコンパチだよ(互換性があるよ)と設定してあげるだけ。これだけ。
[UE5] Lyra改造計画③ Compatible Skeltonを使い、超速で買ってきたアセットをLyraで使用する
これの良いところは、アニメーションシーケンスが多くならないので、管理が非常に楽になります。ただもちろん悪いところもあって、いくらスケルトンが似ている構造だとしても、若干スケルトンに違いがあったり、肉付きの良さ/悪さでアニメーションが破綻することがまあまああります。
破綻までいかなくても、ちょっと崩れたりとか。銃を構えるアクションではあるキャラではちゃんと収まってるのに、あるキャラでは収まらなくてうーんみたいなことがよくあります。
そこで、アニメーションをちょっとだけ修正したいなぁみたいな需要が生まれるわけです。そこでRigの出番です。
Control Rig / IK Rig / FK Rig
一般的に、動物の骨というのは基本的に関節を使うことで腕や足を曲げることができます。それぞれの関節は曲げられる限界角度だったり、可動域があります。
Rig とは3Dモデルを動かす仕組みのこと。
Control Rigとは 手動で自由自在にモデルを動かすことができるアセットです。ノードを組んで自動で動かすこともできます。自分でアニメーションシーケンスを作ることもできますし、既存のアニメーションシーケンスに重ねることで、Control Rigで動きを修正する、なんてこともできます。また、あるアニメーションシーケンスを「Control Rig Backwards Solve」で解析して、完全にControl Rigだけで弄っていくみたいなことすらできます。おかずさんがおっしゃるように、Control Rigで弄った結果をアニメーションシーケンスに反映する「Linked Animation Sequence」の機能で即時反映をすることができます。
一方でIK Rigとは何でしょう?IKとは「Inverse Kinematics(逆運動学)」の略です。例えば指先の位置から逆算して手首、肘、肩の位置を決める計算のことだと考えてくれればいいです。IK Rigで最も基本的な使い方は、LegIKでしょう。階段とか坂に足がピタッとなるあれ。
イメージとしては、Control Rigは手動で動きをつけるのをメインで、IKはモノや動作に対して最適な関節の位置を(自動的に)定めるというイメージなんですがややこしいことに実はControl RigでもIKを使えます。というか実は標準のMannyなどで既に使われています。
なので、Control Rigは何でも屋、IK Rigは限定された用途に使うと思っていただけばいいかなと思います。それこそLeg IKとかはIK Rig(や後述するFoot Placement)を使ったほうが楽で簡単ですが、標準がControl Rigを使っていることから何か意図を感じてしまいますね。UE5のIK的なアレソレコレドレでも書かれていますが今はIK RigはIKリターゲットのための下準備的な意味合いが強いようです。足を坂にピタッとつけるだけならIK Rigのほうが使いやすいですけど。
要するに、基本的にはControl Rigをつかいましょうということです。
標準のUE5のManny & QuinはControl Rigが有効で、Full Body IKが足に適用されている |
オフにすると段差や坂で足がピタッとしない |
アニメーションBPをチェックするとたしかにControl Rigのノードが挟まってますね。ダブルクリックすると中身を見れますが、なかなかカオスです。
ただしControl Rigには面倒な事が一個あります。Rigを打つ必要があります。(まあIK Rigにしたって要るんですけど)
Rig、つまり動かすポイントは自分で作ります。Pythonを使って半自動化することなども一時期流行りました。
Mannyに対して打たれているRig |
Rigをうつのってやってみればわかりますが、結構大変なんですよ。苦行に近い。
そこでそれを解決するのがUE 5.4から追加された「Modular Control Rig」(ただし実験的機能)なんですね。
Modular Control Rigは人形で決められた関節の情報を持ってきて当て込むだけの簡単実装。
これだけでControl Rigが実行可能になります。UE 5.4でコントロールリグを作成すると選ぶ欄が出てくるのでここで選択するだけです。
Control Rigを作成したら、作成したControl Rigをレベル(どこかのワールド)にドラッグドロップすれば、自在にスケルタルメッシュを動かすことができます。
![]() |
もちろんControl Rigは人型に限りません |
Unreal EngineではControl Rigのサンプルもひっそりと公開中なのでぜひ触ってみてね。上の龍も触れますよ。
ちなみに、我流でControl Rigによる既存のアニメーションの修正をやってみたのですが、アニメーションBPでControl Rigによるアニメーションの修正はあまり現実的ではないかもしれません。
腕だけをControl Rigで修正できた。 |
ただ、私のやりたかったのはこういうことじゃなくて、既存のアニメーションに加える形での効果だったんですよね。もしかしたらできるのかもしれませんが、私の力量では無理でした。
Contextual Animations (加筆予定)
いやいや、モノにたいして動くアニメーションを修正したいというならControl Rigもいいけど僕がいるよ!ということで紹介しておきます。
車に乗ったり、ドアを開いたりするというアニメーションを修正する機能があるらしいです。
(勉強中)
0 件のコメント:
コメントを投稿