表情のアニメーションの共有

Pose アセット、Animation ブループリント、アニメーション カーブを使用して表情のアニメーションを共有する方法を説明します。

Choose your operating system:

Windows

macOS

Linux

FacialAnimationSharing.png

プロジェクト内の複数のキャラクターが似ていて、同じ Skeleton アセットを共有している場合、表情のためにカーブで操作するアニメーションを使用することを検討するといいかもしれません。そうすると、アニメーション カーブを共有して Pose アセットと合わせて利用することで、望むような表情を制作して複数のスケルタル メッシュで共有できます。

ただし、重要な注意点が 1 つあります。アニメーション内にボーン トランスフォーム データが含まれていてはいけません。ボーン トランスフォーム データは、メッシュの参照ポーズのものであっても、ほかのメッシュでは動作しません。異なるメッシュ間でカーブを共有する場合、ボーン トランスフォームを削除して (カーブのみを残して)、各メッシュの参照ポーズから始めることが重要です。そうすれば、複数の顔で表情のカーブを共有できます。

以降に挙げるのはワークフローの例です。アセットと期待する結果によっては、ワークフローは異なったものになる可能性があります。

マスター Skeleton の作成と使用

まず、ベースとなるスケルタル メッシュをインポートして、(表情のアニメーションを共有させたいほかのすべてのスケルタル メッシュが使用する) マスター Skeleton とする Skeleton アセットを作成します。Skeleton アセットを共有するために、インポートする追加のメッシュはボーン階層と命名規則が同じである必要があります。

MasterSkeleton_01.png

Skeleton の詳細については、 Skeleton Assets のドキュメント ページを参照してください。

Pose アセットの作成

次に、DCC アプリケーション内でポーズを FBX シーケンスにベイクして、その FBX を UE4 にインポートします。こうすると、アニメーション シーケンスに最小および最大のブレンドの値の各カーブが含まれるようになります。

CreatePoseAsset.png

画像をクリックしてフルサイズで表示

上の画像では、インポートしたアニメーション シーケンスに、あるフレームでのすべてのカーブとその最大値が含まれています。

すべてのカーブ データを含むシーケンスをインポートしたら、そのアニメーション シーケンスから Pose Asset を作成できます。Pose アセットは、アニメーション カーブのデータをキャラクターで実際の表情のアニメーションに変換するために使用できます。

AnimationSequence_02.png

アニメーション シーケンスを右クリックして、コンテキスト メニューから Pose アセットを作成できます。

Pose アセット内ではポーズ名を定義する必要があります。そのために、それぞれの名前を手入力するか、クリップボード経由でデータをコピー アンド ペーストします。

次に、インポートしたポーズを含む 58 フレームのアニメーション シーケンスで特定されたすべてのポーズの一覧を示します。

Facial_Poses.png

これらを Pose アセットのポーズの名前として適用できます。

PoseAssetBlank.png

すると、Skeleton アセットと合わせて保存されたカーブが [Anim Curves] ウィンドウに表示されます。

MasterSkeletonImage.png

画像をクリックしてフルサイズで表示

マスター Skeleton を使うすべてのキャラクターがこれらのカーブにアクセスできるようになり、各カーブが表すそれぞれの値によって表情をアニメーションさせることができます。一方で、Pose アセットがすべてのカーブ データを変換して、キャラクターがとる実際のアニメーション ポーズにします。

AnimationSequence_03.png

上の例では、jaw_open_pose の値をデフォルトの 0 から 1 に変更した結果、キャラクターが口を開いています。

Pose アセット内でポーズ名を入力する場合、使用されていないカーブを [Anim Curves] ウィンドウから削除して、表示される件数を減らすことをお勧めします。

下の例では、Pose アセットのポーズ名がすべて表示されています。また、[Anim Curves] ウィンドウにもポーズ名が表示されています。

PoseRename1-1.png

Pose_0 l_eye に変えても、 [Pose_0] は [Anim Curves] に表示されたままになります。 [Pose_0] を右クリックして [Delete Curve] を選択すると削除できます。

PoseRename2.png

親 Animation ブループリントと子 Animation ブループリントの設定

Pose アセットの準備ができたら、カーブで操作するアニメーションを利用するキャラクターの Animation ブループリント**を作成します。そして最後に、 Pose アセット** ノード (作成した Pose アセットを割り当て) がカーブ データをキャラクターが使用できるポーズへと正確に変換します。

画像をクリックしてフルサイズで表示

カーブで操作するアニメーションを [Final Animation Pose] に直接つなげると、カーブをポーズのデータに変換する方法がアニメーション ポーズにはわからなくなります。そこで [Pose Asset] ノードを使用できます。アニメーションをインターセプトして、カーブを実際のポーズ データへと適切に変換し、キャラクターが使えるようにします。

追加のキャラクターがいる場合、このマスター Animation ブループリントから子 Animation ブループリントを作成してキャラクターに割り当てます。Pose アセットは各キャラクター独自の Pose アセット データでオーバーライドできます。こうすると、キャラクター固有の差分を得ることができ、たとえば悲鳴を上げる様子が体格に応じた見た目になります。

画像をクリックしてフルサイズで表示

上の例では、追加のキャラクターがマスター Animation ブループリントに基づく子 Animation ブループリントを使用しています。

子 Animation ブループリント内では Pose アセットをオーバーライドして、このキャラクターに固有のものを使うようにしています。こうすると、差分を使ってこのキャラクターに固有の表情のポーズを動かすことができ、再生されるアニメーションは親からのものになります。

アニメーションの取り込み

キャラクターの表情のアニメーションを取り込むには、通常は、カーブで操作する表情のアニメーションに加えて、キャラクターのボーンで動かされるボディのアニメーションをある程度使います。ボディのアニメーションを共有して、表情はカーブで操作するために、表情のアニメーションから、あらゆるボーン トラックを削除して、カーブのみを残す必要があります。あるいは、Animation Modifier を使って、特定のボーン トラックを削除して、顔にはカーブを利用します。

その仕組みについて、下のアニメーション シーケンスを例に説明します。

BringInAnimation_01.png

アニメーション シーケンスには、すべてのカーブと、さまざまな表情を表すそれらのカーブについてキーを指定した値が含まれます。ただし、カーブはボーンで操作するアニメーションの上で再生されることになり、トランスフォームが二重になって結果が不正確になるという問題があります。この場合、ボーンのトランスフォームを削除して、カーブのみを残すようにします。

[Asset] メニューの Animation セクションにある [Remove All Bone Tracks] を使用して削除できます。

BringInAnimation_04.png

また、ボディのアニメーションは共有するが表情はカーブで操作したいという場合、Animation Modifier を使って特定のボーンのみを削除することもできます。通常、ボディのアニメーションはボーンで操作して、表情のアニメーションはカーブで操作するという場合には、Animation Modifier を使用します。

BringInAnimation_02.png

ここでは、アニメーション シーケンスと、削除する特定のボーン トラック (子を含む) は Modifier が適用された時点で [Finalize] されます。

Animation Modifier を作成するには、 Parent Class を Animation Modifier に設定してブループリントを作成します。

インポートしたアニメーションで Animation Modifier セクションに移動して、作成した Animation Modifier を適用すると、ボーンのトランスフォームを削除できます。

BringInAnimation_03.png

Animation Modifier を追加したら、ボタンをクリックして適用できます。

カーブだけが残った状態で、Animation ブループリント内で Pose アセットを通じてアニメーションを実行すると、カーブで操作するポーズが得られて、共有できます。下の例では、カーブで操作するアニメーションを [Final Animation Pose] に直接つなげていますが、カーブを処理する方法がわからないので、そのポーズは使用されません。そこで、アニメーションを Pose アセットにつなげてカーブを操作すると、キャラクターが表情を演じるようになりました。

各キャラクターが子 Animation ブループリントを使用し、割り当てられた Pose アセットが差分を使って表情を共有できるようになりました。ボーンのトランスフォームはなく、アニメーションはカーブによってのみ操作されているので、トランスフォームが二重になることはなく、ボーンで操作する追加のアニメーション データ (ボディ全体のアニメーションなど) とこのアニメーションをブレンドできます。

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