2016/02/15

mayaのスケーリングについて

リアクション: 
mayaでのスケールは複雑怪奇。
あまりスケールにキーを打つことはありませんが
キャラクターにスケールをかけるときがあると、末端の挙動が
おかしくなることが良くあります。というか大抵予測通りに行かない。
なので、少し調べてみました。

mayaで、AとB両方からCにスケールコンストをしたときのブレンドの式を答えなさい。
こちら分かりますか?

結論から言うとこうなります。

C = √(A * B)

画像を見ても分かるかと思いますが、線形ではありません。
FKとIKのスケールを平均でブレンドするなら、エクスプレッションや
ノードエディターで工夫しないといけません。




pairBlendノードを使って

C = (A + B) / 2

をしました。
こちらは、意図した結果になります。
使い方のポイントとしては、pairBlendのTranslateにScaleを突っ込みます。


次の構造は、良く見る階層です。
手に武器用のロケーターが付いたものです。
武器と仮定した外にあるロケータに、parentとscaleのコンストをかけました。




この階層で、rootのtransformノードに、Xスケールをかけてみます。

すると、武器ロケーターのスケーリングの挙動がおかしくなります。
scaleコンストは、shearには興味が無いようです。

この場合は、shearの値を接続してあげればOKです。
グローバルの値をダイレクトに入れます。


ノードエディタを使用して、shearのみ接続します。
武器骨のWorld Matrixから、decomposeMatrixノードに繋ぎ
Output Shearから、武器のShearに接続します。

ノードエディタで、decomposeMatrixノードの出し方は

1.) TABを押す
2.) decと入力
3.) TABを2回押す

と楽に出ます。

IKとFKのブレンドは、こちら画像の接続をするとうまく行くかと思います。
Matrixのブレンドは、wtAddMatrixノードを使用します。
wtAddMatrixノードは、出したままですと、入力を受け付けません。
ですので、一度ノード上で右長押しから、Show All Attributeを選択すると、接続が出来るようになります。

真ん中辺りのmultMatrixノードは、武器の構造が階層だった場合
親の逆Matrixをかけて、ローカルへ変換しています。

このやり方は、pivotを動かしているノードを絡める場合、pivotも考慮
してあげる必要があります。
Rigですと、普通にpivotを動かしていますよね。
このケースは次回ということで(実は良く分かっていません・・・笑)

では。

3 件のコメント:

匿名 さんのコメント...

はじめまして。私はリガーです。
日本語はあまり得意ではありませんのでご了承ください。
私もwtAddMatrixに興味をもちました。

質問なのですが、
triple chainを実装する時について
2種類のノードのtranslate,rotate,scaleをblendして第三のノードを動かす時
1.両方のノードから第三のノードにconstraintする。
2.両方のノードを同じ原点を親としながらblendcolorを3つ用意して第三のノードに接続する。
2'両方のノードをdecomposeMatrix2つにそれぞれ接続してそれらをblendcolor3つに接続すし第三のノードに接続する。
3.両方のノードをwtAddMatrixに接続してdecomposeMatrixより第三のノードに接続する。

などが考えられますがどれが速度が速いのでしょうか。
私の考えではconstraintを2重にかけるのはバージョンごとにバグがあったり、
そもそもconstraintは重いのに二重にかけるのはよくないとおもうのです。
私の勘なのですが速度が速い順番に2、3、2'だと思うのですが、
経験上どれが一番速度が速いかご存知ですか?

Atsushi Tsugaruya さんのコメント...

はじめまして。書き込みありがとうございます。

wtAddMatrixの速度に関しては、このブログでは取り上げてませんが、結構重いです・・・。
恐らくですが、早い順に

2 > 2` > 3

だと思います。
ただし、2の原点のノード計算を考慮に入れると2と2`はさほど変わらないように思えます。

wtAddMatrixは、どちらかというと、Animator向きなのかも知れません。

僕はAnimatorなので、wtAddMatrixはたまに使います。

rigger さんのコメント...

ご丁寧にありがとうございます。
私のほうで検証する機会があったので結果を報告します。
2が圧倒的に早いです。また2'のdecomposeもほとんど時間に影響せず、
知覚できないほどの違いしかありませんでした。
結果はおっしゃるとおり2>2'>3でした。