多関節でSpring IK Solverを使用する際の注意点

2021/06/02

こんにちは、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を作成します。

 


3Spring 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にご興味が湧きましたら、ぜひ試してみてください。
では。

 

※免責事項※
本記事内で公開している全ての情報について、その完全性、正確性、適用性、有用性等いかなる保証も行っておりません。
これらの情報のご利用により、何らかの不都合や損害が発生したとしても、当社は何らの責任を負うものではありません。
自己責任でご使用ください。