Character animation

Additive Animation

加算アニメーション

基準動作に呼吸や反動の差分を重ねる。

9 / 10

Interactive demo

Preparing the demo…

Additive Animation

Drag to orbit, Ctrl/⌘ + scroll to zoom. Use two fingers on touch screens.

This explanation is currently available in Japanese.

ひとことで

基準の姿勢からの「差分だけ」を持つアニメーションを作り、それを別のアニメーションの上に足し合わせる(重ねる)方法です。呼吸、被弾の反動、疲れて肩が落ちる、上体をひねって狙う、といった動きを 1 つずつ作れば、歩き・走り・しゃがみなど、どの基本の動きにも同じように重ねられます。

ゲームでの使いどころ

  • 呼吸・揺れ:立ち止まっているときの呼吸、息切れ、寒さで震える。
  • 被弾・反動:弾が当たった方向にのけぞる、武器を撃った反動。移動中でも、しゃがみ中でも同じ反動を重ねられる。
  • エイムオフセット:上下左右の狙う向きに応じた上体のひねりを重ねる。三人称シューターの基本の仕組みです。
  • 表情・状態:疲れ、けが(足を引きずる)、酔っぱらい、重い荷物を持っている、など状態による姿勢の変化。
  • 細かい演出の追加:歩きのアニメーションに、手に持った物を見る仕草などを重ねる。

しくみ

差分アニメーションの作り方

差分アニメーション DD は、あるアニメーション MM と基準の姿勢 RR(多くは立ち姿勢や、そのアニメーションの最初のフレーム)の、骨ごとの回転の差です。

Di(t)=Ri−1 Mi(t)D_i(t) = R_i^{-1}\,M_i(t)

DD は「基準から、どの骨がどれだけ回るか」だけを表します。例えば呼吸なら、胸と肩が少し持ち上がる回転だけが入っています。

重ね方

基本のアニメーション BB に、重み ww(0〜1、またはそれ以上)を掛けて重ねます。

posei(t)=Bi(t)  slerp(I, Di(t), w)\text{pose}_i(t) = B_i(t)\;\text{slerp}\big(\mathbf{I},\,D_i(t),\,w\big)

I\mathbf{I} は回転なし(単位クォータニオン)です。w=0w = 0 なら基本の動きそのまま、w=1w = 1 で差分を完全に重ね、w=2w = 2 なら差分を 2 倍にして強調できます。

回転を掛ける順序(左から掛けるか右から掛けるか)で、差分を「親の骨から見た向き」で足すか「その骨自身から見た向き」で足すかが変わります。骨の局所座標で足す(右から掛ける)のが一般的です。

実装のポイント

  • 基準の姿勢をそろえる:差分を作るときの基準と、重ねる相手の基本の動きが大きく違うと、結果が不自然になることがあります。基準は立ち姿勢など、どの動きとも近い姿勢にします。
  • レイヤーとマスク:上半身だけに重ねる(ボーンマスク)、腕だけに重ねる、など骨ごとに重みを変えます。エイムオフセットは腰から上だけに重ねるのが普通です。
  • 重みを動かして演出:被弾の反動は、重みを 1 から 0 へ減衰させて一時的に重ねます。呼吸の重みを走ったあとに大きくすると、息切れが表現できます。
  • エイムオフセットは 2 次元のブレンド:上・下・左・右・正面などの差分ポーズを用意し、狙う角度に応じて混ぜてから重ねます。

つまずきやすい点

  • 重ねすぎて体が崩れる:大きな差分を複数重ねると、関節が不自然な角度まで曲がります。重みに上限を設けるか、重ねる骨を分けます。
  • 位置の差分:回転だけでなく位置(腰の上下など)も差分にする場合、基本の動きの位置に足すだけでは、しゃがみ中に腰がさらに下がりすぎる、といった問題が起きます。位置の差分は控えめにします。
  • ループのつなぎ目:呼吸などループする差分は、最初と最後の差分がそろっていないと、ループのたびにがくっと動きます。

デモで試すこと

  1. 左は基本の動きだけ、右は差分を重ねた動きです。右の人物は、呼吸で胸と肩がゆっくり上下しています。
  2. 「被弾させる」を押すと、右の人物だけが上体をのけぞらせます。「基本の動き」を「歩く」「立つ」「しゃがむ」に切り替えても、同じ反動の差分がそのまま重なることを確かめてください。
  3. 黄色の球をドラッグすると、右の人物が上体と頭をひねってそちらを狙います。脚の動きは基本の動きのままです。
  4. 「疲れの重み」を上げると、背中が丸まり頭が下がります。「呼吸の重み」を 3 まで上げると、息切れのように大きく胸が上下します。

References

Unreal Engine IK Rig Solvers ↗

A general reference for this subcategory.