MayadでRiggingというシリーズでここ最近はstretch IK(のびるIK)についての記事を扱ってきました。そこで、今回はのび~るspline IK(IK spline)について解説します。こののび~るIK spline(spline IK)はちょっとしたギミックとして使えます。
また、spline IK(IK spline)というものは普段つかわれるIKに比べて知名度が低く、現場で3DCGアニメーターをやっている人(ある程度の年数やっている人)でも知らない方もいました。しかし、3DCGアニメーターとしては少なくともspline IK(IK spline)というもの自体は知っておく必要があります。
stretch要素としてはscaleX版のstretch IKの方法(正確にはsquash and stretch)を使用します。この手法については過去に書いたscaleX版のstretch IKの記事を御覧ください。

MayaでRiggingシリーズで解説していることを試して見るにはjointのX軸が子の方向をむいている必要があります。この意味がわからない方はまずはjoint orientの記事とジンバルロックとRotate Orderの記事をまず読んでください。


spline IK(IK spline)の作成
spline IKはカーブに沿ってjointが曲がるのでjointの数が多いほうがより綺麗な曲線が描けます。
とりあえず今回は10個のjointを直線に引いて、それにspline IKを設定します。

Skeleton > Create IK Spline Handle でjointの根本と先端を選択してオプションはデフォルトの状態でIK spline Handleを作成します。
するとjoint上に直線のカーブが作成されるのでそれを選択して
ModelingメニューのCurves > Rebuild Curves のオプションを開きます。

「0to#Spans」と「Number of spans」で10に設定しました。
「3Cubic」を選択してカーブを曲線で制御できるようにします。

カーブのCVにそれぞれDeform > Cluster でClusterを作成します。

それぞれのClusterに Constrain > Point でポイントコンストレインをしてコントローラーでカーブ(joint)を動かせるようにします。

このようにコントローラーを動かせばjointがカーブに沿う形になります。
ただ、このようにカーブを曲げるとjointの長さがカーブに比べて短くなってしまいます。これで問題ない場合も多いですが、今回の場合はカーブの長さとjointの長さが一致している必要があります。
Zoo tools Proの「JOINTS ON CURVE」を使えばもっと簡単に
有料のツールですが、Zoo tools Proの「JOINTS ON CURVE」というツールを使うとカーブに沿ってjointを簡単に作成できます。このツールではカーブにjointの数を指定して作ることが出来ます。


ひねりの設定
今回は使いませんが、spline IK(IK spline)はひねりを加えることが出来ます。
IK splineのAttribute Editorの IK Solver Attributes > Advanced Twist Controls で設定することができます。

「Enable Twist Controls」にチェックをいれてTwistできるようにします。
「World Up Type」で「Object Rotation Up(Start/End」で
「World Up Object」にひねりを加えるコントローラー(根元側)を入れます。
「World Up Object 2」にひねりを加えるコントローラー(先端側)を入れます。
これでこれらのコントローラーを回転させると雑巾を絞るようにひねり(Twist)を加えることが出来ます。


spline IKのStretch(のび~る)設定
spline IKの場合は最初からカーブがあるのでそのカーブを利用します。

curveInfoノードでカーブの長さを測り、デフォルトの長さの比率を各jointのscaleXに入れます。

multiplyDivideノードは「Divide」にして、「input 2X」にデフォルトのカーブの長さである。「18」を入れます。
全体スケール対応はしていません。全体スケール対応については以下の記事を参考にしてください。


このようにカーブの長さに合わせてjointが伸びるようになりました。
しかし、これだけでは面白みがなく、たいして実用性もないのでちょっとしたギミックを追加します。
本当はもっとjointの数を増やしたほうが良いです。このようにjointの数がたりないと綺麗にカーブをトレースしてくれません。反面教師としてこれはあまり良くない例になってしまいました。
シュルシュルとのび~るギミック
カーブに沿って伸び縮みする(シュルシュルとのび~る)ギミックを追加します。
やはり、先端のほうでjointの数の少なさが気になります。このようなものを作るときは十分な数のjointを用意しましょう。
Locatorを追加してModify > Add Attribute…でシュルシュルと伸びるギミック用のアトリビュートを追加します。

名前は「length」にしました。
Data Typeは「float」型で
Minimum: 0
Maximum: 1
Default: 1
でアトリビュートを追加します。
Node Editorを開いてこのアトリビュートを繋げます。

multiplyDivideノードを新たにもう一つ追加してます。operationは「Multiply」にします。新たに作った「length」のアトリビュートをinput 1Xに接続し、以前からあったmultiplyDivideノードのoutput Xをinput 2Xに接続します。そしてその演算結果であるoutput XをそれぞれのjointのscaleXに繋ぎます。
この設定でカーブに対してどのくらいjointを伸ばすのかの割合を0~1の値で制御できるようになります。1ならばカーブの長さと同じで0ならばまったく表示されません。
0~1では数値の幅が少なすぎて制御しづらい場合は0~10、または0~100で制御できるように工夫してみてください。
今回の記事が気に入っていただけた場合、ぜひとも他の記事もチェックしてみてください。Mayaのリギングに関する記事をまとめたページです。




コメント