[UE4]Control Rig機能調査:補助骨制御

ここはControl Rig機能調査の子頁です

補助骨制御

前置き

  • これはSkeleton Editorで hand_r と lowerarm_twist_01_r を交互にX軸回転している様子

  • hand_rを回すだけで袖が追従してきて欲しい所だが、Skinningの仕組み上こうなっている

  • 普段これを意識する事はないかもしれないが気になる時もある

    • 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処理が役立つかもしれない