ゴマちゃんフロンティア

気まぐれと勢いで作るUnityゲーム開発日記です。

【Blender】マイキャラにIK (Inverse Kinematics) を設定してみる

time 2017/07/16

というわけで、Unityに関する話題に乏しいので、今回はやや無理矢理なBlenderに関するお話です。Unity2017は気になりますが、大型アップデートのようなのでちょっと様子見中です。

話題はズバリ、「インバースキネマティクス」なるものです!

「ターゲットとなるboneまでの各関節boneを自動的に回転してくれる機能」らしいです。
当初は「動物キャラでリアルじゃないし、IKなんていいや」と思っていたのですが、素の状態では変な方向に捻じ曲がることが多く、生き物として無視できないレベルの動きが多発しました。
さすがに危機感を感じたので、練習を兼ねてマイキャラにざっくりとIKを設定してみました。

ちょっと前置きがあるので、「キャラクターとかどうでもいい」という方は「IKの設定」まで飛ばしてください。

今回のキャラクター

最近の本ブログはずっと「シルリス」というリスがモデルでしたが、今回はこちらのウサギです!

「マリンパ」なる名前のため、海を連想させる見た目がよかったので、思い切ってセーラー服を着せてみました。
性別的には雄なのですが、日本でセーラー服というとどうしても女子学生の制服というイメージが強いためか、男の子っぽくなくなってしまいました。ただトップスだけであれば、元々が船乗りの服ということもあってそこまで違和感はなさそうです。
まあこの見た目で剣を振り回すというのは別の意味で違和感がありますが…。

今更普通の服を着せてもつまらないので、このくらい強烈な見た目も悪くないかなーと思います。このセーラー服姿もデフォルトとして採用するかはともかく、コスチュームの1つとしては問題なく起用できそうです。

IKの設定

ターゲットボーンの作成

既存のArmatureにIKのターゲットとなるboneを追加します。

IKを設定するboneから分かりやすい方向に伸ばしておきます。この際、boneの親子関係は切っておきましょう。(Alt+P)
このあたりは割と適当で問題ないです。

Bone constraintの設定

ポーズモードにした状態で、プロパティウィンドウの「Bone constraints」タブ→「Add Bone Constraint」→「Inverse Kinematics」を追加します。

「Targaet」にArmatureを選択すると、下にBone欄が表示されます。ここに先程作成したターゲット用ボーンを設定しましょう。
「Chain Length」は「IKを設定したboneからルートとなる親boneまでの何番目のboneまで適用するか」を入力します。デフォルトは0で、この場合は無制限になるようです。自分はルートとなるboneが特殊な位置にある(体の下に独立)ので、2~3を指定しました。

自分の場合、各部位の先端 (手や足先に当たる部分) は手動で回転させたかったので、その1つ手前のboneに設定してあります。またマリンパの場合はセーラー服の襟部分も制御したかったので、体の後ろ側にもboneを伸ばして設定しました。

boneごとのIK回転制限

IKを設定しても、ターゲットボーンの位置によってはあらぬ方向に曲がってしまいます。これを防ぐために、各boneに対してIK適用時の回転角度に制限をかけておきます。
プロパティウィンドウの「Bone」タブ→「Inverse Kinematics」から設定できます。

「Limit」にチェックを入れ、下限と上限の角度を常識的な範囲となるよう入力し直します。「常識的な範囲って何だよ」というお話ですが…体の中心に近いboneほど範囲を狭くすれば、ぶっ飛んだ曲がり方にはならないはずです。
また、「これ以上回転されるとモデルが崩れる!」というラインがある場合、そのラインを超えないように下限or上限を設定するのもいい感じです。このウサギの場合、中心寄りにあるboneが下を向くと襟部分の見栄えがよろしくないため、下限の制限を強くしています。

ちなみにここでいう「角度」は、boneの軸座標に依存します。プロパティウィンドウの「Data」タブ→Displayタブ→「Axis」にチェックを入れると、各boneの座標軸が表示されます。

もしboneの軸が気に入らない場合、エディットモードで選択後にCtrl+Nで再計算が行えます。可能であればアニメーション作成前に行った方が、既存のキーフレームへの影響が少なくなります。というか後から軸を修正すると確実に変になるので注意が必要です。

他にあるパラメータとして、「Stiffness(剛性)」はその角度への曲がりにくさを変えるものです。「範囲内で曲げてもいいけど、あんまり多くは回転させたくない」な場合に有用です。
「Stretch(伸縮)」はその名の通り、メッシュの伸縮による筋肉の表現等に使うようです。しかしなかなか難しいようなのでほとんど触っていません。いくつか詳しく乗っているサイトもあったので、気になる方は調べてみてください。

動作確認

設定後、実際にターゲットボーンを動かしてみましょう。

IKを設定したboneから中心までのboneがくねくね曲がればOKです。ターゲットボーンをあれこれ動かして制限が効いているかも確認しましょう。
このキャラはboneが少ないのであまり実感できませんが、より細かくboneを設定してある場合は目に見えて変わるはずです。

あとがき

そんなわけで、BlenderのIKを設定してみました。
「インバースキネマティクス」とか言うと難しそうで敬遠しがちですが、実際に使う分には難しくありません。もっとリアルな挙動を求めるのであれば大変になりそうですが。
「モーション作る度にboneの角度修正やってられない!」「アニメーションの度にモデルがぐにゃぐにゃに崩壊して困る!」という方は、一度IKと回転制限を試してみてはいかがでしょうか。

スポンサーリンク

down

コメントする



ツイッター