HEXA BLOG

デザイン

HEXA BLOGデザイン2019.5.13

TA と Maya Node Editor その5

こちらに記事を書くのはこれで8回目となります。
今回も、どうぞよろしくお願い致します。

TAにとって開発上の問題点を解くのに技術的な引き出しを色々な持っておくことが必要、
について・・また少し紹介したいと思います。

前回の記事内容

TA と Maya Node Editor その4


に引き続き、Mayaの Node Editorまわりの話、その5です。

キャラクターセットアップ等に便利に使える手段の1つです。

前回は、ワールド座標のベクター(Vector)の話が出て来ましたが、
今回は、ワールド座標値を扱う行列、英語で言うとマトリックス(Matrix)について
触れてみたいと思います。

では、さっそく・・

ちょっと具体的な、面白い対処法、でもあったら『おお、使えるかも』
・・って思うようなものをまたご紹介していきましょう。

5) 「Maya NodeEditor を使った マトリックス」

マトリックス(行列) を使うことによって
オブジェクトの位置/回転/スケール値を簡単に扱えるようになります。

NodeEditor ではマトリックスを扱うノードとして decomposeMatrix を良く使います。

下図例では、group3 から3階層下に locator1 があり、

その位置に decomposeMatrix を使って Cone1 の位置を設定しています。

この状態では、locator1 より上位階層の 各groupオブジェクト をどんなに
移動/回転/スケールをさせても Cone1 は locator1 を追従します。

これはコンストレイント機能を使った場合、
ポイントとオリエントとスケールを同時に設定した時の動作と同等になります。

しかし、これらのコンストレイントを設定した状態を NodeEditor で見てみると、
pointConstraint、orientConstraint、scaleConstraint の各ノード間の接続が
たいへん状態になっていることが分ります。

これを手でつなげようとは考えもしないことでしょう。
また、この複雑さは処理速度にも違いがあるかと思われます。

さて、更なる考察です。
上記、コンストレイントを使って作った設定ですが、
Cone1 が、group2 や group1 などの階層下に置いた場合でも
きちんと最下層の locator1 を追従します。

ところが、decomposeMatrix を使った方は、
World上に置いてある状態の位置/回転/スケールで接続していたので、
group2 や group1 などの階層下に置いた場合は、
最下層の locator1 に正しく追従しない結果になってしまいます。

そこで、例の 親逆行列 が出て来ます。
multMatrix という複数のマトリックスを計算するノードを1つ追加し
Cone1 の親逆行列を計算するように接続します。

すると、Cone1 がどの階層下にあったとしても
きちんと最下層の locator1 に追従するようになります。

 

では、また別の考察です。
locator20 が curve6 上をU値を変化させることで
カーブ上を移動するという モーションパス に関しても、

設定後の状態を NodeEditor で見てみると、
移動と回転を計算している接続が少し複雑です。

これを先ほどの 親逆行列 と multiMatrix で構築してみると
pointOnCurveInfo と組み合わせることで実現します。

すると pointOnCurveInfo の パラメータ値を変更することで
カーブ上を移動するようになります。

この状態で良ければ、非常に簡単なノード接続でカーブ上の
移動が実現できたのですが、良く見ると移動値にしか接続していない点から
察すしますように、移動のみなので、カーブが変形した場合
カーブ上に沿うLocatorは回転しないことになります。
モーションパス で設定した方はきちんと回転しています。

カーブに沿って回転もするようにするには
以前、この NodeEditor についてのブログの中で紹介した
vectorProduct(外積) を2つと、
fourByFourMatrix を使った例になります。

2つの vectorProduct は共に [外積] であり
最初の vectorProduct_Z と名前を付けた方は
[入力1] の Y値に 1.0 が入っていて
pointOnCurveInfo9 からの接線が [入力2]
につながっています。その下の [レ] 出力の正規化 は
両方の vectorProduct(外積) に入っています。
fourByFourMatrix には12箇所接続します。

すると、
これでカーブに沿って locator21 が回転するようになります。

fourByFourMatrix を使った方も少々つながりが複雑になりましたが
こちらの方が良い点もあります。

カーブに沿って動く locator を選択して
あえてY軸方向に動かしてみようとすると
モーションパス の方は動いてしまうのですが、
fourByFourMatrix の方はびくとも動きません。

下図のような、bezierCurve のクラスターを円カーブで
変形するようなRigを作った場合に、
カーブに沿って動かすものを用意して、
その locator を引っ張ってしまった場合、
やはり動かない方が好ましいかも知れません。

このカーブに沿わせる仕組みを fourByFourMatrix を使って
構築できると、更に面白いことが出来るそうです。

といったところで、今回はここまで。

また次回も、NodeEditor についての続きが出来たらと思っております。

ではでは。

*—–
Ritaro

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE