[UE4]Control Rig機能調査:補助骨制御
ここはControl Rig機能調査の子頁です
補助骨制御
前置き
これはSkeleton Editorで hand_r と lowerarm_twist_01_r を交互にX軸回転している様子
hand_rを回すだけで袖が追従してきて欲しい所だが、Skinningの仕組み上こうなっている
いわゆるEpic Skeleton対応モデルは皆同じ構造になっている
普段これを意識する事はないかもしれないが気になる時もある
Retargetして持ってきたAnimationのtwist骨がモデルとあまりマッチしない時
IKで手足を動かした時
一般的なAnimationアセットでは、twist骨にも動きがつけてある
この節では、これを解決するControl Rigを作成する
問題解決の場を整える
Control Rigで問題解決しようとしているので、Control Rig Editor内で問題を再現させると試行錯誤がしやすい
とりあえず2つ手段がありそう
手段1: 問題再現用Animation Sequenceで再現
Skeletonアセットを開く
Sequence Recorderで録画開始
上述のgifのように手首をぐりぐり動かす
録画終了
出来上がったAnimation SequenceをControl Rig EditorのPreview Scene Settingで再生指定
手段2: 問題再現用Controlで再現
GDC2019講演のように、確認用Controlを作成してControl Rig EditorのViewport内で任意に回転できるようにする
Control Rigの機能確認をする趣旨であるから、この記事では手段2で話を進める。
Controlの作成
hand_rの回転制御Controlなので、hand_rの位置にControllerを置きたい
Rig Hieararchyの空いているところを右クリックしてNew -> New Space
さらにNewControlSpaceを右クリックしてNew -> New Control
右手首用なので…HandRControlとか名前を付けておく
Controlはユーザーが制御できるTransform
SpaceはControlを扱いやすくするための踏み台
Controlの用途に応じて位置を調整する
ControlのGizmoを扱いやすくする
hand_rの現在位置にGizmoが来てほしい
GetTransformとSetTransformを使う
見た目調整
赤い球をViewportでクリックするか、HandRControlをRig Hiearachyで選択
Detailsで好きなようにいじる
今回は回転制御なのでハンドルっぽくした
hand_rの回転をtwist骨に反映する
手首のX軸回転量を参照してtwist骨を回転させたい
Get Transformは「現在の姿勢」が取れる
このノードが参照される時点での姿勢
AnimationやIK処理を考慮できる
Get TransformでInitialにチェックを入れると「初期状態の姿勢」が取れる
つまりBind Pose(Skeleton Assetの姿勢)
両者の差分が回転量になる
Controlの回転をhand_rに反映する
OffsetTransformノードを使う
これは入力されたTransformぶん「追加」で姿勢を変更するノード
HandRControlのLocal SpaceなTransformを「追加」すればよい
Propagate to Childrenを有効にしないと、指が付いてこないので注意
今回のセットアップでは、Spaceを調整することでHandRControlの変更量がそのままOffsetになるようにした
SetTransformノードとかSetRotationノードとか他にも使えそうなものは色々あるので、試してみると良い
「このGizmoでは回転のみ反映させたい」とする場合、Transformピンを展開してRotationだけ繋ぐのも良いだろう
ViewportでGizmoを回すと、手首も追従して回転する
ここまでで「手首の回転に袖が付いてこない」問題が再現できた
極端に回した時にちぎれそうになるのが気になる場合、X軸回転量をMultiplyやClampで調整
異なるSkeleton Meshに適用
別のモデルにもこのControl Rigが有効なのか試してみる
ここでは、Epic Skeleton互換かつUE4 Mannequinと著しく体系が異なるブループリントちゃんを使わせて頂く
Preview Meshを変更してCompile
HandRSpaceの再計算により、Gizmoの位置が合う
発展
左手の分を作る場合は、Replace処理が役立つかもしれない