HEXA BLOG

デザイン

HEXA BLOGデザイン2020.4.30

TA と Maya Node Editor その7 (一旦最終回)

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

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

前回の記事内容

TA と Maya Node Editor その6


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

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

前回は サーフェイス に fourByFourMatrix を使って
locator を沿わせることが出来ました。
今回は、他オブジェクトにも沿わせることで更に面白い使い方について
触れてみたいと思います。

では、さっそく・・

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

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

NodeEditor では fourByFourMatrix と2つの vectorProduct(外積)
を使うことによって 対象とするカーブに沿って
移動と回転もするように出来ました。

今回は、カーブではなくて、凹凸のあるポリゴンの板上に沿ってくれる
ようにしたいと思います。

この場合に使うノードとして closestPointOnMesh が登場します。

前準備として位置を決める Locator を作成します。
cnt   位置決めロケータ

地面を想定したポリゴン板で真ん中を少し膨らませておきます。
colMesh 中央盛り上がり

そしてポリゴン板上を沿わせる立方体ポリゴンを用意します。
obj   cubeポリゴン

blog_20200430_00

closestPointOnMesh に 3つ接続します。
位置決めロケータ cnt を [入力位置]    に、
地面を想定した  colMesh を [入力行列]   に、
colMeshのシェイプ    を [入力メッシュ1] に接続します。

ですが、closestPointOnMesh の入力形式に合わせて
位置決めロケータ cnt は、その [ワールド行列] から
decomposeMatrix を使って [出力移動] を [入力位置] に接続します。

closestPointOnMesh の [位置] を cubeポリゴン (obj) の
[移動] に接続すれば完成です。

blog_20200430_01

Locatior (cnt) を左右に動かすと ポリゴン板 (colMesh) 上を移動します。

blog_20200430_02

ここで気が付くのは高さは合ってますが、回転値が付いて無い事です。
そこで例の fourByFourMatrix が出てきます。

closestPointOnMesh から出力される値を見ると
[位置] と [法線] しかないので、また外積を使う事になります。

blog_20200430_03

closestPointOnMesh からの出力値。
[位置] はそのまま fourByFourMatrix の 入力 30、31、32 に接続します、
[法線] はそのまま fourByFourMatrix の 入力 10、11、12 に接続します。

後の2組は 外積を挟みます。

最初の 外積 (vectorProduct_ax_Z) は
入力1 が 1.000、0.000、0.000 です。

blog_20200430_04

入力2 に closestPointOnMesh からの法線を接続します。
そこから出力X、Y、Z、は 入力 20、21、22 に接続します。

もう1つの外積 (vectorProduct_ax_X) です。
こちらは
入力1 に closestPointOnMesh からの 法線 を接続します。

blog_20200430_05

入力2 に 外積 (vectorProduct_ax_Z) からの 出力 を接続します。
そこから出力X、Y、Z、は 入力 00、01、02 に接続します。

blog_20200430_06

fourByFourMatrix の出力は decomposeMatrix に入力して
cubeポリゴン (obj) の 移動 と 回転 値を接続して、終了です。

うまくいきましたでしょうか?

親の Locator (cnt) を前後左右に動かすと cubeポリゴン (obj) が
地面を想定したポリゴン板 (colMesh) 上をスライドします。

blog_20200430_07

ここからもう一歩先に進めます。
黄色の立方体ポリゴンがキャラクターリグ用の足だとして、
地面に対して衝突判定があるようにしてみたいと思います。

Locatior (cnt) をY軸方向に上下した場合、
cubeポリゴン (obj) は ポリゴン板 (colMesh) より上の場合は
Locatior (cnt) と一緒に上下し、
下になった場合は ポリゴン板 (colMesh) 上にとどまるようにするとします。

このような条件分岐には condition がまず考えられます。

blog_20200430_08

fourByFourMatrix の後ろの部分は、
単に Locator (cnt) からの decomposeMatrix の [出力移動Y] 値から
fourByFourMatrix [出力] からの decomposeMatrix の [出力移動Y] 値を減算し、

blog_20200430_09

その結果を condition の [第1項] につなげます。
[第2項] は 0.000 としておきます。
true の場合のカラーは 最初の値しか使わなく、1.000 とし、
false の場合のカラーは、0.000 としておきます。

blog_20200430_10

condition の [出力カラーR] は次に pairBlend の [ウェイト] に接続します。
この pairBlend には、[入力回転1] [入力移動1] には
Locator (cnt) からの decomposeMatrix [出力回転] [出力移動] がつながり
[入力回転2] [入力移動2] には fourByFourMatrix [出力] からの
[出力回転] [出力移動] がつながり、 [ウェイト] で割り振るようにします。

blog_20200430_11

Locatior (cnt) を上下した場合、ポリゴン板 (colMesh) より上では
cubeポリゴン (obj) が一緒に上下し、下の場合は
ポリゴン板 (colMesh) 上にとどまります。

blog_20200430_12

うまくいった感じなのですが、ポリゴン板 (colMesh) が斜めな場所で
Locatior (cnt) を上下した場合、ポリゴン板 (colMesh) に触れる所で
クルッといきなり回転してしまいます。

blog_20200430_13

これは condition の条件で 0 か 1 かの判定値しか無いからです。

そこで、0 ~ 1 までの値を計算し、尚且つそれ以外の値は確実に出力しない
clamp を使います。

blog_20200430_14

plusMinusAverage の減算の入力は逆になっていることが注意点です。
つまり、ポリゴン板 (colMesh) より上の時はその [出力1D] は
常にマイナス値になります。

blog_20200430_15

clamp は 最小値 0.000 、最大値 1.000 とし、[入力R] に接続します。
clamp の [出力R] が pairBlend の [ウェイト] とつながっています。

今度はどうでしょうか?

blog_20200430_16

断然滑らかなのですが、少し地面に沈んてから浮き上がるようです。
これは 0 ~ 1 までの変化がもっと加速度的に急に変化する必要がありそうです。

そこで、最後の仕上げとして、plusMinusAverage と clamp の間に
multiplyDivide を入れ 乗算として 入力2 の最初の欄に 7.000 を設定します。

blog_20200430_17

今度はどうでしょうか?

blog_20200430_18

かなり改善されていると思います。
まだまだ、と思う方は是非カスタマイズしてみてください。

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

また次回からは新しく 異なる話題のシリーズ が出来たらと思っております。

blog_20200430_19

ではでは。

*–
Ritaro

RECRUIT

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

RECRUIT SITE