伸びるSplineIKを作る

一応TAブログですが、大半が写真とか自作PCネタばっかりなので たまにはCG屋っぽい記事をかいてみる。
自分の探し方がアレなのかもしれませんが、この手のSetupのTipsってほとんど記事で見かけないんですよね(とくに日本語だと)
私も、まだまだ勉強途中なので あんまり偉そうなこと言えないですし、知らないことも多いのですが
よく使いそうなネタをちまちま書き溜められればいいなぁと思います。

※ サーバー入れ替えた時に画像が吹っ飛んでたので修正しました。

セットアップでよく使うSplineIKですが、Curveが伸びても Jointの長さは変わりません。
ので、ゴムのように伸びるもののセットアップをしたいときに、Curveが伸びるとJointも伸びるような細工をしてみます。

まずJointを作る。
今回はJointを均等においてますが、Jointの幅は均等でなくても大丈夫です。

作成したJointは、こんなかんじにちゃんと名前をつけます。
ココでつけた名前は、下に書かれているExpressionに使用します。

Animationメニューから、IKSplineHandleToolを選択
OptionではRootOnCurve AutoCreateCurve AutoSimplifyCurveにチェックを入れてます。
AutoCreateCurveにチェックを入れると、Jointに沿ったCurveを自動で作ってくれるので、この手のJointと同じ位置にCurveを置きたいときはここにチェック→SplineIKでCurve作成→IK消す みたいな手順でCurveを作ると楽です(余談)

生成されたCurveを選択して、
arclen -ch 1;
コマンドを実行します。
これは、CurveInfoノードを作るためのコマンドで、Curveの長さを知るために使用します。

ArcLength が、今のCurveの長さを示しています。


curveInfoノードを作成したら、ExpressionEditorを開いて以下のようにExpressionを書いてCreateします。

float $defValue = 4;
float $scaleValue = curveInfo1.arcLength / $defValue;

curveJointA.scaleX = $scaleValue;
curveJointB.scaleX = $scaleValue;
curveJointC.scaleX = $scaleValue;
curveJointD.scaleX = $scaleValue;
curveJointEnd.scaleX = $scaleValue;

一行目のdefValueになっているところは、Curveのデフォルト時の長さを入れます。
2行目は、 Curveの今の長さ / デフォルトの長さ で、元の大きさからの割合をだして
それ以下の5行で、SplineIKのJointの進行方向(この場合translateX)のScaleに値を入れています。
こうすると、例えば元のCurveから長さが2倍になったら JointもScale2になるので CurveにそってJointを伸ばすことができます。

伸びるSplineIK作成完了。

あとは、 CurveのPointにClusterを作り

ClusterをLocaterにPointConstraintしてコントローラーを作れば 伸びるもの(ゴムとか)の基本的なRIGを作ることができます。


別の方法としてもう1つ。
Jointの進行方向のScaleに値を入れる方法を取りましたが、
arcLengthの値 / Jointの数 を、進行方向のtranslateに入れる でも同じことができますが、この場合Jointの間隔は均等になります。

以上、簡単なSetup講座でした。

伸びるSplineIKを作る」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。

*