[UE4]Control Rig機能調査:IK制御

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

IK制御

  • IKを使って右腕を任意の位置に動かしたい

Control設定

  • Rig HierarchyからSpaceとControlを作成

  • 詳しくは補助骨制御のページ参照

  • Spaceを手首位置に持っていくノードを設定

  • Gizmoをお好みで設定

細かい話

  • Spaceを挟まずにいきなりControlを置く手法もある

    • 公式のMannequin Rigはそうなっている

    • Controlを選択してから手首付近で右クリックしてSet Initial Transform from Closest Boneすればよい

  • どっちにするかはRigの用途による

    • 特定のSkeletal Meshのみを対象にするRigで、Animationと併用しない場合はSpaceなしでも良さそう

    • 本記事では汎用性重視でSpaceを使うことにする

IKノード作成

  • BasicIKノードを使う

    • Effector Itemに位置指定したい骨を指定(hand_r)

    • Item Bに↑の親の骨を指定(lowerarm_r)

    • Item Aに↑の親の骨を指定(upperarm_r)

    • Propagate to Chidrenを有効に

    • EffectorにはControlのTransformを入力

    • Primary AxisでX=-1.0にする

      • hand_rのX軸が親の方向を向いているため

      • 同じことをhand_lでやる場合はX=1.0のままでよい

  • 肘の向きも指定できるようにしたい

  • Basic IKノードにあるPole Vectorを使って指定できる

  • ここでは簡単に、HandRControlのX軸方向に沿って肘が動くようにしてみる

  • ControlのTransformでLocation=(100,0,0) を変換すると、hand_rの根本方向100cmの位置が取れる

    • 肘がそこを目指すようにする

  • Pole Vector SpaceはNoneのままにしておく。これでGlobal Spaceという事になる様だ

  • Basic IKノード選択中、DetailsタブにDebug Settingsの項目が現れる

  • 有効にしておくとPole Vectorの作用がわかりやすくなる

  • 青色がBone A及びBone B、水色がPole Vector

  • もっと肘位置を細かく制御したい場合は、Pole Target用のControlを別途用意する

Control Rig処理の連結

  • IK処理に加えて、別頁で紹介したTwist制御を行いたい場合、少なくとも2つ方法がある

  • どちらを採用すべきかは求める機能による

  • 1つは単純に、このIK処理の後にノードを接続する

  • もう1つは、ABP側で二段階Control Rigを通す



余談

  • こういうノードもある

  • このノードは単にTransformだけでTwoBone IK計算されるようだ

  • Basic IKノードでは計算結果は自動的に設定対象の骨に反映されるが、そうしたくない時に役立ちそう