こんにちは。ゲーム事業部(東京)のエンジニアの笠松です。
今回もアドグローブのゲーム事業部内で定期的に開催している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 IKやFABRIKノードなどが挙げられます。
Two Bone IK
動かしたいボーンを1つとその位置とその親のボーンの位置を指定(全部で3つのボーンが対象)
Two Bone IK | Unreal Engine ドキュメントFABRIK(Forward And Backward Reaching Inverse Kinematics)
動かしたいボーンとその位置、及びIKのRootとなるボーンを指定(3つ以上のボーンが対象)
Two Bone IK | Unreal Engine ドキュメント
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実装 | UE5を使う場合、使用する意味はほぼなし。(プロトだとしても他の機能を使ったほうが圧倒的に楽で実装可能) | ||
ControlRigによるIK実装 | エンジン上でのリギングをしたり、デザイナーがIKを主導する場合は、オススメ(Experimentalではあるが、UE4でも実装可能) | ||
IKRigによるIK実装 | コードとの連携もでき、CRほど細かい設定がないため、簡単なIKをエンジニアが主導する場合は、オススメ |
というわけで、今回からの一連の記事では、IKRigによるIK実装及びそのために必要な設定をご紹介します。
IKRigAssetの設定
基本的なIKRigによるIK実装の方法は、公式のドキュメントにまとまっていますが、必要なところをピックアップして触れていきます。
docs.unrealengine.com
IKRigAssetは大きく分けて、以下の3つの設定で構成されてます。
- ソルバ(以下画像の赤枠)
どういうIKを行うかの設定で、前述したTwo Bone IKやFABRIKなどが用意されています。
今回は、FullBodyIKを利用します。 - IK Goal(以下画像の黄枠)
IKで位置や回転を制御する設定で、ソルバごとにGoalを設定する必要があります。 - IK Root(以下画像の緑枠)
IKによる開始となる箇所の設定で、ソルバによって要否が異なります。
FullBodyIKの場合、RootかPelvisあたりに設定します。(今回は、Pelvis)
それぞれの細かい設定は、以下のとおりです。
IK Goalの設定
IK Goalの設定で重要なのは、以下になります。
- Goal Name
そのIK Goalの名称で、コードからでIK Goalの設定を行う際に指定する必要があります。 - Expose設定
位置と回転の設定を外部から行えるようにするかどうかの設定で、コードからAnimationBPを経由して設定したいため、Position/Rotationともにチェックを付ける必要があります。
IK Rootの設定
FullBodyIKにおけるIK Rootの設定では、IK自体の制限の設定が可能で、今回は行う設定は以下になります。
- 剛性
デフォルトの値だと、足を上げた際などに腰がおかしくなるので、適切な動きになるように調整します。
ここまでの設定で、IKRigAssetの設定が想定通りの動きになるかPreviewで確認します。
AnimationBPの設定
AnimationBP内に、IKリグノードでIKRigを設定します。
IKリグノードのRig Definitionに、上記で作成したIKRigAssetを設定すると、Goalsの欄にIKRigAssetでExposeに設定したGoalが表示されます。
Goalに設定する値は、Manual Input、Bone、Actor Componentが選択可能で、それぞれ以下の様な設定になります。
- Manual Input
AnimationBP内で、位置や回転を直接入力、設定をします。
設定する値の座標系は、Additive、Component Space、World Spaceから選択可能です。 - Bone
Bone自体を指定することで、そのBoneの値が設定されます。 - Actor Component
専用のActor Componentから設定値を反映することができ、ノードからそのGoalに関連する全てピンが消えます。
注意点として、この設定に変更すると、ノード上に不要なピンが残ってしまいエラーになるため、ノードの更新が必要になります。
今回は、コード上で設定値を管理したいため、全てActor Componentを設定します。
Editor上で必要なIKRig周りの設定は以上になります。
さいごに
以上、UE5におけるIKの実装方法の種別とIKRigの設定方法についてご紹介しました。
今回のIKRigAssetを利用したIKの具体的な実装については、次回以降 下記2記事にてご紹介を予定しております。
- Unreal Engine 勉強会 ~IKRigによるFootIKの実装例~
- Unreal Engine 勉強会 ~IKRigによるツタ登り中の実装例~
最後まで読んでいただき、ありがとうございました。
アドグローブではゲームエンジニアを含め、さまざまなポジションで一緒に働く仲間を募集しています。
詳細については下記からご確認ください。みなさまからのご応募お待ちしております。