PR

【UE5】IKとFKを併用する方法

Unreal Engine 5

Unreal Engine 5のコントロールリグで、胴体から手首までをIKで動かし、手首から先をFKで回転するリグ構成と処理を実装する方法です。
FKの操作がしやすいように、FKのコントロールをIKの動きに追従させます。

スポンサーリンク

1.リグ構成の作成

FKのコントロールを直接Set Transformノードで移動すると、コントロールを操作できなくなるので、Nullをコントロールの親にして、間接的に移動できるようにリグを作成します。

  • 手首のボーンを右クリック
  • IKのコントロール、FKのコントロール、Nullを作成
  • 作成したコントロールとNullを親から解除
  • FKのコントロールをNullの直下に移動して、上図の構成を作成
スポンサーリンク

2.リググラフの作成

コントロールリグのリググラフで、処理を実装します。

処理全体の概要

手首から先をFKで回転させる→胴体から手首までをIKで動かす→FKのコントロールを移動回転する、という流れです。

手首から先をFKで回転する処理の実装

コントロールの回転量を取得し、手首のボーンを同様に回転します。

  • Get Transformノードで、FKのコントロールの初期ローカル姿勢と現在ローカル姿勢のQuaternionを取得
  • 初期ローカル姿勢の逆Quaternion×現在ローカル姿勢のQuaternionで、コントロールのローカル回転量のQuaternionを計算
  • Offset Transformノードで、コントロールのローカル回転量分だけ手首のボーンを回転

Full Body IKで胴体から手首まで移動回転する処理の実装

  • Full Body IKノードで、胴体から手首までのボーンがIKのコントロールに追従するように設定

Full Body IKの設定については、次の記事を確認してください。

IKに合わせてFKのコントロールを移動回転する処理の実装

FKのコントロールを、IKで動いたボーンの位置姿勢に移動する処理ですが、先にFKの処理をしたことと、Nullを介してコントロールを動かすリグ構成にしたことで、FKのコントロールが操作量の2倍回転する状況になっています。
これは、FKのコントロールの親であるNullが、FKで回転したボーンに追従した結果、FKのコントロールの回転量が、FK操作によるコントロールのローカル回転+FK処理によるボーンのローカル回転、となることで発生します。
この対策として、Nullをボーンのローカル回転分だけ逆回転して、コントロールと手首ボーンの姿勢を合わせます。

  • Get Transformノードで、手首ボーンの現在グローバル位置姿勢、初期ローカル姿勢、現在ローカル姿勢を取得
  • 初期ローカル姿勢の逆Quaternion×現在ローカル姿勢のQuaternionで、手首ボーンのローカル回転量のQuaternionを計算
  • 現在のグローバル姿勢のQuaternion×ローカル回転量の逆Quaternionで、ローカル回転分だけ逆回転したグローバル姿勢のQuaternionを計算
  • Set Transformノードで、手首ボーンのグローバル位置姿勢からローカル回転分だけ逆回転した姿勢に、Nullを移動

以上です。

コメント

タイトルとURLをコピーしました