modoのIKについて書いてみたいと思います。
modoには「Dual Joint Planar IK」と「Full Body IK」2種類のIKがあります(13.2以降は3種類)。それぞれメリットとデメリットがあり、アニメーション用途で安定したIKが必要な場合は「Dual Joint Planar IK」がいいかもしれないという話です。
IK とは?
3DCGでアニメーションを作成する場合、ざっくり「FK」と「IK」2種類の制御方法に分かれます。
IKは元々工業用のロボットアーム制御用に開発された技術で、人間の腕のように複数の関節で構成されている階層構造を効率的に制御するための機能です。
ロボットの関節角度を決めるとき、階層構造の親から順に計算する方法を FK (フォワードキネマティクス) 、子の位置から親の関節角度を計算する方法を IK (インバースキネマティクス) といいます。
例えば腕が何かをつかむ場合に、「上腕」「前腕」「手のひら」を個別に回転して姿勢を決める方法が FK です。
複数の関節位置を「IKゴール」と「アップベクター(ポールベクター)」を使用して姿勢を決める方法が IK です。「IKゴール」は手の到達位置、「アップベクター」は肘の方向を指定するのに使用します。
FK は関節を個別に回転する必要があるので、関節数が多い場合にアイテムを一つ一つ回転する必要があります。IK は「IKゴール」と「アップベクター」2アイテムで全ての関節を制御できます。
一見FKよりIKの方が便利なように見えますが、それぞれアニメーションの内容によって向き不向きがあります。例えば走るアニメーションの場合、手の振りはFKが使いやすく、脚の動きはIKが向いています。そのため多くのIKはFKとブレンドしたり、切り替えることができるようになっています。
さて、ここから本題です。
modoには「Dual Joint Planar IK」と「Full Body IK」2種類のIKがあり、それぞれメリットデメリットがあります。
Dual Joint Planar IK
シンプルなIKモディファイヤです。IKで制御可能な関節数が2つに限定されています。
- 使用できる関節数に制限あり(2関節)
- アップベクター対応
IKで制御される関節の位置は、IKの始点となる関節位置、IKゴール、アップベクターの3点からなる仮想平面上を移動するように動作します。このためIKの始点、IKゴール、アップベクターのいずれかが完全に重なった(平面が形成できない)場合は、IKは計算することができなくなります。
3DソフトのIKは、だいたいこんな動作になってると思います。
Full Body IK
IKinemaというライブラリを組み込んだフルボディーIKシステムです。
Full Body IKはその名の通り、手を引っぱると自動で体全体が自然な姿勢を保ってくれる、聞くだけなら夢のようなIKシステムです。またモーションキャプチャデータを体格の異なるスケルトンにリターゲッティングするのに使用されます。
Dual Joint Planar IK のように関節数に制限はありませんがアップベクターをサポートしていません。
- 使用できる関節数に制限なし
- アップベクター非対応
- モーションのリターゲット
画像ではアップベクターの設定にmodo標準の「方向コンストレイント」を使用しています。IKの始点の関節と全く同じ位置にロケータを作成し、IKを設定するスケルトンをロケータの子の階層におきます。ロケータからIKゴールに方向コンストレイントを設定します。方向コンストレイントの「上方ベクトル (アップベクター)」を設定することで、IKのアップベクターのような動作を設定しています。
Full Body IKは不安定?
Full Body IKは高機能で便利そうですが、modoではアップベクターをサポートしていないためリグを構築したりする場合に不安定になるという問題があるようです。
スケルトンの位置にいくつか制限があり、スケルトンが完全に直線的に配置されてる場合に不安定になります。
一般的に直線的に関節が配置されてる場合は、Dual Joint Planar IKを含めIKが正しく動作しないか不安定になります。IKを使用する場合は少し関節を曲げるのがIKのお作法ですが、Full Body IK ではIK制御下にない親の位置も影響するような気がします。IKが上手く動かないときは、スケルトンの位置をずらすと上手く動くようになるかも知れません。
上の画像のように方向コンストレイントを設定する方法はmodo 601のチュートリアルビデオ 「Fireboy」で紹介されていたもので、後にMattさんやMODO JAPAN GROUPさんがビデオで紹介しています。
親が回転するからそれっぽく動いてるだけで、Full Body IK がアップベクターとして計算に使用してるわけではないので、この疑似アップベクターではIKが不安定になるのではないかと思われます。
Full Body IK を安定させる方法として、「精度」を 2 から 3 に上げるといくらか改善することがあります。
Full Body IK が不安定という問題は Foundry フォーラムで繰り返し話題になっていて、以下のスレッドでは Sergio さんが Full Body IK についてコメントしています。
https://community.foundry.com/discuss/topic/122645/fbik-leg-rig-is-acting-super-strange
これが私がFBIKソルバを多く使うことができない理由の1つです。
それは気の利いたアップベクターが欠けている!! 誰かがそれを取り上げる前に、Mattの回避策は必ずしも機能しません。FBIKはやんちゃで、 Planar IKは途方もなく制限されています。
使用可能なIKソルバーを取得するまで、Modoでキャラクターを作成することは苦痛を伴うことになるでしょう。(それは自分のコースのスレッドで述べていますが、これは本当に対処する必要があります。)Mattの回避策でも作業するのは非常に難しく、アップベクターの位置を常に調整しなければならない。
そのような脚は古い方法が良いと思う。複数のPlanar IKチェーンを重ねる。 1つは脚、2つは足用です。
Sergio Mucino さんは Maya、Modo、Softimage、3ds maxを使用するTD/Riggerの方で、映画「アイアンマン3」や「デッドプール」に参加されてます。有料チュートリアル「キャラクターリギングコース」をリリースしている方でmodoに精通していると思われます。
Sergio さんが難しいと言ってる以上、Full Body IKを使用して安定したアップベクターの設定方法を見つけるのは難しいように思います。
まとめ
Full Body IK がアニメーションで動作が安定しないなと思った場合には、「Dual Joint Planar IK」を試すといいかもしれません。
アニメーションの作成方法は様々です。アップベクターが不安定でもキーをたくさん打て制御するのが苦にならなければ Full Body IK で問題ないと思います。3ds MaxのBipedはアップベクターもなく「鎖骨」「上腕」「前腕」「手のひら」全部まとめて1つのキーフレームで管理する変わったシステムだったりするので、気にしなければ気にならない問題かもしれません。
ちなみにフルボディーIKの特長である「手を引っぱると自動で体全体が自然な姿勢」というのは、手付けのアニメーションでは使われることが少ないようです。フルボディーIKらしいIKを使ったことないので具体的なことは書けませんが、決めたポーズが勝手に動いてしまうのでアニメーターには不評なようです。
Mayaには MotionBuilder 由来の HumanIK というフルボディーIK機能を搭載していますが、個人サイトや小規模なアプリ開発を除くと、フル3Dの映画やゲームのモーション制作に使われているという事例を見かけることが少ない気がします。
ゲームのようにインタラクティブにアニメーションが変化するものや、アニメーションのリターゲッティング、モーションキャプチャのデータ補正には有用な技術だと思います。
LightWaveもVer 9まではIKが弱くアニメーションでガクガク震えることがありましたが、まさかmodoでもIKに悩まされるとは思いませんでした。
追記
既存のIKの問題点を解決するため、modo 13.2で新しいIKモディファイヤが追加されました。最大3関節までIK制御可能で、他のソフトではSoft IKやStretch IKと呼ばれる関節位置を制御する機能を搭載しています。新しい機能であるため使用感に関する情報は多くありません。