ホーム < ゲームつくろー! < IKD備忘録

Spine
SpineのIKでキャラクタに足付きを

(2015. 3. 15)


 Spineで簡単なスプライトパーツベースのアニメーションを付ける事は出来ました。ただ、多関節な生物やロボットなどのモーションを付ける時に一つ一つのボーンの姿勢を都度調節して行くのはさすがに骨が折れます。そこで登場するのが「IK(Inverse Kinematics)」。これはSpine Professional版に搭載されている機能で、多関節なボーンの先端が特定のゴールに向くよう関節の角度を自動的に調節してくれます。効果的に使えば非常に説得力のあるアニメーションになります。

 説得力の有無で言えば、キャラクタが地面を踏みしめる「足付き」は、足の裏が地面にくっついていればいる程説得力が増します。これはFK(Forward Kinematics)だと限界があります。どうしても足の裏がするする〜っと滑るんです。でもIKがあると「ぐいっ!」っと地面を踏んでくれます。そんなIK、やってみます。



@ 多関節なキャラクタを用意

 IKを組み込むには多関節なキャラクタが必要です。テスト用に適当なのを作りました:

rootが原点にあり、体(body)の真ん中に小さなボーン(body)が一つ仕込んであります。そして、bodyボーンの子として前足(左の方)と後ろ足(右の方)にボーンを繋げています。この段階ではボーンを仕込んだだけなのでもちろん足付き等は起こりません。


A IKを仕込んでみよう

 では上の前足にIKを仕込んでみましょう。まず最初にゴールとなる「IKポイント」を設置します。これは通常root直下の新規のボーンになります。そうする事でrootが動いた時にIKポイントも一緒に付いてきてくれます。ボーンの追加は、左下にある[Tools]ツールの[Create]を選択、親であるrootボーンを選択した後に、ゴールとしたい位置をクリックします:

次にこのゴールに向いて欲しいボーンの連結を選択します。上のarm_ik_pointは前足の先ではなくて手首の先のIKポイントとするつもりでいます。そこで、次のように腕の2つの骨を選択します:

複数のボーンを選択するにはCtrlを押しながら左クリックです。あと、とっても大切な事として、Spineでは「一つのIKポイントで制御できる骨は2連結まで」です。3つ以上選択するとIKを作る時に警告が出て作成できません。

 この状態でTreeウィンドウに目を移します。Treeウィンドウの一番最下層に[Constrains]というのがありますね。これをクリックするとTreeウィンドウの下に[New IK Constraint]ボタンが出現します:

これをクリックすると[Nwe IK Constraint: Choose Target(ターゲットを選んでね)]と大きな文字が作業ウィンドウに出ます。このターゲットは先程設置したarm_ik_pointなので、それをポチっとクリックすると[Enter a name to create a new constraint]というウィンドウが出てIKポイントの名前を付けるよう促されます。区別できるようにarm_ikと名付けました:

[OK]をクリックすると2つの骨はもうIKし出します!そしてTreeウィンドウのConstraints野中に今作成したIKポイントが追加されます:

 さて、ではこのIKポイントを動かしてみましょう!えい!

やった、ちゃんと付いてきます!あ、でも、関節が逆〜〜(涙)。前足なので、本当は逆くの字になって欲しいのに。はい、実はこれ、ちゃんと「曲がる方向」を指定できます。TreeウィンドウにあるConstraints内の[arm_ik]をクリックすると、下にプロパティが出てきます:

ここにある[Bend]は曲がる方向を表しています。Positiveにチェックが付いている場合、折れ曲がっている方向に素直に曲がろうとします。ボーンの連結が「く」の字なら、「く」が畳むようにボーンが動きます。このチェックを外すと[く]が開く方向に曲がります。上の前足が逆方向に曲がってしまったのは、初期姿勢が僅かに逆くの字になっていたからなんですね。なので、Positiveチェックを外せば逆くの字になってくれます:

いえい(^-^)v。

 さて、上の絵を見てわかるように、腕の部分はIKしてくれるようになりましたが、手の甲に当たる部分は特にIKするわけではないので、例えばこのまま地面にIKポイントを置いても手先は適当なままです。願わくば地面に手が付いた時には手先もペタンと地面に付いて欲しいですよね。その為には手先のボーン(hand)が従うIKを追加します

手先のボーンだけを選択しIK(hand_ik)を上の位置に追加します。丁度ペタンと手を付いた時の厚み分だけ上にオフセットしている感じ。ついでに手首のIK(arm_ik)も同じ高さに揃えておきましょう。

 さて、これで本体(body)を動かしても前足は地面にぺたっとくっつき続けるはず。やってみましょう。bodyボーンを地面方向に動かしてみます:

微妙(笑)。はい、これは手首のIKポイントがちょっと地面にもぐっているんですね。なので上方向に調整すれば直ります:

改善しました(^-^)。同じようなIKを後ろ足にも追加したら、ANIMATIONモードに移行です。



B ぴょーん!

 ANIMATIONモードでモーションを作ります。IKを使った足付きを体感するという事で、ジャンプするモーションにしましょう。関節を一つ一つ動かすFKだとかなり大変ですが、IKを仕込んであるのでかなり楽に出来ます。

 動かすのは体に入れてあるbodyボーンです。0フレーム目で待機姿勢にしておき、5フレーム目辺りでグッと沈みこませます。これはbodyボーンの位置を下にするだけ。次に10フレームを使って最高点までジャンプ(15フレーム目)。次の10フレームで地面に着地(25フレーム)。最後5フレーム目で待機姿勢に戻すようなキーフレームを打ち込みます。これらが主要キーフレームになります。ただ、ジャンプの場合、飛んだ時には最高点に向かうにつれて遅くなりますし、最高点から落下する時には地面に近付くにつれて速くしないと違和感が出てしまいます。適切に割って微調整しましょう。で、bodyボーンだけにモーションを付けた結果は以下の通り:

ぴょーん!ちゃんと両足が曲がってジャンプ、空中ではIKポイントに向くように足を伸ばし、着地したらちゃんとまた足を曲げる。いい感じです(^-^)。

 このように、IKを使うと説得力のあるアニメーションを付ける事が随分と楽に出来るようになります。と言っても、んじゃIKでサクサク歩かせられるのかというと、そんな甘い事は無くて、IKでも歩いたり走ったりという動作を付けるのはやっぱり苦労するのです。やればやるほど、デザイナさんって本当に凄いねぇと感心です(^-^;