2011年1月30日日曜日

FKIK stretch④ stretch解説

まず、技術的な内容は置いておいて
どういう理屈で伸びるかを考えてみます。

IKがセットされたジョイントが伸びる。
これは、その伸びがどれだけ伸びるのかを実寸ではなく
伸び率(何%になるか)で表すことができれば、その数値分だけ骨も伸びているということになります。

その割合をdistanceツールを使用して計算します。
伸ばしたときの長さ/default位置(IKをセットした位置)の長さ = 伸び率
という式が成り立つので、
この数値をはじき出せればstrechの完成となります。

と言うわけで実作業。
まずは骨を用意してIKをセットし、
Measure Tools → Distance Tool
で、IKが入っている骨と同じ位置にロケーターを配置します。










次にロケーターをconstraintします。(Maintain offsetoffconstraintします)
armLocator1pointconstraint
ikHandle1Locator2pointconstraint

ikHandle1は本来であれば直接動かすものではなく
コントローラーを作ってconstraintしますが
簡単に説明する為に、ここではikhandleでconstraintしています。
こんなの普通やりませんw

これが終わってからikHandle1を動かすと、
arm~hand間の距離が数値で表示されるようになります。

ここで骨がまっすぐになる直前くらいまで
ikHandle1の位置を調整します。 












骨が曲がったままだと、
その状態のまま伸びてしまう構造なので
ギリギリまで伸ばしておきます。

ここでは

ikHandle1.tx = 5.1978 (見た目で伸びきる直前と判断した数値です)

を入力してあります。

次にHyperShadeで下記のようにノードを用意します。











現在の距離は10.198となっています。
これからの作業は、これ以上の数値になったときに
現在の距離の何倍になるかを計算し
その数値を骨に代入する、という作業を行います。











まずはdistanceDimension1shapeノードconditionノードを繋ぎます。

distanceFirst TermColor if trueR につなぎます。
さらにsecond Term にデフォルトの距離を入力
OperationGreater Than(大なりの意味:First Term>Second Term)に変更
※このへんのノードの詳細はMayaのオンラインヘルプに載ってます。

これで10.198よりも数値が大きくなったら場合、その数値をtrueRとして出力し
10.198と同じかそれ以下だった場合、その数値をFalseRとして出力します。

次にconditionノードmultiplyDivideノードを繋ぎます。











outColorRInput1xに繋ぎます。
OperationDivideに変更し
Input2xをデフォルトの距離にします。

これでmultiplyDivideノードから出力される数値が
欲しい情報である距離の倍率になります。

最後にmultiplyDivideノードoutputXarm,elbowscaleXにそれぞれ繋げば完成です。












大丈夫だとは思いますが
もしかしたら不具合があるかもしれません。
もし使用される方がいれば
その辺はご了承の上使用していただければと思います。

というかサッカーが気になって
なかなか作業が進まなかったw
さらにはこのストレッチってほとんど使ったこと無いですw
使うのは伸びきったときに伸びるのではなく
骨のスケールを直接いじる方だったりします。
まあ知識として知っておいて損は無いでしょう。

これからはサッカーに集中!
ガンガレ日本!!

0 件のコメント:

コメントを投稿