スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
バネのリグ
大変お久しぶりです。
約3ヶ月ぶりの更新です。
もしも更新を待ち望んでいた方がいらっしゃいましたら
すみませんでした。そして本当にありがとうございました。

以前からの記事でも何度か書いたとおり、
4月から就職をして、今では毎日あくせく働いています。

昨年は大学4年生だったので時間もたくさんあり
MEL 講座などの連載記事も書いていましたが

今後は方針を少し変えて、
個人的なメモ中心のブログになると思います。
そして更新頻度もあまり多くならないと思いますが
なんとか時間を見つけて継続していきたく思っています。


さて、先日 Maya でバネを作ろうとしたのですが、
例えば

110703_1.png

このようなオブジェクトが

110703_3.png

こうなるのが理想ですが、

これを単純に縮小や拡大して変形しても、当然バネそのものの変形されてしまい

110703_2.png

このようになってしまいました。

そこで、バネそのものを変形せずにバネの伸び縮みをするよう作ってみました。


global proc createSpringRig(float $c, float $h, float $w, float $r, float $sa, float $sco)
{
string $basePoly[] = `polyHelix -h $h -w $w -c $c -r 1 -sa 3 -sco $sco`;
setAttr ($basePoly[0] + ".rotateX") 90.0;

float $loopEdge = 3 * ($sco * $c + 1) + 2;
polySelectSp -loop ($basePoly[0] + ".e[" + $loopEdge + "]");

string $helix[] = `polyToCurve -f 2 -dg 3 -n "helix"`;
string $circle[] = `circle -nr 0 1 0 -r $r -s $sa -n "circle"`;

string $ext[] = `extrude -po 1 -ucp 1 -fpt 1 -upn 1 -rsp 1 -n "mesh" $circle[0] $helix[0]`;
string $lat[] = `lattice -dv 2 2 2 -oc 1 -ldv 2 2 2 $helix[0]`;

string $clst1[] = `cluster ($lat[1] + ".pt[0:1][0:1][0]")`;
string $clst2[] = `cluster ($lat[1] + ".pt[0:1][0:1][1]")`;

polyNormalizeUV -nt 1 -pa 0 $ext[0];

aimConstraint -mo $clst1[1] $clst2[1];
aimConstraint -mo $clst2[1] $clst1[1];

delete $basePoly[0];
hide $helix[0] $circle[0] $lat[1] $lat[2];
group -n "spring1" $helix[0] $circle[0] $ext[0] $lat[1] $lat[2] $clst1[1] $clst2[1];
}
createSpringRig(10, 100, 10, 1, 8, 50);


見ての通り、単純に Extrude の Input の
螺旋を定義している方の曲線のみを変形させているだけです。

110703_4.gif

最後にコントローラー用の Cluster をお互いに Aim Constraint させて
3次元空間で自由にコントロールしても崩れないようにしています。

これは単純な例ですが、リギングをする際には
どのノードにどういう影響を与えたらどうなるか、ということを常に考えなければならないようです。

せっかくバネを作ったので、こういったパーツ毎のリグを考えて
最終的にそれを組み合わせてメカニックなものをリギングしたいな、と思っています。
コメント
管理者のみ閲覧可能にする
Profile
HN らい

都内某社テクニカルディレクター
都内某専門学校講師
都内某企業講師
元中国某社S3Dスーパーバイザー
Contact
(ENGLISH OK. 可以用中文。)
Categories
Archives
RSS Link
QR Code