はじめに
前回の続きです
https://qiita.com/maxima_hikky/items/8e7b0992b821f5c657a8
ここで扱うのは以下です
- 親子付け
- 抽象コントローラー、成分の分離
変更点
名前
Rig Doctorでつけた連番の名前だと分かりづらいので
skeltonの名前の変更をしました

APEX Configure Controls の追加
Graphの中でコントローラーの形や色の変更をするとノードが増えてごちゃごちゃするので
APEX Configure Controlsを最後に追加して変更するようにしました

コントローラーについて
- Transform Object node がコントローラー
- そのコントローラーを動かしたり表示するには必要に応じてt,r,sのいずれかをpromoteする必要がある
- promoteするにはinputが必要であり、inputの名前はparmsが推奨されている
-
Transform Object nodeの名前が
APEX Configure ControlsでつけたControl group にpatternがマッチしていれば
APEX Configure Controlsで定義したコントローラーの外観になる
作成したコントローラーは以下でトランスフォームを変更できる(テスト用)
T : 移動
R : 回転
E : スケール
N : リセット
パラメーター名の変更
一部のノードのパラメーター名は中ボタンクリックで変更できる
t t1 t2 などの名前だと区別がつかないので適宜変更する

Fuse Graphの便利なところ
Fuse_Graphの大きな特徴として
-
Transform Object nodeの名前を既に存在しているコントローラー名にしたとき
既存のコントローラーを参照したノードになる(新たにコントローラーは作らない) -
Transform Object nodeの名前を存在していないコントローラー名にしたとき
コントローラーになる
この名前による参照のおかげで
テスト用のリグを本流に合流させるといったことが簡単にできる。
親子付け
リギングの基本になる親子付けを作ります
L_shoulderの親のコントローラーの作成
これで親子付けされているけど、勿論 L_shoulder_parentをL_shoulderの位置にしたい
restlocalの設定
Value Matrix4 nodeを2つ作成しそれぞれの名前を
- L_shoulder__REST (こっちはこの名前の必要がある)
- Ident (こっちは何でもいいが単位行列という意味にした)
L_shoulder__REST にはL_shoulderの rest_tranform(Matrix4)を取得するという意味がある
rest_tranform(Matrix4)にはリギングに入る前のskeltonのtransformが格納されている
L_shoulder__RESTを以下のように繋ぐとこうなる

何故か?
繋ぐと分かるけどL_shouderにもL_shoulder__RESTを繋ぐと先程と結果が同じ

つまりL_shoulder__RESTが二重に影響している結果
考えてみると、
参照で持ってきたL_shoulderのrestlocalはL_shoulder__RESTのはずで当然の結果と言える
そこでIdentを繋ぐと望みの結果になる
これは、
L_shoulder__RESTを変換をしないIdentで上書きしたことで
restlocalを親のL_shoulder_parentだけが持つように修正したということ
shouder ,elbow, wrist それぞれにコントローラーの作成と
参照は緑色、新規は黄色とノードに色付けて分かりやすくして完成!

抽象コントローラー、成分の分離
既存のスケルトンとは関係なく、
コントローラーのX方向へのドラッグで、別のコントローラーを回転させる仕組みを作ります
Fuse Graphの準備
親子付けの下にコピペ後 graphの中身は消去
Abstract Controlの作成
rig::Abstract Control nodeを作成後、xをpromote

Abstract ControlをMatrix4を使って移動

コントローラーの作成と成分分離
Abstract Controlのドラッグで動かすx成分を
rotateというコントローラーのy成分の回転のrestlocalに接続
コントローラーの外観と制限の追加
Abstract Controlの最小最大制限が初期だと-10 10なので 回転にふさわしいように-180 180 に変更して完成!









