4
4

自作人型コンロールリグを作ろう

Posted at

コントロールリグとは?

image.png
コントロール リグ (Control Rig) は、アーティストフレンドリーなインターフェースを備えた、柔軟で動的なプロシージャル キャラクターを作成するためのツールをリガーに提供するために設計されたノードベースのリギング システムを有効にします。しかし、ブループリントとは異なり、コントロール リグはブループリント仮想マシン (VM) を利用せず、独自の軽量な VM を使用してコードを変換します (大抵はコピーと実行)。ユーザーは、 リグ ユニット と呼ばれるノードをコントロール リグ グラフで接続することにより、ランタイム リグとアニメーション リグを作成することができます。(公式ドキュメントより)

リグとは?

スキニングまでおこなえば、3Dモデル自体を動かすことは可能です。ただ、スケルトンやメッシュ自体を逐一移動させアニメーションを作る必要があるため、非常に手間が掛かります。
そのため、よりアニメーションを簡易化するために追加のリグの設定(リギング)をしていきます。リギングによりアニメーターがキャラクターを直感的に分かりやすく、動かせるようになります。

要はボーンが入ったメッシュをよりアニメーションさせやすくするのがリグ、リグをつける作業がリギング、UEではリグをControlRigというシステムでつくる。ということです(多分)

なるほど便利や。しかし思いました。

公式のMannyのControlRig、設定項目が多すぎる。

腰を曲げるにも5個くらいパラメーターを操作しないといけないし膝とかもIKと膝の向き両方設定しないといけない。こんなの一個一個フレーム打っていたら時間がかかってしょうがありません。

よっしゃ少ない項目でいい感じにしてくれるControlRigつくったろ。リグ一回作れば一生使えるし。

そういう記事です。

今回の記事では、FullBodyIKのボーンの制限が動いたり動かなくなったりと安定しないことから選択的に「5.2」を使用しています。5.2以降のバージョンを使用した場合、まったく違った動作をする可能性が高いです。
再現する方はご注意ください。

今回の記事でできるもの

image.png
image.png

今回の記事でできるものは計19個のコントロールでいい感じにするControlRigです。
制御点
・Root
・腰
・頭
・右手
・左手
・右足
・右足つま先
・左足
・左足つま先
・両手指10本

ページリンク

ControlRigの前提知識
コントロールリグのコントロールを追加するには?
ボーンやコントロールを取得する
ControlRigを組む
コントロールの追加
Forwards Solve側
Backwards Solve編
いざベイク

ControlRigの前提知識

Forwards Solve/Backwards Solve って何?

image.png
公式ドキュメント ソルブの方向

ざっくりいうと

・Forwards Solve → コントロールからボーンへの働きかけ
・Backwards Solve → ボーンからコントロールへの働きかけ

です。
アニメーションを作るときはコントロールを動かしてボーンをうごかすのでForwards Solveで、逆にアニメーションをコントロールリグにベイクするときはボーンの位置からコントロールを決定しているのでBackwards Solveになります。

コントロールリグのコントロールを追加するには?

コントロールリグのコントロールはリグ階層の空白かボーンを選択した状態で右クリックし、新規→新しいコントロールを選ぶと追加できます。
image.png

ボーンを選択した状態でコントロールを追加すると、選択されていたボーンが親になります。
ボーンが親の状態だとコントロール自由に動かせないので、親から解除する必要があります。
image.png
コントロールを選択して親から解除を選ぶことで解除することができます。

ショートカット

コントロールを追加
・Ctrl+N
親から解除
・Shift+P

またボーンを複数選択した状態で新規→Add Controls For Selectedを選ぶことでまとめてコントロールを追加することができます。
image.png

ボーンやコントロールを取得する

ボーンやコントロールなどはBluePrintなどの変数と同じような感じで選択→ドラッグ&ドロップすることでGet・Setを行うことができます。
image.png

ControlRigを組む

今回のRigの基本方針

・できる限り少ないポイント数で
・おおむね使うポイントを制御
・ベイクもできる

基本構造

指→指全体の曲げ伸ばしのみ対応(第一関節から第三関節まで同じ角度を入力)
Body→FullBodyIKでおおむね対応
足→つま先だけは表現に必要そうなのでつける

コントロールの追加

以下のボーンにコントロールを追加します
・Root
・pelvis
・head
・hand_r
・hand_l
・Foot_r
・Foot_l
・ball_R
・ball_l
・各指の第一関節のあたり

コントロールを親子付け(BluePrintのコンポーネントの親子付けと同じ感じでいけます)
image.png
このような階層構造になるようにしてください。
見た目はどれでも構いません。

各指、つま先はコントロールを選び「現在からOffsetトランスフォームを設定」を選んで詳細タブ→トランスフォームがすべて0(原点)になるようにしてください。

image.png

「現在からOffsetトランスフォームを設定」を実行すると、一部のコントロールの向きが180度逆向きになります。
そのままでも問題ありませんが、気になる場合は詳細の 「形状」 の方から角度を設定してください。
image.png

ForwardsSolve側

今回作るControlRigの全体像です。
CR_SuperRig-Rig Graph.png

Forwards Solveから始まりSequenceで分岐しています。

Root

image.png

RootのコントロールからTransformを取ってボーンのTransfromにセット

CR_SuperRig-Rig Graph_0.png

指の位置座標とコントロールの角度の座標を合成
image.png
Transfromを開くと分解することができます。

指のコントロールはすべての関節につかえるよう現在からOffsetトランスフォームを設定してしまっているので、GetとSetを両方ともTypeを「Local Space」にしておきます。

これをすべての指の全関節分行います。
設定し終わると指が伸びきった状態になっていると思います。

image.png

image.png
腰もRootと同じようにコントロールのTransformを取ってPelvisのTransformに入力しています。
FullBodyIKでも腰のエフェクターを取っているので一見いらないように見えるのですが、これを入れないと腰をねじることができなくなります。

つま先

image.png

指と同じように、ボーンから位置座標を取り、コントロールから角度を取ってボーンに入力しています。
これを設定すると、おそらくつま先が天を仰いでると思いますが正解ですimage.png

FullBodyIK

フルボディIKは一番最後に設定するのがおすすめです。
↓全体像
CR_SuperRig-Rig Graph_6.png

Root

Pelvisを選んでください。

Effectors

FullBodyIKが通る座標を入力する場所です。
image.png
「+」の配列要素の追加を押して配列を6個追加してください。
image.png
・head
・Pelvis
・hand_r
・hand_l
・foot_r
・foot_l
のコントロールを取得して入力します。
image.png

Bone Settings

これだけですでに動きます。が、このままだと膝が逆方向に曲がったり方が垂直に上がったり愉快な動きをします。のでBone Settingsで優先的に曲がる方向を設定したりBoneの動きやすさを設定していきます。

各パラメータ

Rotation Stiffness :曲がりにくさ
position Stiggness :うごきにくさ
XYZの :自由に動く/角度内に制限/ロック から制御できる
preferred Angles :優先的に曲がる角度(膝とかに使う) 上のUse preferred Angles がTrueでないとしようされません

以下のパラメータはあくまでも筆者が動かしやすいや~となるように設定しているので必要に応じてカスタマイズして下さい

・pelvis(腰)
image.png
Rotation Stiffnessを1にしてください

・Spine_05(肩の付け根の背骨)

image.png
Rotation Stiffnessを1にしてください

・Spine_01(pelvisの一個上の背骨)
image.png
preferred Anglesを使用し、Z90方向に優先的に曲がるようにしてください。

・neck_01(Spine_05の一個上の首)

image.png
Rotation Stiffnessを0.9にしてください

・clavicle(両肩分作ってください)
image.png
Rotation Stiffnessを1にしてください

・upperarm(両腕分作ってください)
image.png
position Stiggnessを1にしてください
preferred Anglesを使用し、Y30方向に優先的に曲がるようにしてください。

・calf(両膝分作ってください)
image.png

ZにMin0Max90の制限をかけて下さい

・thigh(両足分作ってください)
image.png
Rotation Stiffnessを0.8にしてください
YにMin0Max40の制限をかけて下さい
preferred Anglesを使用し、Z-100方向に優先的に曲がるようにしてください。

Bone Settingsは以上です。
現状5.3以降でこのBone Settingsがうまく動作しない(特にRotation Stiffness)が確認されています。

Excluded Bones

全く動かないボーンです。
image.png
今回は
・spine_02
・spine_03
・spine_04
・neck_02
を追加します。

これでForwards Solve側の設定は完了です。
レベルにD&Dするとすでにシーケンサーで動かすことができます。

BackwardsSolve編

次はBackWardsSolve(アニメーションをベイクするときに使う側です。
↓全体像
CR_SuperRig-Rig Graph_9.png

Forwards Solveに比べてなんと少ないのでしょう。

こちらもBackwards Solve Solveから始まりSequenceで分岐しています。
順番的には
Root→FullBodyIKのコントロールの設定→指→つま先
で行っていますが組み替えても大して影響はないと思います。

Root

image.png
Forwards Solveの逆です。Rootボーンを取得し、Rootのコントロールに入力しています。

CR_SuperRig-Rig Graph_10.png

コントロールリグでは 角度を分解できません
なので全関節の角度を平均して~とかできません。
よって第二関節の角度と位置からコントロールの座標を求めることとします。第一関節はさておき第二関節が曲がっているときは大体第三関節も曲がっているので。
image.png
第一関節の位置と第二関節の角度をコントロールに入力します。これをすべての指分行います。

つま先

image.png
つま先もForwards Solveの逆です。Ballボーンを取得し、各コントロールに入力しています。

FullBodyIKの部分

CR_SuperRig-Rig Graph_11.png
IKはコントロールの位置から計算してボーンを入力します。
コントロールの位置は特に理由がなければ大体各EffectorのボーンのTransfromと合致します。
つまりボーンのTransfromをそのままコントロールに入力するだけでいいのです。
RootやBallと同じように
・hand_r
・hand_l
・foot_r
・foot_l
・head
・pelvis
のボーンを取得してコントロールにTransfromを渡してください。

BackwardsSolveの設定は以上です。難しいことなんてありません。コントロールの位置を設定するだけです。

いざベイク

二体のMannyを準備しました。
image.png
通常色側にベイクして、金色側と比較しようと思います。

image.png
コントロールにベイクを選ぶと、自作したものがあるはずです。(Backward Solveがないと表示されないようになっています)
image.png
キーの削除はお好みで

ControlRigBakeTest.gif

できました。
ややはみ出していたりあってない部分があるのがFullBodyIKの苦しいところ。まあIKでやってると思うと(個人的には)妥当な範囲です。気になる人はいい設定を追求してみてください。そして筆者に教えてください。(大声)

最後までお読みいただきありがとうございました。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4