目次
IK(インバース・キネマティクス)とは
「肩」→「ひじ」→「手首」というような連続した関節を操作する場合、通常の「肩」→「ひじ」→「手首」の順に関節の角度を設定していく方法を、FK(フォーワード・キネマティクス)と言います。逆に、末端である「手首」の位置を設定し、「手首」がそこに来るように「ひじ」→「肩」の角度を逆算する方法を、IK(インバース・キネマティクス)と言います。
ToyStudio/MechaStudioでは、下図のような「IKハンドル」オブジェクトを設定することによって、IKを操作します。IKの始点となる関節を「スタート ジョイント」、終点となる関節を「エンド ジョイント」と呼びます。IKハンドル(本体)を移動させると、エンド ジョイントがその位置に追従します。「極ベクトル」はIKの回転面の軸であり、「ツイスト円」の角度によって関節にツイスト角(ひねり角)をつけます。
3個以下のジョイントで構成されるIKでは各ジョイントの角度は一意に決まるので、IKハンドルの位置をアニメーションのキーとして利用するのに適しています。
IKハンドルの作成
実際にIKハンドルを作成してみます。「mikoto_ik.toy」を開きます。このモデルにはすでにボーンがセットされています。モデルへのボーンのセット方法についてはチュートリアルの「2-1 ボーンの作成」以降を参照してください。
まず左足にIKハンドルをセットします。まず、ひざの関節の曲がり方向をIKに明示するために、左ひざを少し曲げておきます。ツールバーの「回転 ツール」(R)を利用するか、
オブジェクト ウィンドウで数値入力することで、
ひざを曲げたい方向に少し曲げます。
「IKハンドル ツール」(I)をクリックして
左足の付け根、左足のかかとのジョイントをクリックすると、かかとの位置にIKハンドルが作成され、2つの関節は矢印で結ばれます。極ベクトルは、ひざの位置に応じた方向を向いています。
「移動 ツール」(T)をクリックして
IKハンドルのツイスト円以外の箇所をクリックして選択します。IKハンドルが選択されていると青い枠が表示されるので、通常のオブジェクトの選択と見分けることができます。
IKハンドルを動かしてみると、足の付け根からかかとまでのジョイントがIKハンドルに応じて動きます。曲がり具合を見ると、ひざが若干内側を向き過ぎているようです。
これを修正するには、ツールバーの「元に戻す」(Ctrl+Z)をクリックしてIK作成をアンドゥーし、関節の初期角度を外向きに再調整してからIKを作成するか、次項の極ベクトルの調整を行います。
(こういった作業は、2個のジョイントからなる単一ボーンのIKハンドルでは必要ありません。)
極ベクトルの調整
「移動 ツール」(T)のままで、選択モードとして「極ベクトル選択 モード」(Shift+V)をクリックします。
ワールド座標系の方がわかりやすいので、ツール ウィンドウを表示(Ctrl+T)して、「ワールド」の項目を選択しておきます。
この状態で、下図のように極ベクトルが正面を向くように調節します。
調節したら、「オブジェクト選択 モード」(Shift+O)に戻して
IKハンドル動かしてみると、関節が正面方向に曲がるようになりました。
(mikoto_ik_topic7_1.toy)
ツイスト角の調整
ツイスト角では、上記のようなひねり方向(スタート ジョイントとエンド ジョイントを結ぶ軸方向)の角度を付加することができます。下図のツイスト円を直接マウスの左ボタンでドラッグするとツイスト角が変化します。
IKハンドルのアタッチ
IKハンドルが選択されている状態で、オブジェクト ウィンドウ(Ctrl+Q)を表示します。「IKハンドル」タブの「アタッチ」がONになっている場合、
IKハンドルは、IKハンドル自体を操作しない限り、エンド ジョイントの位置に追従します。
ここで、「アタッチ」をOFFにします。
すると、IKハンドルは自身の位置を保持するようになります。ボーンのルートにある「Chest」ジョイントを下図のように移動させると、IKハンドルの位置はそのままであり、足の関節がIKハンドルに追従します。
IKハンドルの組み合わせ
IKハンドルは通常のオブジェクトと同様に親子関係にもなりますので、親子関係を利用した組み合わせができます。まず、右足に対して2個のIKハンドルを設定してみます。「IKハンドル ツール」(I)をクリックして
右足の付け根と右足のかかとのジョイントをクリック、さらに右足のかかとと右足のつま先のジョイントをクリックして連続した2つのIKハンドルを作成します。間違ってジョイントではなくIKハンドルをクリックした場合は青い選択枠が表示されますので、背景をクリックするなどしてやりなおしてください。
1個目のIKハンドルについて、右足と同様に極ベクトルを調整します。「移動 ツール」(T)に戻して
「極ベクトル選択 モード」(Shift+V)をクリックして
極ベクトルが正面を向くように調節します。2個目のIKハンドルについては1ボーン(2ジョイント)のIKなので、極ベクトルの調整の必要はありません。
調整が終わったら、「オブジェクト選択 モード」(Shift+O)に戻します。
IKハンドル自身の位置を保持させたいので、両方の「アタッチ」はOFFにしておきます。
1個目のIKハンドルを動かしてみると、つま先のジョイントは2個目のIKハンドルに追従した状態で、足の付け根からかかとにかけてのジョイントが動きます。
次に、2個目のIKハンドルを動かしてみると、かかとまでのジョイントは1個目のIKハンドルに追従した状態で、つま先のジョイントが動きます。
今作成した「IKHandle2」、「IKHandle3」はオブジェクト パネルのツリー上で同階層にあるため、このような独立した動作となります。
この状態で2個のIKハンドルを同時に動かしたい場合は、Shiftキーで両方のIKハンドルを選択してから移動します。この場合、つま先のジョイントの方向を一定に保った状態で、かかとまでのジョイントをIKで動かすことができます。
また、ボーンのルートにある「Chest」ジョイントを下図のように移動させると、右足のかかと、つま先のジョイントの位置はIKハンドルによって保持された状態で、体全体が移動することになります。
(mikoto_ik_topic7_2.toy)
ここで、IKハンドルを親子関係を利用すれば、IKの操作がより簡単になります。下図のように、オブジェクト パネルでつま先側の「IKHandle3」をかかと側の「IKHandle2」にドラッグして、子オブジェクトとします。
こうすることで、かかと側のIKハンドルを動かす時、つま先のジョイントは常に一定方向を向くようになります。このようなIKハンドルの親子関係を利用すれば、足首の接地のポージングなどがとても簡単にできるようになります。
(mikoto_ik_topic7_3.toy)
その他のパラメータ
IKハンドルを選択した状態でオブジェクト ウィンドウを表示(Ctrl+Q)すると、以下の「IK拘束」タブがあります。IK関係のパラメータはここで設定します。
アクティブ
「アクティブ」をOFFにすると、IKの動作は無効になります。
IKタイプ
「自在」、「自在面」、「回転面」、「回転面Flex」があります。上記で解説しているデフォルトのIKタイプは「回転面」タイプです。
「自在」、「自在面」ではツイスト角や極ベクトル関係のパラメータは使用しないので無効になります。
実行順
「実行順」は、複数のIKハンドルがセットされてスタート ジョイントが一致する場合のIKの実行順です。この値が小さいIKが先に実行されます。
極ベクトル ターゲット
「極ベクトル ターゲット」をONにし、「…」ボタンをクリックしてオブジェクトを選択すると、スタート ジョイントからターゲット オブジェクトへの向きが極ベクトルとして使用され、固定値は無視されます。
IKタイプについて
「自在」タイプの場合、各ジョイントはIKハンドルの操作に応じて自在に動きます。
「自在面」タイプの場合、各ジョイントはスタート→エンドの各ジョイントで規定される平面上を動き、IKハンドル自体の角度に応じてツイスト回転します。
「回転面」および「回転面Flex」タイプの場合、各ジョイントは「極ベクトル」とスタート→エンドの各ジョイントジョイントで規定される平面上を動きます。「回転面」タイプでは極ベクトルの方向に応じてツイスト軸も回転するのに対して、「回転面Flex」タイプではツイスト軸は回転しないという違いがあります。
「回転面」タイプの場合は、以下のように脚の付け根のジョイントにツイスト角とひねり回転が生じ、足首の方向も外向きになります。
「回転面Flex」タイプの場合は、脚の付け根のジョイントにひねり回転は生じず、ひざのジョイントが曲がる方向自体が変化します。
MechaStudioの拡張機能であるFBXファイルの入出力機能では、IK等の拘束(コンストレイント)の入出力にも対応しています。「自在面」、「回転面」タイプはFBXファイルのそれぞれ「Single Chain Solver」、「Rotation Plane Solver」と動作の互換性があります。IKの動作を出力時にベイクしないでそのまま出力する場合、「自在面」と「回転面」タイプを使えば動作が忠実になります。
Autodesk FBX Converterでは、IK等の拘束(コンストレイント)を使用したモデルのアニメーションを再生できます。