Mayaでシュルシュルとのび~るspline IK(IK spline)

当ページのリンクには広告が含まれています。
スポンサーリンク

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 のオプションを開きます。

Rebuild Curveでカーブを再構成する

「0to#Spans」と「Number of spans」で10に設定しました。

「3Cubic」を選択してカーブを曲線で制御できるようにします。

カーブのCVポイントにクラスターをつける

カーブの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 で設定することができます。

Attribute Editorでひねりの設定をする

「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ノードでカーブの長さを測る

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

input1にデフォルトのカーブの長さを入れる

multiplyDivideノードは「Divide」にして、「input 2X」にデフォルトのカーブの長さである。「18」を入れます。

全体スケール対応はしていません。全体スケール対応については以下の記事を参考にしてください。

カーブの長さに合わせたスプラインIK

このようにカーブの長さに合わせてjointが伸びるようになりました。

しかし、これだけでは面白みがなく、たいして実用性もないのでちょっとしたギミックを追加します。


本当はもっとjointの数を増やしたほうが良いです。このようにjointの数がたりないと綺麗にカーブをトレースしてくれません。反面教師としてこれはあまり良くない例になってしまいました。

シュルシュルとのび~るギミック

カーブに沿って伸び縮みする(シュルシュルとのび~る)ギミックを追加します。

spline IKがシュルシュルと伸び縮みする
こんな感じで動きます

やはり、先端のほうでjointの数の少なさが気になります。このようなものを作るときは十分な数のjointを用意しましょう

Locatorを追加してModify > Add Attribute…でシュルシュルと伸びるギミック用のアトリビュートを追加します。

Locatorにアトリビュートを追加

名前は「length」にしました。

Data Typeはfloat型で
Minimum: 0
Maximum: 1
Default: 1

でアトリビュートを追加します。

Node Editorを開いてこのアトリビュートを繋げます。

ノードエディターでMultiplyする

multiplyDivideノードを新たにもう一つ追加してます。operationは「Multiply」にします。新たに作った「length」のアトリビュートをinput 1Xに接続し、以前からあったmultiplyDivideノードのoutput Xinput 2Xに接続します。そしてその演算結果であるoutput XをそれぞれのjointのscaleXに繋ぎます。

この設定でカーブに対してどのくらいjointを伸ばすのかの割合を0~1の値で制御できるようになります。1ならばカーブの長さと同じで0ならばまったく表示されません。

0~1では数値の幅が少なすぎて制御しづらい場合は0~10、または0~100で制御できるように工夫してみてください。

今回の記事が気に入っていただけた場合、ぜひとも他の記事もチェックしてみてください。Mayaのリギングに関する記事をまとめたページです。

スポンサーリンク

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次