UDN
Search public documentation:

MorphTargetsJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

Morph Target(モーフターゲット)

ドキュメントの概要:静的 Morph Target のインポート、アニメーション ツリーへの追加およびコードからのコントロールについての概要。

ドキュメントの変更ログ:Shane Caudle により作成、Lina Song により管理。

概要

Morph Target は、リアルタイムでメッシュを修正する一つの方法ですが、ボーンベースの骨格アニメーションよりもコントロールがあります。静的 Morph Target は、少し何らかの方法で異なっている既存のメッシュのバージョンです。例えば、3 D モデリング問題でキャラクターに「笑っている」バージョンを作成し、それを「笑う」 Morph Target としてインポートするとします。その後ゲーム中にこの Morph Target を適用して、フェイスの頂点を修正して、キャラクターに笑わせることができますが、各頂点の動き方には非常に大きなコントロールが働きます。

UnrealEngine 3 における Morph Target は、加算方式で適用されます。つまり、口の周りの頂点のみが修正されるところに「笑う」ための Morph Target が一つあり、目の周りの頂点にのみ影響する「眉を上げる」ための別の Morph Target が一つある場合、これらの両方の Morph Target を適用すると、笑いと眉の両方の動きが生じます。これにより、例えば、複数のターゲットを一緒に組み合わせて、様々な顔のポーズを作成できます。

Morph Target と従来の骨格アニメーションは、共に機能します。 Morph Target は、ボーン変形が適用される前に、骨格メッシュに適用されます。 Morph Target は、メッシュの参照ポーズ メッシュに基づいて作成し、次に、インポートするときに、頂点をベース メッシュと対照して、異なるもののみを保存します。

Morph Target をインポートする

3D モデリング パッケージで、参照ポーズに新しい Morph Target を作成したいメッシュを取り、希望通りにそれを修正します。次に、そのメッシュを新しい .PSK ファイルとしてエクスポートします。

UnrealEd で、AnimSets ビューアを開けます。 Morph Target は、 MorphTargetSet に保存されています(これは、 AnimSequences および AnimSets と非常に似た方法で機能します)。左のパネルに _Morph _ タブが見えます。このスイッチを入れると、現在ロードされている MorphTargetSets を示すコンボが現れ、次に、そのセットの MorphTargets を示す下にリスト ボックスが現れます。

morph_asv.jpg

.PSK ファイルを Morph Target としてインポートするためには、新しい Morph Target を追加したい MorphTargetSet をまず選択します。ファイル メニューから [New MorphTargetSet](新しい MorphTargetSet) を選択して、新しい MorphTargetSet を作成できます。次に、 Mesh (メッシュ) タブに戻り、 Morph Target の骨格メッシュを選択します。最後に、ファイル メニューで、[Import MorphTarget](Morph ターゲットをインポートする)を選択します。インポートする PSK ファイルと新しい Morph Target に与える名前を指示するように求められます。インポートが成功すると、 _ Morph _ タブの下に MorphTargetSet のためのリストの中に新しい Morph Target が見えます。複数のモーフ ターゲットを (モーフターゲット名を入力するステップを省略して) インポートしたい場合は、[Import MorphTarget Using File name] (ファイル名を使ってモーフターゲットインポート) を選択します。この場合、インポートしたファイル名がモーフターゲット名に使われます。

LOD レベルが必要な数より多く骨格メッシュに含まれる場合、それらの LOD のモーフ ターゲットもそれぞれインポートする必要があります。これを行なうには、[File] (ファイル) メニューの [Import MorphTarget LOD] オプションを使用します。LOD 0 のモーフ ターゲットをベース骨格メッシュの LOD 0 のメッシュから生成しなければならないのと同様に、新しいモーフターゲットの LOD レベルもベース骨格メッシュの同じ LOD から頂点順に生成し、適切に合わせる必要があります。ベースメッシュに LOD が複数存在しても、それらのモーフターゲットが存在しない場合は、メッシュが下位の LOD に下がったときにモーフターゲットが適用されない点に注意してください。

モーフ ターゲットのアニメーション

(Maya 8.5 (2008、2009) でサポートされています)

ActorX でカーブデータを PSA ファイル形式でエクスポートし、アニメーションとしてインポートすることができます。この場合、アニメーションに必要なモーフターゲットを MorphTargetSets に含める必要があり、そのモーフターゲットの名前は Maya ファイルの BlendCurve の名前と同じでなければなりません。例えば、Maya ファイルの BlendCurve の名前が "blink" で、これをアニメーションとしてエクスポートする場合、MorphTargetSet (SkeletalMeshComponent にリンクされます) に "blink" という名前のモーフターゲットがなければ、アニメーションは機能しません。アニメーションを AnimSetVeiwer でプレビューするには、目的の MorphTargetSets を PreviewMorphTargetSets に追加します。

これにより、インポートしたアニメーションが AnimTree で AnimNodeSequence やブレンドに使用できるようになります。同じモーフターゲットを変化させるアニメーションが複数ある場合は、ウェイトが加算されます。

Morph Target をプレビューする

[Morph Target] タブにはモーフターゲットのリストとスライダがあり、モーフターゲットのスライダを使ってウェイトを変更することができます。

morph_preview.jpg

Rename Morph Target (モーフターゲットの名前変更)

編集ボックスを使ってモーフターゲットの名前を変更することができますが、既にアニメーションで使用されているモーフターゲットの名前を変更すると、アニメーションが無効になります。ただし、MorphNodePose (または他の MorphTarget 関連ノード) の使用には、ノードが正しく設定されていれば差し支えありません 。

Delete Morph Target (モーフターゲットの削除)

削除するモーフ ターゲットを先に選択してから、[Delete Morph Target] メニューを使って削除します。[Select All] (すべて選択) を使ってすべての項目を選択/選択解除することができます。

Update Morph Target (モーフ ターゲットを更新)

ベースメッシュが変更されている場合 (影響度の変更など)、モーフターゲットビューアを開くと再マッピングしてよいかどうかの確認を求められます。モーフターゲット (元のメッシュの) が正しくマッピングされていなければ、これは機能しません。[Update Morph Target] メニューはモーフターゲットセットでも使うことができます。

Morph Target の制御

モーフの制御は、FaceFX、Matinee、またはコードを使用して行うことができます。

アニメーション ツリーに Morph Target を追加する

morph_animtree.jpg

一度に複数の Morph Target を一緒にブレンドすることを可能にするためには、アニメーション ツリーを使用します。アニメーション ツリー エディタで、_ Morph _ とラベルされたルート「アニメーション」ノードに対する入力が見えます。これは、様々なタイプの Morph ノードを接続するためのものです。 Morph ノードには 2 つの主要なタイプがあります。

  • Morph Pose - これは、 MorphTargetSet からの静的 Morph Target です。
  • Morph Weight - これは、子ノードが適用される「強さ」をコントロールするために使用するノードです。このタイプのノードには、上にスライダーがあり、エディタでウェイトを修正することができます。結果をご覧ください。

Morph ノードをアニメーション ツリーに追加し始める前に、プレビューで使用したい MorphTargetSet をまず追加する必要があります。ルート アニメーション ノードを選択し、プレビュー Morph セット アレイを展開して、そこに Morph ノードを追加します。アニメーション ツリーに Morph ポーズ ノードを配置するとき、使用する Morph Target 名を伝えます。アニメーション ツリーは、 Morph Target 名を見つけるために指定された MorphTargetSet を検索します。実際のゲームでは、骨格メッシュ コンポネントの Morph セット アレイを代わりに使用します。

Morph Target のブレンドは、骨格アニメーションを一緒にブレンドするのとは異なる働きをします。これは、 Morph Target は、様々な入力の間の補間である結果ではなく、加算的に組み合わせられるものだからです。このことは、例えば、複数の Morph Target を一つのノードの入力に接続できることを意味します。

AnimTrees (アニメーション ツリー) の詳細については、AnimTree エディタ ユーザーガイド を参照してください。

Matinee でのモーフ ターゲットの使用

Matinee でモーフを使用するには:

  1. AnimTree (アニメーション ツリー) を作成し、MorphNodeWeight (モーフノード ウェイト) を経由してMorphPoses (モーフポーズ) が モーフトラックに入るようにします。
  2. MorphNodeWeight に NodeName (ノード名) を与えます。マチネでこれを操作するときにこの名前が使用されます。
  3. AnimTree ビューアにモーフを表示します。これには、AnimTree を選択してその PreviewSkelMesh (骨格メッシュのプレビュー) と PreviewMorphSets (モーフセットのプレビュー) を設定します。
  4. [Add Actor] (アクタを追加) を右クリックして [Add SkeletalMeshMAT] (骨格メッシュ MAT を追加) を選択し、骨格メッシュをワールドに追加します。これにより、AnimTree が使用できるようになります。
  5. メッシュを選択し、そのプロパティで SkeletalMeshactpr/SkeletalMeshComponent/SkeletalMeshComponent に進み、AnimTreeTemplate と MorphSets をそれぞれ作成したオブジェクトに設定します。
  6. Matinee を作成し、メッシュの NewSkeletalMeshGroup (新規骨格メッシュグループ) を追加してそれを右クリックし、モーフウェイトを追加します。モーフウェイトを選択したら、そのプロパティの MorphNodeName セクションに、AnimTree にある MorphNodeWeight の NodeName を追加します。これでキーフレームを追加して、他の Matinee トラックのようにアニメーション化できるようになります。同時に複数の MorphWeight トラックを追加して合成することもできます。モーフのシーケンスをアニメーション化する場合は、1 つのモーフをオフにすると同時に他をオンにする必要があります。

AnimTree の詳細については、 UnrealMatinee ユーザーガイド を参照してください。

コンテンツ

マップ UTGame/DemoContent/TestMaps/MorphTest.ut3 には、MorphTestActor.uc クラスを使用し、 Morph Target と同時に使用される SkelControls(骨格コントロール)の単純な使用法を実証します。ヘッドには、移動するアクタを追跡するためのコントローラを使用し、ヘッドからアクタまでの距離に基づいてアニメーション ツリーにあるノードのウェイトをコントロールします。この例のための資産は、UTGame/DemoContent/Packages/MorphingTest.upk にあります。

プレーヤーのカスタマイズ: Fatness (隆起や豊満さの表現)

キャラクターのカスタマイズとして、ボーンをスケーリングして Fatness (隆起や豊満さ) を表現するには、モーフ ターゲットの利用が非常に適しています。この場合、複数のモーフ ターゲットを使用してベースメッシュのさまざまな部位に筋肉や膨らみを付けることができます。例えば、右腕の二頭筋、左足ふくらはぎ、腹用などに、それぞれモーフ ターゲットを 1 つずつ用意します。次に、各部位との適切なブレンドが得られる割合に相当するウェイトを指定して、これらをメッシュに適用します。もちろん、身体の各部位を個別に変形する必要がない場合は、ベースメッシュに対して最大の膨張度を持つモーフ ターゲットを 1 つだけ作成し、必要に応じてそれをスケーリングすることもできますが、個別化によりはるかに多くの多様性を創り出せるのは自明のことです。

モーフ ターゲットにより変化する頂点のデルタ値のみメモリに格納されるので、メモリのコストはそれらの頂点の数に依存します。モーフィングはGPU で処理されるため、各種のモーフ ターゲットが累積された後の GPU ベースのスキンメッシュなら、パフォーマンスのオーバーヘッドはわずかです。そのため、アクティブなモーフ ターゲットやウェイトのセットを変更しない限り、基本的にパフォーマンスコストはかかりません。