複雑なブレンド アニメーション、レイヤー化されたアニメーション、または圧縮されたアニメーションのシステムをビルドする場合、キャラクターの四肢 (通常は、手および足) に余計な望ましくない動き (「泳ぐ」と呼ばれる) が発生する場合があります。仮想ボーン を IK ノード と組み合わせて使用すると、この望ましくない動作を修正することができます。
このドキュメントでは、 スケルトン で仮想ボーンを作成して、 アニメーション ブループリント で使用する方法の概要について説明します。
前提条件
-
プロジェクトに スケルタル メッシュ アクタ が含まれている。
-
アニメーション ブループリント での作業について基本的に理解している。
仮想ボーンの概要
仮想ボーンは、他のボーンのトランスフォームに追従するものの、異なるボーン空間にあるボーンです。ほとんどの場合、これは、仮想ボーンが ルート ボーン の親でありながらも、手または足などの エンド ボーン に追従することを意味します。つまり、仮想ボーンは、ターゲットにつながるすべてのジョイントのフォワード キネマティック (FK) 階層の追加の影響を受けることなく、ターゲット ボーンに直接追従することができます。この機能を使用すると、キャラクターの手足を仮想ボーンに追従させるインバース キネマティクス (IK) システムを設定することができ、複雑なアニメーション システムで生じる「泳ぎ」などの手足のぶれの問題を解決できます。
次の例では、加算ヘッドルック アニメーションの再生時に、ライフルと手の位置を維持するために IK を備える仮想ボーンが使用されています。仮想ボーンがない場合、手と武器が「泳いで」しまい、意図しない動きになります。
仮想ボーンを使用 | 仮想ボーンなし |
従来の IK との違い
仮想ボーンの主要な特徴の 1 つは、ターゲット ボーンに追従することです。この特徴により、ターゲット ボーンが動くことができるアニメーションを引き続き再生しながら、仮想ボーンの位置を変更することができます。このような設定は、IK がアニメーションに干渉する可能性がある従来の IK のみのシステムよりも優れています。たとえば、手が武器に IK でアタッチされているシステムを設定する場合、リロードなどの特定の状況では IK を無効にするために追加の手順を実行する必要があります。
この例では、IK を備えた仮想ボーンにより、加算アニメーションを再生していても、他のオブジェクトを基準とした手の基本的な動きが可能です。従来の IK 設定では「泳ぐ」問題を解決できることはあるものの、結果的に、手が常に固定されるため、このような場合には IK を無効にする追加のロジックを作成する必要があります。
仮想ボーンにより手の基本的な動きが可能 | 手が固定される IK のみの設定 |
仮想ボーンを作成する
仮想ボーンは、アニメーション エディタの スケルトン ツリー で作成することができます。親 となるボーンを右クリックして、[Add Virtual Bone (仮想ボーンを追加)] を選択します。このリストからボーンを選択して、ターゲット を指定します。この例では、仮想ボーンは ルート ボーン の親として作成され、hand_l ボーン をターゲットにします。
作成されると、仮想ボーンは 親ボーン の子として表示され、ターゲット ボーン のトランスフォームに一致します。デフォルトでは、仮想ボーンは命名規則に沿って自動的に VB <Parent>_<Target>
という名前になります。
また、 アニメーション シーケンス をプレビューして、アニメーションで仮想ボーンがターゲット ボーンに追従しているのを確認することができます。
アニメーション ブループリントの設定
仮想ボーンを作成したら、 アニメーション ブループリント で仮想ボーンのロジックを設定することができます。仮想ボーンは自由度の高い性質を備えているため、幅広い方法で活用できます。ここでは、仮想ボーン向けの基本的な武器のオーバーライドと加算アニメーションのセットアップを作成する方法を説明します。
スロットのセットアップ
まず、アニメーション ブループリントの アニメーション グラフ で Slot ノードを 2 つ作成します。スロットは、1 回限りのアニメーションを挿入できるアニメーション ブループリントのプロキシ領域で、基本アニメーション レイヤーと加算アニメーション レイヤーを区別するために使用されます。
アニメーション グラフを右クリックし、Montage > Slot 'DefaultSlot' を選択してスロットを作成します。
2 つ目のスロットでは、そのスロットを選択し、[Details] パネルの Slot Name プロパティを DefaultSlot とは異なる別の値に設定し、アニメーションが正しく分化するようにします。
Default Slot は Base ピンに、Additive Slot は Additive ピンに接続して、両方の Slot を Apply Additive ノードに接続します。
仮想ボーンを除外する
次に、仮想ボーンを Additive Slot の評価から除外するために、 ブレンド マスク を作成する必要があります。
アニメーション エディタの スケルトン ツリー で、[Options (オプション)] ドロップダウン メニューをクリックして、[Add Blend Mask (ブレンド マスクを追加)] を選択します。名前を付けて Enter を押します。
次に、仮想ボーンに移動して、ブレンド値を「0.0」に設定します。
アニメーション グラフに戻り、 Layered Blend per Bone ノードを作成して、プロパティを以下のように設定します。
- Blend Mode を Blend Mask に設定します。
- Blend Masks を使用する仮想ボーン除外ブレンド マスクに設定する。
このノードが Additive Slot と Apply to Additive ノードの間に配置されるように接続し、Slot を Blend Pose ピンにのみ接続します。これで、この Additive Slot からアニメーションが再生されると、ブレンド マスクによって加算アニメーションが仮想ボーンに影響しないようになります。
IK の設定
最後に、手足が仮想ボーンに追従し、加算レイヤーが仮想ボーンの余計な動きを除外する IK 設定を作成する必要があります。
Two Bone IK ノードを作成し、[Details] パネルでプロパティを以下のように設定します。
- IKBone を、この手足のエンド ターゲット ボーンに設定する。
- Effector Location Space を Bone Space に設定する。
- Take Rotation from Effector Space をオンにして、IK ボーンに回転を追加する。
- Effector Target をこの手足の仮想ボーンに設定する。
- Joint Target Location Space を Parent Bone Space に設定する。
- Joint Target を IKBone の同じ値に設定する。
Joint Target Location は IK 極ベクターを定義するために使用されます。IK 極ベクターは肘の後ろの位置に設定する必要があります。キャラクターのジョイントによって、この値は異なる場合があります。デフォルトの Unreal Engine のマネキンでは、この値は次のように設定されます。
- X: -25.0
- Y: -50.0
- Z:0.0
仮想ボーンに一致させたい各手足に、追加の Two Bone IK ノードを作成します。
結果の表示
完成すると、アニメーション グラフは以下のようになります。内容は次のとおりです。
- 基本および加算アニメーション レイヤーの Slot ノード。
- 両方の Slot が Apply Additive ノードに接続され、 ブレンド マスク を使用する加算レイヤーから仮想ボーンを除外するために Layered Blend per Bone ノードを使用しています。
- 手足では IK ノードを使用して、最終的な仮想ボーンの位置にアタッチすることで、基本アニメーション レイヤーを使用します。
これで、このフレームワークでアニメーションを再生すると、キャラクターの手足が仮想ボーンの位置に追従していながら、加算アニメーションが再生されているときは加算アニメーションの影響を受けないことを確認できます。