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

シュルシュルspline_IKMayaでRigging

MayadでRiggingというシリーズでここ最近はstretch IK(のびるIK)についての記事を扱ってきました。そこで、今回はのび~るIK spline(spline IK)について解説します。こののび~るIK spline(spline IK)はちょっとしたギミックとして使えます。

また、IK spline(spline IK)というものは普段つかわれるIKに比べて知名度が低く、現場で3DCGアニメーターをやっている人(ある程度の年数やっている人)でも知らない方もいました。しかし、3DCGアニメーターとしては少なくともIK spline(spline IK)というもの自体は知っておく必要があります。

stretch要素としてはscaleX版のstretch IKの方法(正確にはsquash and stretch)を使用します。この手法については過去に書いたscaleX版のstretch IKの記事を御覧ください。

MayaでStretch IK(scaleX版)part1
Stretch IK(伸びるIK)の解説です。 腕や脚で使われることを考慮して 今回紹介するのは伸びるIKなので縮みません。正確に言うと縮まないようにしています。Stretch IKを作る場合、jointのtranslateXを使...

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

MayaでRigging(joint orient編)
今回はjoint orient編です。キャラクターをバインドする前にjointをきれいな状態にしなければなりません。そうしないと後々やっかいなこと(問題ない場合もあるのでリガーがいない現場によってはこのようなことを考慮しないところも‥)に...
ジンバルロックとRotate Order
MayaでRiggingのjoint orient(ジョイントの方向づけ)の項目を書いていましたが、その前にジンバルロックとRotate Order(回転順序)の説明必要だと気づいたのでこちらの記事を先にあげます。ジンバルロックを...
スポンサーリンク

IK spline の作成

IK splineはカーブに沿ってjointが曲がるのでjointの数が多いほうがより綺麗な曲線が描けます

とりあえず今回は10個のjointを直線に引いて、それにIK splineを設定します。

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の長さが一致している必要があります。

ひねりの設定

今回は使いませんが、IK spline(spline IK)はひねりを加えることが出来ます。

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)を加えることが出来ます。

ひねり前
ひねり後

IK spline のStretch(のび~る)設定

IK splineの場合は最初からカーブがあるのでそのカーブを利用します。

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

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

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

MayaでStretch IK(scaleX版)part2(全体スケール対応)
Stretch IK(伸びるIK)の解説 (scakeX版)の続きです。前回ではとりあえずstretch IKが完成したと思ったのですが、全体のスケールに対応できていませんでした。全体スケールを伴わないリグの場合は前回までのもの...

このようにカーブの長さに合わせて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 Xinput 2Xに接続します。そしてその演算結果であるoutput XをそれぞれのjointのscaleXに繋ぎます。

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

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

Follow me!

コメント

PAGE TOP
タイトルとURLをコピーしました