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