スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
新しい記事を書く事で広告が消せます。
Rigging & CharacterSetup #3 IK/FKについて
突発連載チュートリアル第三回
目次はこちら
(連載物です。前の記事を読んでからのほうが分かりやすいと思われます)
さて、ここからは具体的な説明に入っていきます。
今回はIK/FKについて。
聞いたことがある人も多いとは思いますが、しっかり理解できてますか?
Jointについて
IK/FKの前に、まずはJointについて簡単に説明しましょう。
Jointとは、モデルを動かすための関節のことです。
モデルにジョイントを組み入れてやり、そのジョイントを動かしてやることで、モデルがジョイントにくっついて動くわけですね。
また、ジョイントの一連の流れをジョイント・チェーン、ジョイント・チェーンが組み合わさって一体分の骨となったものをスケルトンと言ったりするようです。
まぁ適当に覚えておけば良いかと。

Jointの制御
ジョイントを動かす際には、通常Rotate(回転)Toolを使用します。
ジョイント=関節ですから、関節を中心に骨を回転させることで、骨の動きを作ってやるわけですね。
ところが、ここらへんでIK/FKという概念が登場してきます。
FKについて
ジョイントの一連の流れ(ジョイント・チェーン)を動かすとします。
例えば、腕の骨を動かすと考えましょう。
肩の骨があり、上腕の骨があり、下腕の骨があります。(手首から先は考えないことにします)
腕を水平にし、さらに肘を90度曲げる場合、どうすれば良いでしょうか。

答えは簡単。
まず肩のジョイントを選択して90度Rotate、次に肘のジョイントを選択して90度Rotateさせてやれば良いのです。

これがFK(ForwardKinematics)です。
つまりFKとは・・・
Foward(前向きの)Kinematics(運動)ですから、根元の運動(回転)が前(先)へ向かって働きかけるものです。
上の例で言えば、肩(根元)→肘(先)という順番で回転が継承されていくわけですね。
ジョイント制御の最も基本的で分かりやすい働き方がFKというわけです。
IKについて
別のパターンを考えてみましょう。
まずは新しく腕の骨を作ってください。
その際に、肘の骨は少し曲げた状態でお願いします。(これは後で説明します)
さて、腕の骨があって、机の角に手首を当てたいとします。

これをFKでやろうとすると、えらい面倒です。
肩の関節と肘の関節をどれくらい動かせばぴったりと手首のジョイントが机の角にくっつくか・・・?
そんなん分かりませんし、試行錯誤して位置を合わせるのはものすごい時間の無駄です。
そこで登場するのがIKという手法です。
IKhandleを使ってみる
AnimationメニューセットのSkelton→IK Handle Toolを選択します。

次に、IKを適用したい部分の根元のジョイント→先端のジョイントの順番に選択します。(今回は肩関節→手首関節)

①→②の順番に選択。
すると肩ジョイントと手首ジョイントの間にIKhandleが作られ、手首部分で制御できるようになります。

このハンドルをMoveToolで移動させてやると、なんと勝手に肘の位置が変わってくれるのです。

先端のジョイント(この場合は手首)を動かしてやるだけで勝手に中間のジョイントの角度を補完してくれるのがIK(InverseKinematics)です。
つまりIKとは・・・
Inverse(逆向きの)Kinematics(運動)ですから、先端の運動(移動)が逆(根元)へ向かって働きかけるものです。
上の例で言えば、手首(先端)→肘(真中)→肩(根元)という順番で回転が補間されていくわけですね。
FKが回転の先端への継承であるのとは逆に、IKは先端の移動から回転を自動計算してくれる優れものなのです。
FKとIKの使い分け
一見するととても便利なIKですが、難点もあります。
それは「自動補間だと想定外の動きをすることがある」ということです。
手首の位置を決めて動かしたい時は便利ですが、腕をぶらぶら振りたいという時には手首の位置でブラブラ感を出さなきゃいけないので不便です。
(試しにIKのTranslateにKeyを打ってみると分かると思います)
その点、FKでブラブラ感を出したい時には、肩の関節のRotateに適当にキーを打つだけなので楽チンです。
(IKhandleを削除してから試してみてください)
このように、FKとIKにはそれぞれ向き不向きがあります。
そこらへんを考慮して、自分の作りたいアニメーションに果たしてIKが必要か、それともFKだけで十分制御できるのかを見極める必要があります。
また、IKhandleのアトリビュートの一つ、IkBlendの値を調整することでIKとFKを混在させることも出来ます。
(IkBlendを0にすることで、IKhandleの影響を無くし、FKでジョイントを制御することができるようになります)
ここらへんをよく理解・考慮して、Riggingの計画を立てるようにしましょう。
おまけ:IKハンドルを入れる時に肘を曲げる理由は?
IKhandleを組み入れる際に、新しく肘を曲げた状態のジョイントチェーンを作ってもらいました。
これは、肘の優先角をあらかじめ設定する必要があるからです。
上の例では肘を内向きに曲げているため、IKで手首を移動させるとそのまま肘が上に向いた状態で曲がっています。
外向きに曲げた状態でIKを組めば、肘が下を向いた状態で曲がります。
つまり、最初に曲がっている向きが自動補間の際に参照される優先角なのですね。(ちなみに、全く肘が曲がっていない状態の骨にIKを入れると、どちらに肘を曲げればいいのか分からないため、IKが上手く作用しません)
この優先角はPreferredAngleと呼ばれ、Skelton→SetPreferredAngleで設定しなおすことができます。

ジョイント・チェーンを選択した状態でセットすると、チェーン内の全てのジョイントの優先角が再設定されます。
優先角を設定していないために補間の向きが変なことになる場合がよくあるので、IKを使う際は優先角をちゃんと考えて骨を組むようにしましょう。
まとめ
というわけで、FKとIKの説明をしてみました。
FK/IKは基礎の基礎です。
概念としての理解と、実際に使用してみての理解と、双方がしっかりできていないと中々Riggingをモノにするのは難しいです。
この記事やネット上のチュートリアル・説明などを参考にしつつ、色々試してみて欲しいと思います。
次回予告
次は、IKのようでIKじゃない(?)IkSplineHandleについて説明します。
早ければ明日、明日が無理なら一気に飛んで来週土曜か日曜あたりの更新になると思われます。
がんばっていきましょう。
目次はこちら
目次はこちら
(連載物です。前の記事を読んでからのほうが分かりやすいと思われます)
さて、ここからは具体的な説明に入っていきます。
今回はIK/FKについて。
聞いたことがある人も多いとは思いますが、しっかり理解できてますか?
Jointについて
IK/FKの前に、まずはJointについて簡単に説明しましょう。
Jointとは、モデルを動かすための関節のことです。
モデルにジョイントを組み入れてやり、そのジョイントを動かしてやることで、モデルがジョイントにくっついて動くわけですね。
また、ジョイントの一連の流れをジョイント・チェーン、ジョイント・チェーンが組み合わさって一体分の骨となったものをスケルトンと言ったりするようです。
まぁ適当に覚えておけば良いかと。

Jointの制御
ジョイントを動かす際には、通常Rotate(回転)Toolを使用します。
ジョイント=関節ですから、関節を中心に骨を回転させることで、骨の動きを作ってやるわけですね。
ところが、ここらへんでIK/FKという概念が登場してきます。
FKについて
ジョイントの一連の流れ(ジョイント・チェーン)を動かすとします。
例えば、腕の骨を動かすと考えましょう。
肩の骨があり、上腕の骨があり、下腕の骨があります。(手首から先は考えないことにします)
腕を水平にし、さらに肘を90度曲げる場合、どうすれば良いでしょうか。

答えは簡単。
まず肩のジョイントを選択して90度Rotate、次に肘のジョイントを選択して90度Rotateさせてやれば良いのです。

これがFK(ForwardKinematics)です。
つまりFKとは・・・
Foward(前向きの)Kinematics(運動)ですから、根元の運動(回転)が前(先)へ向かって働きかけるものです。
上の例で言えば、肩(根元)→肘(先)という順番で回転が継承されていくわけですね。
ジョイント制御の最も基本的で分かりやすい働き方がFKというわけです。
IKについて
別のパターンを考えてみましょう。
まずは新しく腕の骨を作ってください。
その際に、肘の骨は少し曲げた状態でお願いします。(これは後で説明します)
さて、腕の骨があって、机の角に手首を当てたいとします。

これをFKでやろうとすると、えらい面倒です。
肩の関節と肘の関節をどれくらい動かせばぴったりと手首のジョイントが机の角にくっつくか・・・?
そんなん分かりませんし、試行錯誤して位置を合わせるのはものすごい時間の無駄です。
そこで登場するのがIKという手法です。
IKhandleを使ってみる
AnimationメニューセットのSkelton→IK Handle Toolを選択します。

次に、IKを適用したい部分の根元のジョイント→先端のジョイントの順番に選択します。(今回は肩関節→手首関節)

①→②の順番に選択。
すると肩ジョイントと手首ジョイントの間にIKhandleが作られ、手首部分で制御できるようになります。

このハンドルをMoveToolで移動させてやると、なんと勝手に肘の位置が変わってくれるのです。

先端のジョイント(この場合は手首)を動かしてやるだけで勝手に中間のジョイントの角度を補完してくれるのがIK(InverseKinematics)です。
つまりIKとは・・・
Inverse(逆向きの)Kinematics(運動)ですから、先端の運動(移動)が逆(根元)へ向かって働きかけるものです。
上の例で言えば、手首(先端)→肘(真中)→肩(根元)という順番で回転が補間されていくわけですね。
FKが回転の先端への継承であるのとは逆に、IKは先端の移動から回転を自動計算してくれる優れものなのです。
FKとIKの使い分け
一見するととても便利なIKですが、難点もあります。
それは「自動補間だと想定外の動きをすることがある」ということです。
手首の位置を決めて動かしたい時は便利ですが、腕をぶらぶら振りたいという時には手首の位置でブラブラ感を出さなきゃいけないので不便です。
(試しにIKのTranslateにKeyを打ってみると分かると思います)
その点、FKでブラブラ感を出したい時には、肩の関節のRotateに適当にキーを打つだけなので楽チンです。
(IKhandleを削除してから試してみてください)
このように、FKとIKにはそれぞれ向き不向きがあります。
そこらへんを考慮して、自分の作りたいアニメーションに果たしてIKが必要か、それともFKだけで十分制御できるのかを見極める必要があります。
また、IKhandleのアトリビュートの一つ、IkBlendの値を調整することでIKとFKを混在させることも出来ます。
(IkBlendを0にすることで、IKhandleの影響を無くし、FKでジョイントを制御することができるようになります)
ここらへんをよく理解・考慮して、Riggingの計画を立てるようにしましょう。
おまけ:IKハンドルを入れる時に肘を曲げる理由は?
IKhandleを組み入れる際に、新しく肘を曲げた状態のジョイントチェーンを作ってもらいました。
これは、肘の優先角をあらかじめ設定する必要があるからです。
上の例では肘を内向きに曲げているため、IKで手首を移動させるとそのまま肘が上に向いた状態で曲がっています。
外向きに曲げた状態でIKを組めば、肘が下を向いた状態で曲がります。
つまり、最初に曲がっている向きが自動補間の際に参照される優先角なのですね。(ちなみに、全く肘が曲がっていない状態の骨にIKを入れると、どちらに肘を曲げればいいのか分からないため、IKが上手く作用しません)
この優先角はPreferredAngleと呼ばれ、Skelton→SetPreferredAngleで設定しなおすことができます。

ジョイント・チェーンを選択した状態でセットすると、チェーン内の全てのジョイントの優先角が再設定されます。
優先角を設定していないために補間の向きが変なことになる場合がよくあるので、IKを使う際は優先角をちゃんと考えて骨を組むようにしましょう。
まとめ
というわけで、FKとIKの説明をしてみました。
FK/IKは基礎の基礎です。
概念としての理解と、実際に使用してみての理解と、双方がしっかりできていないと中々Riggingをモノにするのは難しいです。
この記事やネット上のチュートリアル・説明などを参考にしつつ、色々試してみて欲しいと思います。
次回予告
次は、IKのようでIKじゃない(?)IkSplineHandleについて説明します。
早ければ明日、明日が無理なら一気に飛んで来週土曜か日曜あたりの更新になると思われます。
がんばっていきましょう。
目次はこちら
スポンサーサイト
コメント
ありがとうございますっ(///)
氏ね。
氏ね。
コメントの投稿
トラックバック
http://westside.blog21.fc2.com/tb.php/181-3bd77516
この記事にトラックバックする(FC2ブログユーザー)
これからもがんばってください><>
読んでないけど。