株式会社デジタル・フロンティア-Digital Frontier

Header

Main

  • TOP
  • DF TALK
  • ≪セットアップ室≫Maya Utilityノードのセットアップでの使い方 第1回

≪セットアップ室≫Maya Utilityノードのセットアップでの使い方 第1回

2015/2/19

Tag: ,

初めまして。SU室、期待の新人の栁澤[@Null0218]です。笑
早いもので、昨年4月に入社してからもうすぐ1年が経ちます。

私事ですが先日、個人的に作ったツールを3D人さんに取り上げていただきました。
とても嬉しいですし、ありがたい事なのですが『どーてぃ』と検索すると、
上位に私の名前もヒットするようになってしまいました。
皆さんもツール名にはくれぐれもお気をつけください。
 
 
 
さて、今回はmayaでセットアップをする際に役立つUtilityノードの使い方についてご説明させて頂きたいと思っています。
ただノードの数も多いので、まず第1回目はどういったノードがあるのか簡単にご紹介をしたいと思います。

そもそもUtilityノードとは

UtilityノードというのはHypershadeのcreateタブにあるUtilitiesの中のノードのことです。
おもに数値の演算などを行うことができます。

これらのノードの組み合わせで計算を行うことにより(場合によりますが)expressionなどより速い評価が望めます。
それではセットアップでよく使いそうなノード一つ一つ簡単にご紹介したいと思います。
 
中にはmatrixの計算をするノードも存在するのでこちらの記事も合わせてご覧ください。
わかった気になるマトリックス
わかった気になるマトリックス 第2回
わかった気になるマトリックス 第3回
わかった気になるマトリックス 第4回
 

カテゴリ

単一計算系
3軸計算系
matrix系
計測系
制限系

 
 

単一計算系

単一計算系は一つの値と一つの値を計算し出力するノードです。
 

addDoubleLinear

cmds.shadingNode('addDoubleLinear', au=True)

input1とinput2の和をoutputするノードです。
 

multDoubleLinear

cmds.shadingNode('multDoubleLinear', au=True)

input1とinput2の積をoutputするノードです。
 


3軸計算系

3軸計算系は三つの値と三つの値を計算し出力するノードです。
 

blendColors

cmds.shadingNode('blendColors', au=True)

color1とcolor2の割合をblenderの値で割合を決め出力します。
本来はtextureなどをブレンドしたい時に使いますが、セットアップの際はAの値とBの値を行き来したい時に使用します。
例)FK用jointのrotate値とIK用jointのrotate値をそれぞれcolor1とcolor2にコネクションし、
blenderの数値でFKとIKのrotate値を切り替えます。
 

multiplyDivide

cmds.shadingNode('multiplyDivide', au=True)

operationにより計算方法が異なります。
No Operation・・・input1の値をそのまま出力します。
Multiply・・・input1の値とinput2の値の積を出力します。
Divide・・・input1の値からinput2の値の商を出力します。
Multiply・・・input1の値をinput2の値でそれぞれ累乗した結果を出力します。
 

plusMinusAverage

cmds.shadingNode('plusMinusAverage', au=True)

このノードは三軸計算系に分けましたがinput1D~input3Dまでinputの数を選択できます。
さらに、このノードのinputは配列型なので複数の値を入力できます。
operationにより計算方法が異なります。
No Operation・・・inputの最初の値をそのまま出力します。
Sum・・・inputに繋がれた全ての和を出力します。
Subtract・・・inputに繋がれた順番に全ての値の差を出力します。
Average・・・inputに繋がれた全ての値の平均値を出力します。
 

reverse

cmds.shadingNode('reverse', au=True)

1からinput1の値をそれぞれ減算して出力します。
なぜreverse(反転)なのかというとinputが1の時に0をoutputし、inputが0の時に1をoutputするためです。
visibilityなどの2値で扱われるものに使用します。
 

vectorProduct

cmds.shadingNode('vectorProduct', au=True)

Vector Matrix Prduct、Point Matrix Prduct用にmatrixを入力することもできます。
operationにより計算方法が異なります。
No Operation・・・inputの最初の値をそのまま出力します。
Dot Product・・・input1の値をinput2の値で内積して出力します。
Cross Prduct・・・input1の値をinput2の値で外積して出力します。
Vector Matrix Prduct・・・input1の値とmatrixの積を求めベクトル座標を出力します。
Point Matrix Prduct・・・input1の値とmatrixの積を求め点座標を出力します。
Normalize Outputにチェックを入れると正規化された値を出力します。
※Vector Matrix PrductとPoint Matrix Prductの違い
Vector Matrix Prductは方向ベクトルが出力されるのでmatrixのtanslate部分は加味されません。
Point Matrix Prductはmatrix上の点座標なのでtanslate部分も加味されます。
この手の計算はexpressionで書くよりノードで計算した方が後々見やすいと思います。
 


matrix系

matrix系は4×4の行列計算ができるノードです。
matrixを使うと擬似コンストレインや、ベクトルの向きから回転値を導き出すこともできます。
ここではどのようなmatrixの演算がノードで出来るのかだけを簡単に説明します。
※ノードによってはmatrixNodes.mllというプラグインをロードしないと使えないのでご注意ください
 

addMatrix

cmds.shadingNode('addMatrix', au=True)

このノードにはmatrixInという配列型のinputがあり、複数のmatrixを入力できます。
matrixInをに接続された行列全ての和を出力します。
 

wtAddMatrix

cmds.shadingNode('wtAddMatrix', au=True)

addMatrixのmatrixInにweightがつけられるノードです。
matrixInにweightInの値を乗算して繋がれた配列全ての和を出力します。
 

multMatrix

cmds.shadingNode('multMatrix', au=True)

このノードのmatrixInも配列型なので複数の値を入力できます。
matrixInをに接続された行列全ての積を出力します。
 

composeMatrix

cmds.shadingNode('composeMatrix', au=True)

taranslate、rotate、scale、shear等のアトリビュートをmatrixに変換し出力します。
 

decomposeMatrix

cmds.shadingNode('decomposeMatrix', au=True)

composeMatrixの逆の計算を行います。
matrixをtaranslate、rotate、scale、shear等のアトリビュートに変換し出力します。
 

fourByFourMatrix

cmds.shadingNode('fourByFourMatrix', au=True)

16個の数値を入力することができ、それらを4×4のmatrixとして出力します。
 

inverseMatrix

cmds.shadingNode('inverseMatrix', au=True)

入力されたmatrixの逆行列を出力します。
 


計測系

計測系はノード間の角度や距離を求められるノードです。
 

angleBetween

cmds.shadingNode('angleBetween', au=True)

vector1とvector2のなす角を求め出力します。
rotateでドリブンキーを設定する場合こういったノードを組み合わせることでフリップしにくくなります。
 

distanceBetween

cmds.shadingNode('distanceBetween', au=True)

point1とpoint2の距離を求め出力します。
点座標(point)はmatrix(inMatrix)でも代用可能です。
strech表現のrig等で使えます。


制限系

制限系はinputの値の範囲や条件を決めることができます。
 

clamp

cmds.shadingNode('clamp', au=True)

inputの値の最少値~最大値を決めて出力することができます。
最少値  < input < 最大値 ならばinputを出力
input < 最少値  ならばminを出力
最大値 < input ならばmaxを出力
 

condition

cmds.shadingNode('condition', au=True)

expressionでいうところのif文です。
First TermとSecond TermがOperationの条件と合っていればColor If Trueを出力しそうでなければColor If Falseを出力します。
 
 
セットアップで使うUtilityノードはこれくらいでしょうか。
もちろん、この他にもノードはたくさんあって組み合わせ次第では面白いことがたくさんできます。
デフォルトの機能ではできないことも組み合わせ次第では実現できるかもしれません。
なんかすごくワクワクしますよね!笑
 

せっかくここまで説明したのでこんな感じでも使えますという簡単な一例を…
前の記事でご紹介した通りセットアップ室ではclothシュミレーションも行っております。
nClothを使う際、nucleusのWind Directionってベクトルの数値入力になっていて設定しにくいですよね。
このような分かりにくいベクトルも、こんな感じでUtilityノードを使えば使いやすくなるかもしれません。

vectorProductのoperationはVector Matrix PrductでNormalize Outputにチェックを入れ、direction_rootの階層下にdirection_tipを配置させればdirection_rootのrotateでWind Directionを編集することができます。

(クリックすると再生されます。)
※動画では見やすくするためにannotationを使っています
…と、このような感じで使い道は様々です!
 
次回は今回の内容を踏まえて、ノードネットワークの組み立て方の例をあげてご説明したいと思っております。
皆様も是非Utilityノードを使ってみてください!
 
 
 
※免責事項※
本記事内で公開している全ての手法・コードの有用性、安全性について、当方は一切の保証を与えるものではありません。
これらのコードを使用したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。
自己責任でご使用ください。

 
DFセットアップ室では、リギングアーティストを大募集中です。
一緒に魅力的な作品を作っていきましょう!
詳しくは、下記の募集要項をご覧ください。

https://www.dfx.co.jp/careers/designer/rigging-artist.html

コメント

コメントはありません

コメントフォーム

コメントは承認制ですので、即時に反映されません。ご了承ください。

CAPTCHA


 

*