splineIkを操作するためには、普通のIKのようにIKハンドルを移動させたりするのではなく、splineIk のNURBSカーブの Control Vertex を移動させて操作します。
ただ、Control Vertex を選択したりするのは難があるため、クラスターで拘束してコントローラー代わりにします。
こちらの方が操作しやすいですね。
最近
splineIkをいくつも作っていて、このクラスターを作るのがとても面倒くさく感じました。
なので、splineIkの作成からクラスターを接続するまでをスクリプト化。
使い方は、MAYA_SCRIPT_PATH へ配置するか
sourceしてからコマンドラインかスクリプトエディタで呼び出します。
引数が多いのでスクリプトエディタで使用することを推奨。スクリプトエディタへは、こんな風に記述します。
/* splineIk test */ { string $parent = ""; string $name = "test"; string $sttJnt = "joint1"; string $endJnt = "joint4"; int $span = 1; string $clusters[]; string $spIk[] = rigSetSplineIk($clusters, $parent, $name, $sttJnt, $endJnt, $span); }
経験上、スプラインIKでは twistとかたまにAdvanced Twist Controlを使ったりするので、ikHandleの名前と、ストレッチ設定をしたりするのでスプラインIKで作成したNURBSカーブの名前が必要になるので、そのふたつが戻り値となっています。
そして、ぱっとみた感じ $clusters という配列の役割が不明だと思いますが、クラスタハンドル名のリストになって戻ってきます。参照渡しというのを使っています。※過去記事:「配列は参照渡し」について
xform -q -ws -t
で、座標を取得しようと試みるかもしれませんが、0 0 0
が返ってきます。ちょっと訳が分からない感じですが、座標を取得するためには
xform -q -ws -piv
と、ピボットを調べるとクラスタハンドルの座標が分かります。
このスクリプトでは、$span を1~4の間で変更することで CVの数を変更できます。span=1のときcv=4、span=2のときcv=5と IK Spline Handle Tool と同じようになります。
ジョイントの数が5本を超えてくるとspan=4のcv=7個とかを使う場面が出てきます。作られるクラスタの数も7個とかになるのでスプラインIK用のノードはまとめておきたくなると思います。なので、$parentへgroupコマンドを指定して、こんな風に実行するとアウトライナがスッキリします。
/* splineIk test */ { string $parent =`group -em`; string $name = "test"; string $sttJnt = "joint1"; string $endJnt = "joint6"; int $span = 1; string $clusters[]; string $spIk[] = rigSetSplineIk($clusters, $parent, $name, $sttJnt, $endJnt, $span); }
このスクリプトでは対応してあるので忘れがちになりますが、手動でスプラインIKを作った場合には NURBSカーブのダブルトランスフォームをさせないように Inherits Transformをオフにするのを忘れないようにしないといけません。
0 件のコメント:
コメントを投稿