フルボディ IK

FBIK を使用して、次世代のリアルタイム フルボディ IK システムを構築します。

Windows
MacOS
Linux

Unreal Engine 5 の早期アクセスに搭載されているフルボディ インバース キネマティクス (Full Body Inverse Kinematic: FBIK) 機能を使用すると、コントロールリグで高度なコントロールと柔軟性を備える IK を構築することができます。このドキュメントでは、FBIK ノードを作成して、FBIK ノードのオプションを設定して目的のポーズを実現する方法の概要を説明します。また、ノードのリファレンスも提供します。

前提条件

  • FBIK は コントロールリグ グラフ 内の 1 つのノードであるため、 コントロールリグ エディタ と機能セットについて十分に理解している必要があります。

  • FullBodyIK プラグインを有効にする必要があります。このプラグインを有効にするには、Unreal Editor メニュー バーで [Edit (編集)] > [Plugins (プラグイン)] の順に選択し、「FullBodyIK」を検索します。FullBodyIK プラグインが有効になったことを確認して、エディタを再起動します。

    image alt text

  • スケルタル メッシュ アセットをプロジェクトにインポートしておきます。

作成および設定

まず、スケルタル メッシュ アセット用の Control Rig アセットを作成します。これを作成するためには、スケルタル メッシュ アセットを右クリックして、 [Create Control Rig (コントロールリグを作成)] を選択します。これで、新しい Control Rig アセットが、スケルタル メッシュに割り当てられた状態で作成されます。アセットには、スケルタル メッシュ名に続けて _CtrlRig というサフィックスを付けた名前が自動的に付けられます。

create control rig

作成できたら、 Control Rig アセットをダブルクリックして開きます。

次に、FBIK ノードを作成します。コントロールリグ グラフで右クリックして、表示されるコンテキスト メニューから [Hierarchy (階層)] > [Full Body IK (フルボディ IK)] を選択します。

create pbik

[Rig Hierarchy] パネルで、IK エンド エフェクタ用のコントロールを作成します。この例では、左脚、右脚、および頭部のボーンのコントロールを作成します。目的のボーンを特定して右クリックし、 [New (新規)] > [New Control (新しいコントロール)] を選択します。

create controls

テキストをダブルクリックして名前を入力すると、コントロールの名称をわかりやすく変更することができます。

rename controls

[Skeleton Hierarchy (スケルトン階層)] でコントロールが親から解除されていることを確認します。これを実行するには、[Rig Hierarchy] でコントロールを右クリックして、 [Unparent (親から解除)] を選択します。

unparent controls

次に、 [Rig Hierarchy] パネルから [Rig Graph (リグ グラフ)] パネルにコントロールをドラッグ&ドロップして、Get Control を選択し、コントロールをコントロールリグ グラフで参照します。

get control

次に、 Full Body IK ノードで、 Root ボーンを設定します。この例では、足と頭の間に比較的シンプルな FBIK システムを作成しているので、 Hips または Pelvis を Root に設定することが推奨されます。

pbik root bone

Effectors 配列の横にある 追加 ボタンを押して、FBIK ノードに新しいエフェクタ ピンを追加します。これを各コントロールで行います。エフェクタごとに、各コントロールに対応する Bone 値を設定します。この例では、 Head_CTRLhead (頭部) ボーンのコントロールで、その他も同様にボーン値を設定します。設定したら、コントロールの Transform ピンをそれぞれのエフェクタの Transform ピンに接続します。

pbik effector

これでキャラクター用の初歩的な FBIK をセットアップできました。コントロールリグ ビューポートでコントロールを自由に操作して、結果がどのようになるか確認してみましょう。

position based ik

Bone Settings

IK が意図した通りに動作しない場合は、特定のボーン設定が設定されていない可能性があります。Bone Settings は Full Body IK ノード内のもう 1 つの配列要素であり、FBIK が作用する各ボーンのビヘイビアを制御するために使用されます。

この例には、次のような問題があります。

  • ヒップが過度に回転および平行移動する。

    pbik hip problem

  • 脚が十分に回転しない。

    pbik leg problem

  • 足首の回転が過度に上向きで、現実ではあり得ないポーズになる。

    pbik ankle problem

Bone Settings でこういった問題を解決することで、希望の IK セットアップに対応することができます

Rotation/Position Stiffness

Rotation/Position Stiffness プロパティは、IK チェーンのボーンがコントロールやエフェクタの作用をどの程度受けるかを制御するために使用されます。

fbik stiffness

この例では、これらのプロパティを使用して、ヒップの問題に対処することができます。まず、 Bone Settings の隣にある 作成 ボタンを押して、新しいボーン設定を作成します。作成したら、 Bone のエントリに pelvis ボーンを割り当てます。

Bone エントリの下に、 Rotation /Position Stiffness プロパティがあります。これらのプロパティを使用して、pelvis (骨盤) ボーンがコントロールの動きに影響される量を変更します。値の範囲は 0 ~ 1 で、「0」は完全に自由な状態で、「1」は完全に固定されます。

この例では、 「0.8」 という値で適度な Stiffness (剛性) が得られます。剛性の値を入力したら、コントロールを操作して結果を確認します。

pbik stiffness

Preferred Angles

Preferred Angles を使用すると、エフェクタに達するためのジョイントの特定の軸に沿った回転を提示することができます。

この例では、Preferred Angles を使用して、脚の問題を解決できます。まず、 Bone Settings の隣にある 作成 ボタンを押して、新しいボーン設定を追加します。作成されたら、 Bone エントリに calf_l ボーン** を割り当てます。

create bone setting

新しい Bone Setting エントリの下部に、Preferred Angles のプロパティがあります。Use Preferred Angles チェックボックスがオンになっていることを確認します。

次に、 Preferred Angles プロパティを展開します。ここでは回転の角度を入力します。この数値の大きさは設定の強度に影響するため、0〜90 の間の数値を設定する必要があります。

image alt text

コンテンツの設定によっては、ここに入力する内容が例と異なる場合があります。この例では、マネキンの足を Z 軸に沿って正の方向に曲げる必要があるため、 Z プロパティに「45」という値を設定します。角度の設定値を入力したら、コントロールを操作して結果を確認してみましょう。

pbik preferred angle

制限

Limits (制限) は、IK チェーンに沿ったボーン軸の回転の範囲を制限したり、完全にロック (固定) するために使用できます。

この例では、Limits を使用して、足首のボーンが不自然に曲がっているの補正することができます。まず、 Bone Settings の隣にある 作成 ボタンを押して、ボーン設定をもう 1 つ追加します。作成されたら、 Bone エントリに foot_l ボーン** を割り当てます。

pbik bone settings

制限設定は、Stiffness プロパティと Preferred Angles プロパティの間にあります。

pbik limit settings

各軸には、 Free (自由な動き)、Limited (範囲内で制限した動き)、またはその軸の動きを無効にする Locked (固定) の設定があります。Limited が選択されている場合、Min/Max プロパティを使用して動きの範囲を定義します。

足首が Z 軸に沿って回転し過ぎるのを補正するには、 Min Z の値を 「-70」 に、 Max Z の値を 「70」 に設定して、Z 軸を Limited に設定します。制限の量を入力したら、コントロールを操作して結果を確認してみましょう。

pbik limit settings

ノードのリファレンス

image alt text

ピン/設定名

説明

Root

IK チェーンに指定されるルート ボーン。

Effectors

Bone

IK チェーンに指定される末端ボーン。

Transform

末端ボーンをコントロールするために使用するトランスフォーム。通常、これは末端ボーンと同じトランスフォーム情報を共有するコントロールにリンクされた Get Transform ノードによって提供されます。

Offset Alpha

このプロパティは、エフェクタ/ボーンが目標とするコントロールまたはトランスフォームに到達できる能力に重みを設定します。「1」の場合、エフェクタは目標のトランスフォームを実現できるように最大限の処理を行い、「0」の場合、エフェクタは入力ポーズを維持します。

Strength Alpha

このプロパティは、IK チェーンに対するこのエフェクタの影響の強さに影響します。「0」の場合、エフェクタはエフェクタ自身の方にチェーンを引き寄せないため、他のエフェクタが優先されます。

Bone Settings

Bone

これらの設定が適用されるボーン。エフェクタとルートの間の階層にある任意のボーンを指定できます。

Rotation/Position Stiffness

回転または平行移動でボーンに適用する剛性の量。「0」を設定すると完全に自由な動きが可能になり、「1」を設定するとボーンが完全にロックされます。

XYZ Limit Setting

選択したボーンの軸上で許容される動きのタイプを選択するドロップダウン メニュー。Free は完全な動きを、Limited は指定した範囲内の動きを、Locked は軸の動きを無効にします。

Min/Max XYZ

制限設定として Limited が指定されている場合、Min/Max XYZ プロパティを使用して、許可される動きの範囲を指定します。

Use Preferred Angles

制限設定として Limited が指定されている場合、Min/Max XYZ プロパティを使用して、許可される動きの範囲を指定します。

Preferred Angles

では、チェーンが押しつぶされたときに、ボーンが各軸で回転する量を指定します。

Settings

Iterations

エフェクタが目的の位置に達するまで、この値を増やします。イテレーションはソルバの CPU 負荷が増大するので、この値はできるだけ低く抑えましょう。剛性の導入、高い Mass Multiplier (質量倍率)、Rotation Limits (回転制限) はすべて収束率に影響するため、より多くのイテレーションが必要になります。

Mass Multiplier

これはグローバルな値で、ボーンの回転や平行移動に対する抵抗の大きさに影響します。通常の値は 0.0~5.0 の間で、「0.0」は抵抗がなく、「5.0」は抵抗がきわめて大きくなります。Mass Multiplier の値が大きいほど、収束に至るまでのイテレーション回数が多くなります。

Allow Stretch

有効にすると、IK チェーンに沿ったボーンがエフェクタに到達するために平行移動します。剛性の値はこの結果に影響します。

Pin Root

これを有効にすると、ルート ボーンの平行移動をオリジナル ポーズに固定します。回転は引き続き影響を受けます。

Debug

Draw Scale

デバッグ行のサイズをコントロールする乗数。

Draw Debug

有効にすると、FBIK ノードの IK チェーンに沿って影響を受けるすべてのボーンが表示されます。

タグ