splineIkを操作するためには、普通のIKのようにIKハンドルを移動させたりするのではなく、splineIk のNURBSカーブの Control Vertex を移動させて操作します。
ただ、Control Vertex を選択したりするのは難があるため、クラスターで拘束してコントローラー代わりにします。
こちらの方が操作しやすいですね。
最近
splineIkをいくつも作っていて、このクラスターを作るのがとても面倒くさく感じました。
なので、splineIkの作成からクラスターを接続するまでをスクリプト化。
使い方は、MAYA_SCRIPT_PATH へ配置するか
sourceしてからコマンドラインかスクリプトエディタで呼び出します。
引数が多いのでスクリプトエディタで使用することを推奨。スクリプトエディタへは、こんな風に記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* 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コマンドを指定して、こんな風に実行するとアウトライナがスッキリします。
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* 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 件のコメント:
コメントを投稿