2025/01/07

utilityNodeのご紹介

こんにちは。
株式会社デジタル・フロンティアのリガーR.K.と申します。

この度BACKBONE様の『リグ道場』カリキュラム型教育にて人型コントロールリグ開発を2カ月間受講させていただきました。今回はユーティリティノードについてご紹介したいと思います。
本記事では制御する側を「コントローラ」制御される側を「ターゲット」と表記しています。環境:Maya 2020.4
※R.K様のリグ道場の受講は終了しております。受講時に作成いただいた記事になります。

 

◆ユーティリティノードのご紹介

リグ作成時によく使用するユーティリティノードをアトリビュートと共にご紹介します。

 

■multiplyDivide

アトリビュート
input1,2 float3
 ー input1,2(X/ Y/ Z) float
output float3
 ー output(X/ Y/ Z) float

乗算・除算・累乗に使用されるノードです。
3軸の値をそれぞれ乗算・除算したい場合によく使用します。
translate同士の接続は、入出力共にunitConversionは作成されず直接接続されます。

translateとrotateとの接続は、入出時にunitConversionが作成されます。
※unitConversionについてはこちら

 

■plusMinusAverage

アトリビュート
input1D float
input2D float2
 ー input2D(X/ Y) float
input3D float3
 ー input3D(X/ Y/ Z) float
output1D float
output2D float2
 ー output2D(X/ Y) float
output3D float3
 ー output3D(X/ Y/ Z) float

加算・減算・平均値を求める際に使用されるノードです。
値を加算・減算したい場合によく使用します。
multiplyDivideと同様の挙動でunitConversionも作成されます。

 

■pairBlend

アトリビュート
inTranslate1,2 double3
 ー inTranslate(X/ Y/ Z)1,2 distance (double)
inRotate1,2 double3
 ー inRotate(X/ Y/ Z)1,2 angle (double)
outTranslate double3
 ー outTranslate(X/ Y/ Z) distance (double)
outRotate double3
 ー outRotate(X/ Y/ Z) angle (double)
weight double

値のブレンドに使用されるノードです。
2つのノードのtranslate, rotateを切り替えたい場合によく使用します。
translateとrotateとの接続は、入出時にunitConversionが作成されます。

例:pairBlendノードにtranslate, rotateを接続

【使用例】IKFKのrotate切り替え

この例では、IKFKjointの動きをpairBlendを通してブレンド用のjointへ出力しています。pairBlendのweightアトリビュートを使用してブレンド具合を調整できます。

例)weight = 01
inRotate1 (影響1000%)
inRotate2 (
影響0100%)

 

blendColors

アトリビュート
color1 float3
 ー color1,2(R/G/B) float
output float3
 ー output(R/G/B) float
blender float

色々な用途で使用できますが、リグでは値のブレンドで使用する事が多いノードです。
2つのノードのscaleを切り替えたい場合によく使用します。
scaleの切り替えは、前述のpairBlendのinTranslateX,Y,Zに対しても接続できますが、pairBlendのアトリビュート名がTranslateになっているので混乱を避けるためこちらを代用しています。
またfloat型のため、double型との誤差が気にならない場合に使用できます。

【使用例】IKFKのscale切り替え

この例では、pairBlendと同様にIKFKscaleの値をblendColorsを通してブレンド用のjointへ出力しています。blendColorsのblenderアトリビュートを使用してブレンド具合を調整できます。
注意点:pairBlendweightとは逆の挙動になります。

例)blender = 0
1
color1 (影響0100%)
color2 (
影響1000%)

 

■addDoubleLinear , multDoubleLinear

アトリビュート
input1, 2 distance (double)
output distance (double)

加算・乗算に使用されるノードです。
値を加算・乗算したい場合によく使用します。
translateを直接接続できますが、translateX, Y, Zそれぞれに一つずつ作成する必要があります。
input1のみノードを入力してinput2に数値を手動入力することも可能です。

例: addDoubleLinearのinput1に入力されたtranslateの値に対して、input2に手動入力した2を加算して出力

例:multDoubleLinearのinput1,2に入力された2つのtranslateXの値を乗算して出力

 

floatMath

※plug-in ManagerでlookdevKit.mllをloadすると使えるようになります。

アトリビュート
floatA,B float
outFloat float

floatAとfloatBの値をOperationのモードで計算するノードです。
加算・減算・乗算・除算などを選択して使用できるため、float型の計算処理の場合によく使用します。
といいますか、主にこのノードを使用しています。

例:floatMathのFloatAに入力された値をtranslateXの初期値で除算しscaleXへ接続


Operationで計算方法を切り替え可能

 

■choice

アトリビュート
input generic typed data
output generic typed data
selector long

入力値をselectorアトリビュートでインデックス番号を指定することで出力する値を切り替えられるノードです。
異なる入力値を切り替えたい(ペアレント先の切り替えなど)場合によく使用します。
inputとoutputの型であるgeneric typed dataは様々な種類のデータを入出力することができます。

【使用例①】 異なる動きや状態の切り替え

下記の例では、choiceノードには各ノード(スフィアー/コーン/キューブ/シリンダーオブジェクト)のworldMatrixを接続しています。choiceからの出力は、decomposeMatrixを介して移動、回転、スケールの各値に変換します。

更に、カスタムアトリビュート(Parent Space)を作成してselectorアトリビュートに接続すると、チャンネルボックスで任意の値を選択できるようになります。
結果はこちら。

 

■transformGeometry

アトリビュート
inputGeometry Generic
transform matrix
outputGeometry Generic

ジオメトリに対して特定の変換(移動、回転、スケールなど)を適用する機能を持つノードです。
Generic型もgeneric typed data型と似ていて、入力される型に応じて柔軟に接続が可能なアトリビュートです。

【使用例】 jointでデフォームした後にジオメトリを制御

こちらはskinClusterノードとmeshノードの間にtransformGeometryノードを組み込んだケースです。
Sphere_geo(スフィアー形状)はsphere_jtにバインドされているためsphere_jtで制御できます。
加えて、offset_controller(ロケーター)でも制御できるといったリグになります。

結果がこちらになります。

 

◆まとめ

今回は、リグ制作で良く使用する計算系のユーティリティノードをご紹介させていただきました。
各ノードの入出力一覧はよく使用するアトリビュートに絞ってご紹介しましたが、他にもアトリビュートがあります。また他にも、condition、setRange、distanceBetween、closestPointOnSurfaceなど便利なノードが沢山あります。ご興味がある方は調べてみてください。

本記事が皆さまのリギングの一助になれば幸いです。
ではまた!

 

※免責事項※
本記事内で公開している全ての情報について、その完全性、正確性、適用性、有用性等いかなる保証も行っておりません。
これらの情報のご利用により、何らかの不都合や損害が発生したとしても、当社は何らの責任を負うものではありません。
自己責任でご使用ください。



ブログTOPへ戻る