プロジェクト内の複数のキャラクターが似ていて、同じ Skeleton アセットを共有している場合、表情のためにカーブで操作するアニメーションを使用することを検討するといいかもしれません。そうすると、アニメーション カーブを共有して Pose アセットと合わせて利用することで、望むような表情を制作して複数のスケルタル メッシュで共有できます。
ただし、重要な注意点が 1 つあります。アニメーション内にボーン トランスフォーム データが含まれていてはいけません。ボーン トランスフォーム データは、メッシュの参照ポーズのものであっても、ほかのメッシュでは動作しません。異なるメッシュ間でカーブを共有する場合、ボーン トランスフォームを削除して (カーブのみを残して)、各メッシュの参照ポーズから始めることが重要です。そうすれば、複数の顔で表情のカーブを共有できます。
以降に挙げるのはワークフローの例です。アセットと期待する結果によっては、ワークフローは異なったものになる可能性があります。
マスター Skeleton の作成と使用
まず、ベースとなるスケルタル メッシュをインポートして、(表情のアニメーションを共有させたいほかのすべてのスケルタル メッシュが使用する) マスター Skeleton とする Skeleton アセットを作成します。Skeleton アセットを共有するために、インポートする追加のメッシュはボーン階層と命名規則が同じである必要があります。
Skeleton の詳細については、Skeleton Assets のドキュメント ページを参照してください。
Pose アセットの作成
次に、DCC アプリケーション内でポーズを FBX シーケンスにベイクして、その FBX を UE4 にインポートします。こうすると、アニメーション シーケンスに最小および最大のブレンドの値の各カーブが含まれるようになります。
すべてのカーブ データを含むシーケンスをインポートしたら、そのアニメーション シーケンスから Pose Asset を作成できます。Pose アセットは、アニメーション カーブのデータをキャラクターで実際の表情のアニメーションに変換するために使用できます。
アニメーション シーケンスを右クリックして、コンテキスト メニューから Pose アセットを作成できます。
Pose アセット内ではポーズ名を定義する必要があります。そのために、それぞれの名前を手入力するか、クリップボード経由でデータをコピー アンド ペーストします。
次に、インポートしたポーズを含む 58 フレームのアニメーション シーケンスで特定されたすべてのポーズの一覧を示します。
これらを Pose アセットのポーズの名前として適用できます。
すると、Skeleton アセットと合わせて保存されたカーブが [Anim Curves] ウィンドウに表示されます。
マスター Skeleton を使うすべてのキャラクターがこれらのカーブにアクセスできるようになり、各カーブが表すそれぞれの値によって表情をアニメーションさせることができます。一方で、Pose アセットがすべてのカーブ データを変換して、キャラクターがとる実際のアニメーション ポーズにします。
上の例では、jaw_open_pose の値をデフォルトの 0 から 1 に変更した結果、キャラクターが口を開いています。
Pose アセット内でポーズ名を入力する場合、使用されていないカーブを [Anim Curves] ウィンドウから削除して、表示される件数を減らすことをお勧めします。
下の例では、Pose アセットのポーズ名がすべて表示されています。また、[Anim Curves] ウィンドウにもポーズ名が表示されています。
Pose_0 を l_eye に変えても、[Pose_0] は [Anim Curves] に表示されたままになります。[Pose_0] を右クリックして [Delete Curve] を選択すると削除できます。
親 Animation ブループリントと子 Animation ブループリントの設定
Pose アセットの準備ができたら、カーブで操作するアニメーションを利用するキャラクターの Animation ブループリントを作成します。そして最後に、Pose アセット ノード (作成した Pose アセットを割り当て) がカーブ データをキャラクターが使用できるポーズへと正確に変換します。
カーブで操作するアニメーションを [Final Animation Pose] に直接つなげると、カーブをポーズのデータに変換する方法がアニメーション ポーズにはわからなくなります。そこで [Pose Asset] ノードを使用できます。アニメーションをインターセプトして、カーブを実際のポーズ データへと適切に変換し、キャラクターが使えるようにします。
追加のキャラクターがいる場合、このマスター Animation ブループリントから子 Animation ブループリントを作成してキャラクターに割り当てます。Pose アセットは各キャラクター独自の Pose アセット データでオーバーライドできます。こうすると、キャラクター固有の差分を得ることができ、たとえば悲鳴を上げる様子が体格に応じた見た目になります。
子 Animation ブループリント内では Pose アセットをオーバーライドして、このキャラクターに固有のものを使うようにしています。こうすると、差分を使ってこのキャラクターに固有の表情のポーズを動かすことができ、再生されるアニメーションは親からのものになります。
アニメーションの取り込み
キャラクターの表情のアニメーションを取り込むには、通常は、カーブで操作する表情のアニメーションに加えて、キャラクターのボーンで動かされるボディのアニメーションをある程度使います。ボディのアニメーションを共有して、表情はカーブで操作するために、表情のアニメーションから、あらゆるボーン トラックを削除して、カーブのみを残す必要があります。あるいは、Animation Modifier を使って、特定のボーン トラックを削除して、顔にはカーブを利用します。
その仕組みについて、下のアニメーション シーケンスを例に説明します。
アニメーション シーケンスには、すべてのカーブと、さまざまな表情を表すそれらのカーブについてキーを指定した値が含まれます。ただし、カーブはボーンで操作するアニメーションの上で再生されることになり、トランスフォームが二重になって結果が不正確になるという問題があります。この場合、ボーンのトランスフォームを削除して、カーブのみを残すようにします。
[Asset] メニューの Animation セクションにある [Remove All Bone Tracks] を使用して削除できます。
また、ボディのアニメーションは共有するが表情はカーブで操作したいという場合、Animation Modifier を使って特定のボーンのみを削除することもできます。通常、ボディのアニメーションはボーンで操作して、表情のアニメーションはカーブで操作するという場合には、Animation Modifier を使用します。
Animation Modifier を作成するには、Parent Class を Animation Modifier に設定してブループリントを作成します。
インポートしたアニメーションで Animation Modifier セクションに移動して、作成した Animation Modifier を適用すると、ボーンのトランスフォームを削除できます。
カーブだけが残った状態で、Animation ブループリント内で Pose アセットを通じてアニメーションを実行すると、カーブで操作するポーズが得られて、共有できます。下の例では、カーブで操作するアニメーションを [Final Animation Pose] に直接つなげていますが、カーブを処理する方法がわからないので、そのポーズは使用されません。そこで、アニメーションを Pose アセットにつなげてカーブを操作すると、キャラクターが表情を演じるようになりました。
各キャラクターが子 Animation ブループリントを使用し、割り当てられた Pose アセットが差分を使って表情を共有できるようになりました。ボーンのトランスフォームはなく、アニメーションはカーブによってのみ操作されているので、トランスフォームが二重になることはなく、ボーンで操作する追加のアニメーション データ (ボディ全体のアニメーションなど) とこのアニメーションをブレンドできます。