リギングで凄く便利な最強ノード、Channel Relationshipについて書いてみます。Channel Relationshipは入力されたチャンネルの値にもとづいて、出力の値を変えることができる便利なノードです。
例えばロケータの位置を使用して別のアイテムを回転することができます。
上の画像ではロケータがY軸に1mに移動しとき円柱は180°回転しています。
それの何が便利かというと、Relationshipはチャンネルタイプによって単位の異なる値をリマップすることができるからです。
Relationshipを使用せずに「位置Y」を「回転Z」に直接リンクした場合は、1m=1 という値が回転に出力されるため 1° しか回転しません。Relationshipを使用することで、1m=180°という異なる単位の値を簡単に変換して制御することができるようになります。
さらにRelationshipが便利なのは、入力と出力のマッピングにグラフエディタを使用できることです。
値をマッピングするためのカーブはベジェハンドルで編集できるので、位置が移動するにつれて徐々に回転数が上がっていくという設定が手軽にできます。
グラフエディタでは「入力」が横軸、「出力」が縦軸で表示されます。
Channel Relationshipの使用例として、角度によってスケルトンが移動するリグを作ってみました。簡単に作れて便利です。
作成手順です。
- バインド済みのモデルとスケルトンを準備します。
- スケルトンを選択して、「回転Y」「位置Z」チャンネルをスケマティックにドラッグアンドドロップします。
- Channel Relationship を追加し、「回転Y」を「入力」にリンクします。
- スケルトンの「位置Z」の値をコピーします。
- Channel Relationshipの「出力」を「位置Z」にリンクします。
- グラフエディタの「値」チャンネルでキーを選択し、キーにコピーした「位置Z」の値を設定します。
- -90°にキーを作成し値を調節します。
これはスケルトンが-90°に回転したとき、スケルトンの位置Zをどのくらい移動するかを指定しています。
この例ではFKを使用してますが、IKを使用したい場合には「ワールド回転からローカル角度を計算する方法」または「角度測定ノードで360°測定する方法」が参考になると思います。
もしスケルトンはスライドさせず回転の基点になる位置を変えたい場合は、ピボットを使うとよいです。
Channel Relationshipを使うと手の回転にあわせて腕をひねったり、アイテムの位置でライトの色を変えたり、アイテムの回転でパーティクルの放出量を制御したり、アイデアしだいでいろんなリグを作ることができて楽しくなりますね。
おまけ
modoは1ノードまでのループなら「依存ループ」にならず機能するという便利な特長があります。「依存ループ」というのはチャンネルの値を他のノードで計算して、その計算結果が同じチャンネルに戻ってループした状態を言います。値がループしてるので通常は計算不能でエラーになる処理なのですが、modoでは1ノードのループ限定で動作するようです。
下の画像のように自分の「位置Y」から「位置Y」にループしてリンクすると、Y軸の移動範囲を制限することができます。同じ事は Clamp ノードでもできるので好きな方を使ってみてください。
カーブを1m間隔のステップにすると、1m感覚でナップ移動するような動作になります。昔の2Dゲームにあったマップチップ単位で移動するような動きですね。モーショングラフィックなんかにも使える気がします。
次はRelationshipを使って「ホーミングミサイル」や「Sculpt Layer」の記事で使ってる、スライダーのようなコントローラの作り方について書いてみます。こういうコントローラがあると一気にリグ作ってる感じがしますね。