前回の記事の「MayaでStretch IK(translateX版)」の続きです。
単なるStretchIKを作成する場合はスキニングを考慮するとscaleX版の方が好ましいことがわかりましたが、この肘(膝)固定IKを作成するためにはtranslateX版である必要があります。
ということで今回は肘(膝)固定IKに挑戦します。
頬付けを付いたり、膝をついたりする場合に重宝することになります。また、メタルギアソリッドシリーズでおなじみのほふく前進のアニメーションをつけるときにも欲しい機能です。
前回作成したシーンから始まるのでまだ読んでいない方は前回の記事を御覧ください。
前回のシーンへDistanceDimensionを2つ追加
前回のシーンにcreate > Measure Tools > Distance ToolsでDistanceDimensionを2つ追加します。この2つのDistanceDimensionで上腕(joint1の付け根)から「vector_ctrl」の長さと「vector_ctrl」から手首(joint3)までの長さを測ります。それぞれのLocatorをスナップさせてそれぞれの位置に移動させます。
移動させたら、上のHyper Graphのようにそれぞれを適切な階層に入れます。
Node Editorでノードを組む
Node Editorを開いてblendColorノードを追加して上の画像のように繋げます。
blendColor1のColor1RにupperArm_to_VShapeのDistance(上腕の付け根からベクターコントローラーへの距離)を接続。
blendColor1のColor2Rにjoint2.translateXのアニメーションを接続。
blendColorのoutputをjoint2のtranslateXに接続します。
joint3への接続も同じようにblendColorノードを作成して繋ぎます。
blendColor2のColor1Rにv_to_lowerArmShapeのDistance(ベクターコントローラーから手首への距離)を接続。
blenColor2のColor2Rにjoint3のtranslateXのアニメーションを接続します。
jointのtranslateXの長さをベクターコントローラーと上腕の距離とベクターコントローラーと下腕の距離とそれぞれ同じにするとベクターコントローラーに肘(膝)がスナップします。
これで完成ですが、肘(膝)固定IKとSteretchIKとの切り替えスイッチを作ります。
肘(膝)固定IKとStretchIKの切り替えスイッチ
ベクターコントローラーである「vector_ctrl」に切り替えスイッチのattributeを追加します。
Modify > Add Attribute…で「elbow_snap」というアトリビュートを追加します。
Data Typeは「Enum」にします。
Enum Namesに上から「off」「on」にします。
これで「off」「on」で切り替えできるアトリビュートが追加されました。
次は実際に「elbow_snap」が機能するようにNode Editorで接続します。
上の画像のように「vector_ctrl」の「Elbow Snap」を2つのBlendColorの「blender」に繋げます。
これで「on」「off」で切り替えるスイッチが出来ました。
赤いチョッキの少年
「vector_ctrl」の「Elbow Snap」を「on」にすると肘が「vector_ctrl」にスナップして上のような挙動になります。
これを見て思いだしたのがセザンヌの赤いチョッキの少年です。
著作権の扱いがよくわからなかったので昔美術館で買った絵葉書をアップしておきます。ちゃんとした絵が見たい人は検索してください。
この腕を思い出しました。
明らかに長くておかしいですが、これで良いのだそうです。
したがって、このリグは上腕や下腕の長さはアニメーターがコントロールしなければなりませんが私はそれだけ自由度があったほうが良いと考えています。
今回の記事が気に入っていただけた場合、ぜひとも他の記事もチェックしてみてください。Mayaのリギングに関する記事をまとめたページです。
コメント