2021年8月2日月曜日

IKを設定したジョイントでの注意点

 いつの頃からなのか、腕や脚などのIKを使う部分ではIK用のジョイント階層とFK用のジョイント階層、それらを合成するジョイント階層を使ってリグを組む方法を紹介しているのをよく見かけます。

 合成するジョイントへ回転を転送する方法に、コンストレイントを使うのか、pairBlendノードを使うのか、または別のユーティリティノードで代用するのか、マトリクスで計算するのかなどでちょっとした派生があったりしますが、ユーティリティノードのウェイトアトリビュートとIK/FKを切り替えるコントローラのカスタムアトリビュートを接続してFKとIKのブレンド率を変化させる感じのリグになっています。

 しかし、この方法のリグを覚えてしまうと、IKハンドル自体にIKとFKを切り替える機能がある事を忘れてしまう瞬間があります。


 例えば、初歩的ですごくシンプルな構造のIKを組み上げるとこんな感じになります。

 ikHandleとlctPVの親になっているグループノードは、それぞれをゼロリセットできるようにするためのピボットの代わり。

 ここで、ikHandleノードのアトリビュートを見てみると、Ik Blendというアトリビュートがあります。

 なにかポーズを付け、joint1,joint2の Rotateにキーフレームを設定してから、このIk Blendの値を0.5くらいに変更すると、

 こんなふうにIKとFKのゴーストが出てくれます。
 ただし、ikHandleを選択していないと表示されません。なので、長年使っていても、mayaにこんな機能があった事を忘れてしまうことがあります。


 これをふまえて、最初のFKとIKの階層に分けたリグのとき、IK用のジョイント階層へはキーフレームを設定してほしくないため、ジョイントのアトリビュートを全てロックしたとします。
 そうするとIKハンドルを操作してもリグが動いてくれないことになるのです。


 このIK用ジョイントのアトリビュートをロックしてしまうと動かなくなってしまうという現象は、splineIkを設定したときにも起きてしまいます。
 たまに尻尾なんかを splineIkで作成したときに、ロックをしてしまって動いてくれない!なんて事があります。

 さらに splineIkの場合では、リミットが有効になっているジョイントを含んでいてもIKが利かなくなってしまうので注意が必要です。

 splineIkこそリミット設定したい気もしますが動かなくなってしまうのでリミットのフラグは解除しないといけません。



0 件のコメント:

コメントを投稿