2014年05月12日

UnityでIKを知る

私はこれまでいわゆる人物をUnityで使用することは無かったのですが、今後必要になってくると思うので色々と勉強することにしました。

人物の制御をUnityで行う場合、Mecanimと言う仕組みがありますがその中にIKと言う機能があります。

IKとは何なのか?
IKはインバースキネマティクスの略でそれだけだと何のことやらさっぱりという方が多いと思います。私もそうでした。
通常キャラクターを動かす場合、関節をそれぞれ曲げたりねじったりして動きを出すわけです。例えば肘を90°曲げるとか、手首を30°回転させるとかそんな感じですね。これをFK(フォワードキネマティクス)といいます。
IKと言うのは例えば、手のひらの位置を顔の正面から30cmの位置に持ってきたいとか、足を前方50cm高さ15cmの位置に持って行きたいというような目的のある動作を自動的に計算して関節の動きを計算してくれる機能です。

さて、Mecanimとは言うもののUnity上にMecanimと言う名前で機能が登場してきません。これは良くないことだと思うのですが、Unity上ではAnimatorと言う名前で登場します。初心者の人はここで躓くこともありそうです。

インバースキネマティクス (Unity Proのみ)
このオフィシャルの説明で理解できる人はかなりハイパーな人だと思います。
まずIKを使える条件ですが、「メカニムで正しく設定されたアバターのある【ヒューマノイド キャラクター】においてサポートされます。」と書かれています。
つまり、MecanimでHumanoidに正しく設定されたモデルでないとIKそのものが使えないということになります。これは重要です。今はユニティちゃんのような使いやすいモデルがあるので、まずはそれらを使って学習するのが良さそうです。

以下の動画ですが、これはFinalIKと言ってAssetStoreで販売されているものです。
MecanimのIKはここまで高機能ではありませんが、IK動作のイメージが最もよく分かる動画だと思います。


AnimatorでIKを動かす手順ですが、以下の通りです。
基本的なスクリプトは理解している前提で書いてます。

1.Mecanim(Animator)でHumanoidが正しく設定されたモデルデータを用意する。Unityちゃんでいいと思います。

2.サンプルシーンのモデルのAnimatorの中にControllerと言う項目があるので、ダブルクリックしてAnimatorを開きます。
WS000000.JPG

3.BaseLayerにIK Passの項目があるのでチェックを入れます。
WS000001.JPG

4.スクリプトのOnAnimatorIKでIK処理を呼び出します。

OnAnimatorIKの中で何が出来るのか。簡単に説明します。
基本はanimator.の後に続くメソッドで処理を行います。

【SetIKRotationとSetIKPosition】
この2つのメソッドで出来るのは、LeftFoot.LeftHand,RightFoot、RightHandの制御のみです。つまり両手両足の制御を行うためだけのメソッドです。これに合わせてSetIKPositionWeightと言うメソッドを組み合わせてIKの適用度を指定します(0適用なし→1MAXのように使います)

それ以外はどうすんの?それ以外はSetLookAtPositionと言うメソッドがあります。
SetLookAtPositionはVector3を引数に持ちますので、単純にその方向を向くということになります。
こちらも同じく、SetLookAtWeightという適用度を指定するメソッドと合わせて使用します。

【引数】
SetLookAtWeight(全体の適用度、体の適用度、頭の適用度、目の適用度、クランプ値)
0だと適用度0で1だと100%になります。
クランプ値で行き過ぎたりしないように途中で停止させる事ができます。


続きます(未定)


posted by iworks2013 at 11:55| Comment(0) | Unity