MayaでStretch IK(translateX版)

TX_stretchIKMayaでRigging

以前の記事ではscaleX版を解説しましたが、今回はStretchIKのtranslateX版です。ScaleX版とは手法が違うのでscaleX版をまだ読んでいない人はそちらも御覧ください。

また、ジンバルロックとRotate Orderやjoint orientについての記事もありますのでそちらに馴染みがない方は重要なことなのでまずはそちらから御覧ください。これらの演習は必ずjointのX軸が子の方向を向いている必要があります。この意味がわからない方はかならずjoint orientについての記事を読んでください。

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

なぜscaleXではなくtranslateXなのか

ほぼ「手法の違い」です。基本的にはやりやすい方、わかりやすい方を選べばOKです。

ただ個人的な印象としてはSquash and Stretch(背骨や触手など)するリグではscaleXを、Stretch(腕や脚など)だけするリグはtranslateXを使用していることが多い気がします。

また、可能性は少ないと思いますが、scaleXを使った場合はスケール時にシアーの問題がでてきてしまう恐れがあるためにtranslateXを使ったほうが良いのではないかと個人的には思います。特にヒジやヒザがまっすぐではなく、IKハンドルを引きやすいようにすこし曲げてある場合はより注意が必要かもしれません。このあたりは本当は経験豊富な人の意見を伺いたいです。

追記

Twitterでご指摘いただいたのでスキニングをして検証してみました。

scaleX版のStretch
scaleX版
translateX版のStretch
translateX版

gif動画が不鮮明で申し訳ないです。

scaleX版はメッシュが綺麗に伸びているのがわかります。それに比べてtranslateX版はメッシュが不均一であるだけでなく手首にあたる部分にweightが乗っていません。

実用するためにはもう一本jointをコピーしてscaleX版でstretchするように制御する必要があります。またはスキニングで工夫する必要がありそうです。

単純にstretchIKを作りたい場合はscaleX版のほうがベターです。

ではなぜtranslateX版を解説するかと言うと、

次回の記事で扱いますが、ヒジ(ヒザ)固定(スナップ)IKというものを作る場合にはこのtranslateX版で作る必要があります。実はこれを解説するためにtransalteX版のStretchIKをとりあげました。

というわけで今回はtranslateXを使用した方法を解説します。

Set Driven Keyを使う

作成するシーンはscaleX版のものと途中までは一緒です。まずはscaleX版の記事を参考に以下のようなシーンを作成します。

「手法の違い」ということで今回のtranslateX版StretchIKは「Set Driven Key」を使用します。

IKハンドルの長さがデフォルトの場合はjoint2とjoint3のtranslateXの値は初期値のままで、IKハンドルの長さがデフォルトの2倍の場合はjoint2とjoint3のtranslateXの値は初期値の2倍になる。

このような設定をSet Driven Keyで設定します。

Windowで設定できないのでMELを使う

ところが、困ったことにSet Driven Keyのインターフェイスでは設定できる項目が限られています。

よって、隠された項目にアクセスするためにはMELスクリプトを使用しなければなりません。

string $driver = "armDimensionShape.distance";
float $upperArmLen = `getAttr joint2.translateX`;
float $lowerArmLen = `getAttr joint3.translateX`;
float $armLength = $upperArmLen + $lowerArmLen;

setDrivenKeyframe -currentDriver $driver -driverValue $armLength -attribute "translateX" -value $upperArmLen joint2;
setDrivenKeyframe -currentDriver $driver -driverValue $armLength -attribute "translateX" -value $lowerArmLen joint3;
setDrivenKeyframe -currentDriver $driver -driverValue ($armLength * 2)-attribute "translateX" -value ($upperArmLen * 2) joint2;
setDrivenKeyframe -currentDriver $driver -driverValue ($armLength * 2)-attribute "translateX" -value ($lowerArmLen * 2) joint3;

MELを使用するとこのようになります。

scaleX版のStretchIKとの違いで注意しなければならないところがあります。

scaleX版の場合はjoint1(upperArm)のscaleXの値を変更するとupperArmが伸びました。しかし、このtraslateX版の場合はjoint2(lowerArm)のtranslateXに入っている数値を変更することによってjoint1(upperArm)の長さが変わります。当たり前といえば当たり前なのですが、scaleX版との違いで注意が必要です。

これでドリブンキーの設定はできました。しかし、実際に動かしてみればわかりますが、この設定では2倍までの値までしか対応していません。3倍以上の長さにも対応させる必要があります。

ドリブンキーが設定されたjointをGraph Editorで見てみるとこのように自動でイーズインイーズアウトが自動で入っているのでこれを「Linier」に直して適切な挙動にします。

Graph EditorのメニューのView > Infinityでキーが打たれている範囲の前後のグラフも表示させます。デフォルトではPre InfinityとPost Infinityの両方が「Constant」になっていて同じ値がずっと続くようになっています。

カーブの終点を選択してCurves > Post Infinity > Cycle with Offsetを選択します。するとキーが打たれていない部分でもカーブの傾きが維持されるようになりました。

どういうわけかGraph EditorはclassicでないとドリブンキーのPost InfinityのCycle with Offsetが表示されませんでした。modernのGraph Editorでも表示されないだけで設定はできます。ここではスクリーンショットをとるためにclassicにしただけです。

これをドリブンキーが設定された両方のjointに対しておこないます。

ちなみにPre InfinityをCycle with Offsetにするとどうなるでしょうか。

StretchIKのScaleX版part1でも解説したように腕が縮みます。

また、今回は全体スケール対応はしていません。全体スケール対応については以前の記事を参考にご自分で考えてみてください。

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

また、FKとIKの切り替えやFKとIKのマッチングについて興味がある方は過去の記事を御覧ください。

MayaでFKとIKブレンド(切り替え)方法
MayaでFKとIKのブレンド(切り替え)方法を解説します。ブレンドと切り替えについては人それぞれ好みがあると思います。私は補間してくれるブレンドは嫌いではありませんが、キーを沢山打たなくてはならないアニメーターとしては数値をいれてキーを...
MayaでFKとIKのマッチング(位置合わせ)方法 part1)
前回の記事(MayaでFKとIKブレンド(切り替え)方法)の続きとして、FKとIKのマッチング(位置合わせ)について解説します。前回の記事で作成したシーンを使用します。よって前回の記事をご覧になっていない方はまずはそちらを御覧ください。...

次回

次回は前にも少し書きましたが、ヒジやヒザを固定できるIKです。

若杉さんによると「肘固定ができたら神」とのことでしたので次回は神の領域(笑)に挑戦します。

追記

フリーリグで肘(膝)固定がないのは手間がかかるわりにあまり使われないことと、複雑さが増して重くなってしまうからでしょう。

Follow me!

コメント

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