IK 設定

IK システムは、平坦でない地形上への足の配置など、リアクティブ アニメーションを可能にします。

Choose your operating system:

Windows

macOS

Linux

IKWithWithout.png

左側のキャラクターは IK 設定を使用していません。中央のキャラクターは、小さな衝突オブジェクト上で足をしっかり立たせた状態を維持するために IK を使用しています。右側のキャラクターは、移動するブロックに当たるとキャラクターのパンチ アニメーションが止まるように IK を使用しています。

IK ( インバース キネマティクス ) は、ジョイントを直接回転させるのではなく、終了エフェクタの位置からジョイント回転を処理していきます。実際には、ユーザーがエフェクタ位置と IK ソリューションを指定し、その位置にできるだけ最終ジョイントが近づくように回転を解決していきます。不均等なグラウンド上でキャラクターをしっかり両足で立たせるために使用しますが、その他にも様々な形でワールドとリアルなインタラクションを生み出すことができます。

Unreal Engine では、腕や脚に理想的な 2 Bone IK システムを採用しています。

IK を頭と足に適用した例を、セクション 1.8 の「 アニメーション コンテンツの例 」でご覧いただけます。

IK (インバース キネマティクス) と FK (フォワード キネマティクス)

IK の内容および使用方法について既にご存知の場合は、このセクションを飛ばしてください!

Unreal Engine でアニメート化されたスケルトンのほとんどは、キャラクターのボーンあるいはスケルタル メッシュに直接回転データを与えて操作します。これをフォワード キネマティクス、あるいは、ジョイントやボーンを直接回転させる方法だと考えてください。その概念を表すと、こうなります。

diagram_FK.png

IK (インバース キネマティクス) は、その名の通り、逆向きに作用します。ボーンを回転させるのではなく、チェーンの終了が到達すべき位置を決めて、ボーン チェーンにターゲット (または終了エフェクタ) を与えます。ユーザーやアニメーターがエフェクタを動かすと、IK ソルバ (IK システムで回転を操作するアルゴリズム) はチェーンの最後にあるボーンがターゲット位置で終了するようにボーンを回転させます。下の画像では、エンド エフェクタが赤い十字で指定されています。

diagramIK.png

UE4 では、キャラクターやスケルタル メッシュの動きがごく自然な反応に見えるように、IK を使って既存のアニメーションをオーバーライドしたり、改善することが可能です。

IK の設定

キャラクターを足や手でグラウンド上にしっかり立たせたり、移動オブジェクトをしっかり掴んでいるかのように見せたり、IK は様々な方法でキャラクターに使用することができます。本ページでは、中でも最も一般的とされる、平坦でないグラウンドまたは階段上で脚をしっかり立てる設定を紹介します。

IK では通常、異なる複数の位置に設定が必要になります。これは IK を使用する際に考慮すべき重要なことの 1 つです。以下が大まかな設定です。

  1. エフェクタ位置を処理するための設定。この設定は、ポーンや Character ブループリントで行われることが多いです。

  2. ポーンまたはキャラクターからエフェクタ位置を受け取るための Animation ブループリントのイベントグラフ内の設定。これは IK ソルバのための設定です。

  3. キャラクターの Animation ブループリントの Anim Graph 内の 2-Bone IK ノードの設定。

計画

すべての事に言えることですが、ちょっとした準備が非常に役立ちます。IK 設定を必要とする理由を必ず考えるようにしてください。キャラクターの足に使いますか?それとも手でしょうか?対象部位の反応が必要となる時、どんな動作をしてますか?このような質問に対する回答を前もって準備していれば、設定が簡単になります。幸いなことに、UE4 のブループリントのビジュアル スクリプトは、後から簡単に機能を追加するパワーを備えています。

IK 設定で足を配置する

最初の例では、平坦でないグラウンド上でキャラクターの足を立たせやすくするために、キャラクターに行うシンプルな IK 設定の概要を説明します。

Content Examples プロジェクトで例をご覧頂けます。Animation.umap という名前のマップを開いて、例 1.8 を見てください。

Pawn または Character ブループリントの設定

まず最初に、必要なデータを適切に処理するために、 Pawn または Character ブループリントを設定します。踏んでしまうような障害物が置かれているかどうかを追跡し続けられるように、足から何らかのトレースを実行する必要があるからです。

次の例では、ブループリント内のワイヤー接続を簡略化するために変数が追加されていますが、これは表示の便宜上のことであり、これらの変数は実際のコンテンツ サンプル プロジェクトには存在しません。

コンストラクション スクリプト

Character ブループリントのコンストラクション スクリプトは、 2 つの重要なデータの構成要素を設定します。

  1. キャラクターの Z (高さ) を考慮する Scale 変数。

  2. Scale 変数で乗算処理された物理カプセルの半分の高さを使用する IKTraceDistance 変数。

画像をクリックして拡大表示、または 右クリック して名前を付けて保存します。

イベントグラフ

この設定の場合、イベント グラフが基本的にトレース処理を行います。障害物を探しながら、キャラクターの足を通過して投射します。何かを見つけると、 IK のエフェクタを移動させるために Animation ブループリントで後で使用することができるように、イベント グラフは距離を格納します。

このグラフで重要なポイントの 1 つは、 IKFoottrace と呼ばれるカスタム関数を使用していることです。この関数は距離とソケット名を受け取り、それらをトレース操作の基底として使用します。そして、これらの結果に基いて、後に IK エフェクタ位置のオフセットに使用されるオフセット値を返します。

この画像で、 IKFoottrace 関数が分かります。画像をクリックして拡大表示、または 右クリック して名前を付けて保存します。

これがイベント グラフです。上記の関数を使うと、このインスタンスの主な役目が、左右の足のトレースの実行であることがわかります。

ここがイベント グラフのベース レベルです。画像をクリックして拡大表示、または 右クリック して名前を付けて保存します。

この結果、ゲームの各ティックの間、下方向のトレースが実施され、グラウンドの平坦でない部分を特定する衝撃点を探します。見つかると、そのポイントまでの距離が IK オフセットとして格納され、後に Animation ブループリントで使用されます。

IKTrace.png

上の画像では、緑のダイヤモンドがトレース開始点として使用するソケット位置を表します。赤の矢印は、トレース自体を表します。

補足説明

新しいソース ビルドから初めてエディタを起動すると、ロードに時間がかかる場合があります。Unreal Engine は使用するプラットフォームのコンテンツを派生データ キャッシュに最適化します。これは 1 回だけ行われます。

Unreal Engine のコードのプライベートのフォークは、GitHub アカウントの許可に関連付いています。サブスクライブの解除または GitHub のユーザー名を切り替える場合は、再度フォークし、ローカル コピーから変更をアップロードする必要があります。

Animation ブループリントの設定

Animation ブループリントについて、まず最初にイベント グラフについて説明します。一般的に、 Animation ブループリントのイベント グラフの主な目的は、 Character または Pawn ブループリントのような他のソースからデータを受け取り、それらを AnimGraph で使用できる変数に変換することです。

イベントグラフ

ここでは、まず最初に現在のポーンを取得し、設定が全て完了している特定のポーンを基礎とするクラスへ確実にキャストします。これにより、 Pawn ブループリントの特定のインスタンスとの直接通信、および変数に格納されたデータの読み取りが可能になります。

Pawn ブループリントに格納された IK オフセットデータを使って、後で IK エフェクタが使用する位置ベクターを生成することができます。

画像をクリックして拡大表示、または 右クリック して名前を付けて保存します。

AnimGraph

AnimGraph はここまでに組み合わせた情報で設定を完了させ、それを使ってキャラクター用に作成された既存のアニメーションを更新します。この例では AnimGraph はたった 1 つのアニメーションしか再生しないので、非常にシンプルです。ほとんどの場合、Play JumpingJacks ノードは他のノードに好きなだけ置き換えて、希望するモーションを作成します。

現在の空間をローカルからコンポーネントに切り替える部分が重要です。キャラクター上で再生される全てのアニメーションは、ローカル空間で行われます。ローカルでの変換は階層内の各ボーンの親に相対するので、この方法が一番早く計算を実行できます。ただし、 2 Bone IK の適用などのボーン操作は、Root ボーンと相対するコンポーネント空間で行わなければなりません。

このため、IK 計算を実施するのに十分な時間、ローカルからコンポーネントへデータを切り替える必要があります。同時に Final Animation Pose ノードはローカル空間のデータのみを受け取るので、 IK が適用されると再変換しなければなりません。

アニメーションの座標空間についての詳細は、「 座標空間の用語 」を参照してください。

画像をクリックして拡大表示、または 右クリック して名前を付けて保存します。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル