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を動かしていますよね。
このケースは次回ということで(実は良く分かっていません・・・笑)

では。

コメント

匿名 さんのコメント…
はじめまして。私はリガーです。
日本語はあまり得意ではありませんのでご了承ください。
私も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'だと思うのですが、
経験上どれが一番速度が速いかご存知ですか?
garu さんの投稿…
はじめまして。書き込みありがとうございます。

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

2 > 2` > 3

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

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

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