Unreal Engine 勉強会 ~UE5におけるIKの実装方法~


こんにちは。ゲーム事業部(東京)のエンジニアの笠松です。

今回もアドグローブのゲーム事業部内で定期的に開催しているUnreal Engine(以後、UE)勉強会について、自分が発表した内容をご紹介します。


目次


はじめに

「UE勉強会って何?」「どんなことをやっているの?」などの紹介については、以下の記事をご参照ください。
blog.adglobe.co.jp

今回はUE5におけるIKの実装について、基本的な設定から実装例まで3回に分けてご紹介します。

  • UE5におけるIKの実装方法(今回の記事)
  • IKRigによるFootIKの実装例
  • IKRigによるツタ登り中の実装例

なお、記事中のUEのバージョンは、5.0.2になります。


IKとは

ざっくりと説明するとIK(Inverse Kinematics)とは、ボーンを直感的に動かすための技術で、SkeletalMeshのモーション再生に加えて、足を段差に合わせたり、武器によって手の位置を変えたりということが可能になります。

Inverse(逆)と言うのは、そもそもFK(Forward Kinematics)というボーンなどを直接回転させる技術があり、その逆を意味しています。
例えば、手を特定の位置に移動させることを例にすると、FKとIKはそれぞれ以下の様なイメージになります。

  • FK:肘を回転、移動させて、手を特定の位置に移動させる
  • IK:手を特定の位置に移動させ、その位置に合うように肘を回転、移動させる

もう少し具体的な説明については、以下の公式ドキュメントをご参照下さい。
docs.unrealengine.com


UEにおけるIKの実装方法

UEでは、IKを実装するための方法は以下の通り3つ用意されています。

  • AnimationBPのノードによるIK実装
  • ControlRigによるIK実装
  • IKRigによるIK実装

AnimationBPのノードによるIK実装

AnimationBPに直接専用のノードを組み込むことで実装が可能です。
こちらは、UE4から正式実装されている機能になります。

具体的に言うと、以下のようなTwo Bone IKFABRIKノードなどが挙げられます。

ControlRigによるIK実装

IK設定がされているControlRig(CR)AssetをAnimationBPの専用ノードで組み込むことで実装が可能です。
こちらは、UE4.16からExperimentalとしてリリースされており、UE5で正式実装された機能になります。(そのためUE4では、Pluginから有効にしないと利用できないため注意)

そもそもCRとは、UE内で直接リギングしてアニメーションを作成できる機能で、その中の一部としてIK機能が用意されています。 また、UE5のTPSテンプレートで実装されているFootIKもCRで実装されています。

IKRigによるIK実装

IK設定がされているIKRigAssetをAnimationBPの専用ノードで組み込むことで実装が可能です。
こちらは、UE5で正式実装された機能になります。

そもそもIKRigとは、UE4にあったアニメーションのリターゲット機能が一新され、ボーンの構造が違う場合のアニメーションのリターゲット時に使用される機能で、その仕組を利用してIKを表現しています。

それぞれの特徴をざっくりをまとめると以下の通りになります。

IK実装方法 処理の保守性 機能の利便性 個人的なオススメ度
AnimationBPのノードによるIK実装
IK毎にノードや対応する変数を用意してやる必要があり、IKの種類によっては、ABPが非常に肥大化する
IK毎にノードが別れており、設定も基本ピンでの公開ができない
UE5を使う場合、使用する意味はほぼなし。(プロトだとしても他の機能を使ったほうが圧倒的に楽で実装可能)
ControlRigによるIK実装
基本的にCRBP上で処理を書く必要があるため、IKの種類によっては、CRBP側の処理が肥大化する
CR自体のリギングと合わせて、IKができるため、細かいモーション調整や出来ることの幅は広い
エンジン上でのリギングをしたり、デザイナーがIKを主導する場合は、オススメ(Experimentalではあるが、UE4でも実装可能)
IKRigによるIK実装
IKRig自体はあくまでIKの設定のみで、処理に必要なデータはコード上で用意できるのでエンジニア的には保守しやすい
名前の通りIKの機能に特化しているため、それ以上の機能はない
コードとの連携もでき、CRほど細かい設定がないため、簡単なIKをエンジニアが主導する場合は、オススメ

というわけで、今回からの一連の記事では、IKRigによるIK実装及びそのために必要な設定をご紹介します。


IKRigAssetの設定

基本的なIKRigによるIK実装の方法は、公式のドキュメントにまとまっていますが、必要なところをピックアップして触れていきます。
docs.unrealengine.com

IKRigAssetは大きく分けて、以下の3つの設定で構成されてます。

  • ソルバ(以下画像の赤枠
    どういうIKを行うかの設定で、前述したTwo Bone IKFABRIKなどが用意されています。
    今回は、FullBodyIKを利用します。
  • IK Goal(以下画像の黄枠
    IKで位置や回転を制御する設定で、ソルバごとにGoalを設定する必要があります。
  • IK Root(以下画像の緑枠
    IKによる開始となる箇所の設定で、ソルバによって要否が異なります。
    FullBodyIKの場合、RootかPelvisあたりに設定します。(今回は、Pelvis)

IKRigAssetの編集画面

それぞれの細かい設定は、以下のとおりです。

IK Goalの設定

IK Goalの設定で重要なのは、以下になります。

  • Goal Name
    そのIK Goalの名称で、コードからでIK Goalの設定を行う際に指定する必要があります。
  • Expose設定
    位置と回転の設定を外部から行えるようにするかどうかの設定で、コードからAnimationBPを経由して設定したいため、Position/Rotationともにチェックを付ける必要があります。

IKGoalの設定

IK Rootの設定

FullBodyIKにおけるIK Rootの設定では、IK自体の制限の設定が可能で、今回は行う設定は以下になります。

  • 剛性
    デフォルトの値だと、足を上げた際などに腰がおかしくなるので、適切な動きになるように調整します。

IKRootの設定

ここまでの設定で、IKRigAssetの設定が想定通りの動きになるかPreviewで確認します。

IKRigAssetの設定Preview確認


AnimationBPの設定

AnimationBP内に、IKリグノードでIKRigを設定します。
IKリグノードのRig Definitionに、上記で作成したIKRigAssetを設定すると、Goalsの欄にIKRigAssetでExposeに設定したGoalが表示されます。
Goalに設定する値は、Manual InputBoneActor Componentが選択可能で、それぞれ以下の様な設定になります。

AnimationBPでのIKRigノード

  • Manual Input
    AnimationBP内で、位置や回転を直接入力、設定をします。
    設定する値の座標系は、AdditiveComponent SpaceWorld Spaceから選択可能です。
  • Bone
    Bone自体を指定することで、そのBoneの値が設定されます。
  • Actor Component
    専用のActor Componentから設定値を反映することができ、ノードからそのGoalに関連する全てピンが消えます。
    注意点として、この設定に変更すると、ノード上に不要なピンが残ってしまいエラーになるため、ノードの更新が必要になります。
    ピンが残ってしまっている状態

今回は、コード上で設定値を管理したいため、全てActor Componentを設定します。

Editor上で必要なIKRig周りの設定は以上になります。


さいごに

以上、UE5におけるIKの実装方法の種別とIKRigの設定方法についてご紹介しました。
今回のIKRigAssetを利用したIKの具体的な実装については、次回以降 下記2記事にてご紹介を予定しております。

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




アドグローブではゲームエンジニアを含め、さまざまなポジションで一緒に働く仲間を募集しています。
詳細については下記からご確認ください。みなさまからのご応募お待ちしております。

hrmos.co