まず、技術的な内容は置いておいて
どういう理屈で伸びるかを考えてみます。
IKがセットされたジョイントが伸びる。
これは、その伸びがどれだけ伸びるのかを実寸ではなく
伸び率(何%になるか)で表すことができれば、その数値分だけ骨も伸びているということになります。
その割合をdistanceツールを使用して計算します。
伸ばしたときの長さ/default位置(IKをセットした位置)の長さ = 伸び率
という式が成り立つので、
この数値をはじき出せればstrechの完成となります。
と言うわけで実作業。
まずは骨を用意してIKをセットし、
Measure Tools → Distance Tool
で、IKが入っている骨と同じ位置にロケーターを配置します。
次にロケーターをconstraintします。(Maintain offsetはoffでconstraintします)
armでLocator1をpointconstraint
ikHandle1でLocator2をpointconstraint
※ikHandle1は本来であれば直接動かすものではなく
コントローラーを作ってconstraintしますが
簡単に説明する為に、ここではikhandleでconstraintしています。
こんなの普通やりませんw
これが終わってからikHandle1を動かすと、
arm~hand間の距離が数値で表示されるようになります。
ここで骨がまっすぐになる直前くらいまで
ikHandle1の位置を調整します。
骨が曲がったままだと、
その状態のまま伸びてしまう構造なので
ギリギリまで伸ばしておきます。
ここでは
ikHandle1.tx = 5.1978 (見た目で伸びきる直前と判断した数値です)
を入力してあります。
次にHyperShadeで下記のようにノードを用意します。
現在の距離は10.198となっています。
これからの作業は、これ以上の数値になったときに
現在の距離の何倍になるかを計算し
その数値を骨に代入する、という作業を行います。
まずはdistanceDimension1のshapeノードとconditionノードを繋ぎます。
distance を First Term とColor if trueR につなぎます。
さらにsecond Term にデフォルトの距離を入力
OperationをGreater Than(大なりの意味:First Term>Second Term)に変更
※このへんのノードの詳細はMayaのオンラインヘルプに載ってます。
これで10.198よりも数値が大きくなったら場合、その数値をtrueRとして出力し
10.198と同じかそれ以下だった場合、その数値をFalseRとして出力します。
次にconditionノードとmultiplyDivideノードを繋ぎます。
outColorRをInput1xに繋ぎます。
OperationをDivideに変更し
Input2xをデフォルトの距離にします。
これでmultiplyDivideノードから出力される数値が
欲しい情報である距離の倍率になります。
最後にmultiplyDivideノードのoutputXをarm,elbowのscaleXにそれぞれ繋げば完成です。
大丈夫だとは思いますが
もしかしたら不具合があるかもしれません。
もし使用される方がいれば
その辺はご了承の上使用していただければと思います。
というかサッカーが気になって
なかなか作業が進まなかったw
さらにはこのストレッチってほとんど使ったこと無いですw
使うのは伸びきったときに伸びるのではなく
骨のスケールを直接いじる方だったりします。
まあ知識として知っておいて損は無いでしょう。
これからはサッカーに集中!
ガンガレ日本!!
0 件のコメント:
コメントを投稿