2021/06/02
多関節でSpring IK Solverを使用する際の注意点
こんにちは、BACKBONEの塙です。
四足歩行動物や鳥類の脚などのリグを設定する場合、
多関節の設定方法として、
- Expressionやノードを使用して多関節IKを設定する
- Single-Chain SolverやRotate-Plane Solverを複合的に組み合わせて多関節を設定する
- Spring IK Solverを使用して多関節IKを設定する
など、幾つか方法があります。
今回は、Spring IK Solverを使用する方法をご紹介します。
Spring IK Solverを使用する際は、親階層での回転、スケールには注意が必要です。
1.初めにSpring IK Solverを有効にします
初期設定では、
Skeleton > Create Ik Handle > Tool Settings
のCurrent solverにSpring IK Solverは含まれていません。
MELのコマンドライン(またはスクリプトエディタ)で、
ikSpringSolver;
を実行すると、Current solverにSpring IK Solverが表示されます。
以上でロードは完了です。
2.多関節の骨を用意して、Spring IK Handleを作成します
多関節になるよう4つのjointを配置し、Spring IK Handleを作成します。
3.Spring IK HandleにPole Vector Constraintを設定します
Spring IK Solverは、Rotate-Plane IK Handleと同様に
Pole Vector Constraintを設定することができます。
Pole Vector用のコントローラ(springIk_plvCtrlと命名)を作成し設定します。
4.コントローラを作成し、挙動を確認します
Spring IK Handleを制御するためのコントローラ(springIk_ikCtrlと命名)を作成します。
次に、全体を制御するためのコントローラ(all_ctrlと命名)を作成し階層を整理します。
挙動を確認します。
5.問題点の発見
springIk_ikCtrlやspringIk_plvCtrlの挙動は問題なさそうです。
all_ctrlの移動の挙動も問題なさそうですが、
回転させた際に膝の関節が2重に回転しているように見えます。
確認のため、同じ階層でRotate-Plane IK Handleを設定してall_ctrlを回転してみます。
やはりSpring IK Solver側では、膝の関節が2重に回転しています。
どうやら、Spring IK HandleとPole Vectorを格納している親(all_ctrl)を回転すると、
2重で回転する仕様のようです。
6.問題点の解消
all_ctrlの回転の影響を受けるのであれば、その影響を相殺すれば解決します。
そもそも、親の影響を受けないようにSpring IK Solverの箇所を階層の外に出して、
ローカルセットアップで設定すると簡単に解決できますが、今回は階層を変えずに対応します。
①「springIk_jt_A」と同じ位置、回転情報を持ったtransformノードを作成し、
springIk_jt_Aの親ノードとします。
名前は「springIk_jtSpace」としておきます。
② springIk_jtSpaceよりも親の階層全ての回転を相殺する値を取得して、
springIk_jtSpaceのrotateに接続します。
今回はspringIk_jtSpaceのparentInverseMatrixを接続します。
③ 挙動を確認します。
all_ctrlの3軸を回転しても問題なさそうです。
補足.Scaleを使用する際も注意
今回は、親の回転の影響を相殺する方法をご紹介しましたが、scaleにも注意が必要です。
all_ctrlを1軸scaleする機会はあまりないかと思いますが、
こちらの問題も同様に、影響を受ける不要な値を相殺することで、
下の動画のように解消できます。
まとめ
今回はSpring IK Solverを使用する際の注意点をご紹介しました。
本記事でSpring IK Solverにご興味が湧きましたら、ぜひ試してみてください。
では。
※免責事項※
本記事内で公開している全ての情報について、その完全性、正確性、適用性、有用性等いかなる保証も行っておりません。
これらの情報のご利用により、何らかの不都合や損害が発生したとしても、当社は何らの責任を負うものではありません。
自己責任でご使用ください。