キャラクター用の正確な非線形デフォーマ システムの作成は、特にリアルタイム ゲーム エンジンでは、複雑で負荷の高いプロセスになる可能性があります。代わりに、Unreal Engine の 機械学習 (ML) デフォーマ を使用すると、外部からキャプチャできるあらゆる複雑な変形モデルを近似することで、インゲーム キャラクターの品質を大幅に向上させることができます。
ML デフォーマは、Unreal のニューラル ネットワーク推論 (NNI) システムとデフォーマ グラフ システムを内部で活用し、すべてを GPU で処理することができます。また、このシステムには、トレーニング データの生成に活用できる Maya 用のプラグインを備えています。このデータは、ML Deformer アセットをトレーニングするために、FBX ファイルや Alembic ファイルとしてエクスポートされます。
このドキュメントでは、ML デフォーマ プロセスの概要について説明します。
前提条件
ML デフォーマは プラグイン であるため、使用する前に有効にしておく必要があります。Unreal Engine メニューで [Edit (編集)] > [Plugins (プラグイン)] に移動し、[Animation (アニメーション)] セクションで [MLDeformer] を見つけて有効にします。この変更を有効にするためには、エディタを再起動する必要があります。
ML デフォーマは、ワークフローの一部で、Autodesk Maya を使用する必要がある。
Unreal Engine と Autodesk Maya の両方にスキン キャラクターがあること。
Autodesk Maya プラグインの設定
ML Deformer Data Generation Maya プラグイン をダウンロードして、インストールする必要があります。そのためには、まずマーケットプレイスの「ML Deformer」ページに移動して、このプラグインをダウンロードします。
プラグインがインストールされると、Unreal Engine のインストール ディレクトリの 「Plugins」 フォルダ内に格納されます。デフォルトでは、このプラグインは次のパスのフォルダにインストールされます。
…\Engine\Plugins\Marketplace\MayaMLDeformer\Content\MayaMLDeformer.zip
「MLDeformer.mod and the MLDeformer」フォルダの内容を「C:\Users\YourUserName\Documents\maya\modules
」にコピーします。modules フォルダがない場合は、作成することができます。
Mac ユーザーの場合、 プラグインは /Users/Shared/Autodesk/modules/maya
にインストールされます。
これで、Autodesk Maya を開くと、メインメニュー バーに UE MLDeformer が表示されます。
Maya でのトレーニング データの生成
ML Deformer プラグインは、機械学習アルゴリズムに役立つデータ セットを生成するボーンにプロシージャルなキーフレームを設定することで、キャラクターのトレーニング データを作成します。トレーニング データ生成プロセスを開始するには、まずツールを開く必要があります。
Maya のメインメニュー バーから、[UE ML Deformer] > [Data Generator (データ ジェネレーター)] をクリックすると、[Training Data Generation Setup (トレーニング データ生成セットアップ)] ウィンドウが表示されます。
また、Maya シーンにスキン キャラクターをインポートするか、開きます。この例では、基本的な上腕二頭筋モデルを使用しています。
ボーン パラメータを追加する
ジョイントをトレーニングするには、修正するノードと属性のリストおよびこれらの属性が受け入れることのできる値の範囲を追加する必要があります。
追加したい Maya のジョイントを選択し、[Training Data Generation Setup] ウィンドウの [Parameters (パラメータ)] セクションにある 追加 (+) ボタンをクリックします。
この操作により、[Add Parameters (パラメータを追加)] ウィンドウが開きます。このウィンドウで、トレーニングに使用するジョイント属性をさらに絞り込むことができます。また、更新 ボタンをクリックすると、現在の選択内容でパラメータ リストが更新されます。
パラメータとして追加したいジョイント属性を選択して、[Add Selected Parameters (選択したパラメータを追加)] をクリックし、[Training Data Generation Setup] に追加します。ほとんどの場合、ジョイントで必要なのは回転属性だけです。
[Attributes Filter (属性フィルタ)] セクションを使用すると、自動的に属性を絞り込んで除外することができます。追加 (+) ボタンをクリックして新しいエントリを追加し、除外したい属性に基づいた名前を付けます。この例では、結果として得られる属性が回転のみを示すように、すべての平行移動とその他の細かい属性を除外しています。
ボーン パラメータを設定する
属性が追加されたら、今度は各軸の可動範囲を設定する必要があります。これには、各属性を選択して、[Parameter Properties (パラメータ プロパティ)] でその軸の可動範囲の [Minimum (最小)] と [Maximum (最大)] を指定します。これらの値は、キャラクターの複雑度やタイプに応じて、できるだけ現実的な値にする必要があります。このデータの定義は、ML デフォーマのトレーニング プロセスの正確性と品質を確保するために必要です。このプラグインでは、値がそのジョイントに対して設定されている場合、Maya で設定されているジョイント制限に合わせて値を自動的に初期化します。また、特定のパラメータ タイプにデフォルトを指定することもできます。
これらのパラメータを正しく設定するのは時間がかかるため、[File (ファイル)] > [Save Config (コンフィグを保存)] をクリックして進捗を「.json
」ファイルとして保存することをお勧めします。
保存した設定は、[File] > [Load Config (コンフィグをロード)] を選択して復元できます。コンフィギュレーション ファイルはノード名および属性名に基づいており、名前が一致するすべての Maya のシーンで使用できます。
メッシュを設定する
トレーニング データを確定するには、[Base Mesh (ベース メッシュ)] と、オプションで [Target Mesh (ターゲット メッシュ)] を指定する必要があります。
ベース メッシュ はスケルトンにバインドされているメッシュで、Unreal Engineで使用されているメッシュと同じです。
ターゲット メッシュ は、ベース メッシュと同じ頂点とトポロジを含む別のメッシュであるものの、変形に使用されます。たとえば、ターゲット メッシュは、リアルな変形を作成するために、ボリューム保存手法や筋肉シミュレーションを使用する場合があります。ターゲット メッシュは Maya のものを使用したり、Houdini などの外部プログラムで作成することもできます。ターゲット メッシュは alembic キャッシュ .abc
としてエクスポートされます。
ベース メッシュとターゲット メッシュを指定するには、[Mesh Settings (メッシュ設定)] 領域の 追加 (+) ボタンをクリックします。ウィンドウが表示されるので、[Select (選択)] ボタンをクリックし、各メッシュを指定します。ターゲット メッシュはシーンに含まれていない限りオプションです。
メッシュを選択して、[OK] をクリックすると、[Mesh Settings (メッシュ設定)] リストに追加します。
スケルタル メッシュが複数のメッシュで構成されている場合、個々のメッシュを [Mesh Settings] リストに追加する必要があります。通常、これは、 モジュラー キャラクター を使用している場合に限り、行う必要があります。
ポーズ生成を開始する
最後に、[Generator Settings (ジェネレーター設定)] を指定して、トレーニングの長さと構成を決定します。キーフレームは、パラメータ リストの各属性に対して、[Num Poses (ポーズ数)] ごとに作成されます。
名称 |
説明 |
---|---|
Num Poses (ポーズ数) |
作成するランダム ポーズの数。これらのフレームに対してアニメーションを作成します。推奨範囲は 5,000 ~ 50,000 ですが、一般的なケースでは、25,000 に設定します。 トレーニングで適切な結果を得るには、大量のデータが必要です。Unreal のデフォルトのトレーニング設定に対応するアニメーション データは、約 25,000 フレームと想定されています。より少ないデータ セットでトレーニングすることもできますが、多くの場合、結果の品質が低下します。[Num Poses] の値が大きいほど、トレーニングに時間がかかります。 |
Start Frame (開始フレーム) |
ランダムに生成されるポーズが開始するフレーム番号です。「0」より大きい値を設定することで、既存のアニメーション データと生成されたフレームを組み合わせることができます。 |
Active Parameters (アクティブ パラメータ) |
各フレーム間のポーズのランダム性の度合い。ほとんどの場合、「75%」 前後に設定する必要があります。値が高いほど品質が高くなります。ただし、「100%」 に設定すると、シミュレーションの問題が発生することがあります。 |
[Generate (生成)] をクリックして、Maya でのトレーニング データ生成プロセスを開始します。[Target Mesh] と [Target Alembic File (ターゲット Alembic ファイル)] を使用している場合、このプロセスに非常に長い時間がかかることがあります。また、Alembic ファイルは頂点数とポーズ数の設定によっては非常に大きくなる (約 50 ~ 100 GB) ため、十分な空きディスク容量を確保してください。
トレーニング データの生成が終了すると、[Target Alembic File] を指定した場合は、エクスポートされた .fbx
ファイルおよび .abc
ファイルが得られます。
FBX ファイルと Alembic ファイルは同じ数のフレームを含んでおり、各フレームは同じスケルタル ポーズに対応している必要があります。
Unreal Engine でのデフォーマのトレーニング
これで、完成したトレーニング ファイルを Unreal Engine に取り込むことができます。
Alembic ファイルをインポートする
まず、トレーニング プロセスで作成した .abc
ファイル、または別の外部デフォーマ ツールで作成したファイルをインポートします。コンテンツ ブラウザ**で、[Import (インポート)] をクリックし、.abc
ファイルを選択して [Open (開く)]** をクリックします。
インポート設定ダイアログ ウィンドウで、インポートに関する次のパラメータを設定します。
[Import Type (インポート タイプ)] を [Geometry Cache (ジオメトリ キャッシュ)] に設定します。
[Flatten Tracks (平坦化されたトラック)] を無効にします。これは、FBX メッシュを Alembic Geometry Cache トラックと一致させるために必要です。メッシュが 1 つのみの場合は、[Flatten Tracks] を有効にしておくことができますが、必須ではありません。Alembic Track の名前の先頭は、Maya のアウトライナで表示される名前と同じである必要があります。
より高い精度を確保するために、[Compressed Position Precision (圧縮された位置の精度)] を 「0.001」 に設定します。デフォルトを維持すると、ML デフォーマが圧縮によって生じた誤差を学習することがあります。
[Store Imported Vertex Numbers (インポート済み頂点数の格納)] を有効にします。これは、スケルタル メッシュとジオメトリ キャッシュの間で頂点を一致させるために必要です。これを怠ると、ML デフォーマ エディタが警告を表示し、ジオメトリ キャッシュを再度インポートする必要があります。
これらのパラメータを設定したら、[Import] をクリックして、ジオメトリ キャッシュをインポートします。このプロセスは、alembic ファイルのサイズにより非常に長い時間がかかる場合があります。
トレーニングした FBX をインポートする
次に、Maya のトレーニング データから作成した FBX ファイルをインポートする必要があります。[FBX Import Options (FBX インポート オプション)] で、インポートに関する次のパラメータを設定します。
すでに Unreal Engine に FBX ファイルをインポートしている場合は、キャラクターのスケルトンを使用するように [Skeleton (スケルトン)] フィールドを設定します。
[Import Animations (アニメーションをインポート)] を有効にします。
[Animation Length (アニメーションの長さ)] を [Exported Time (エクスポート時間)] に設定します。
これらのパラメータを設定したら、[Import (インポート)] をクリックして FBX をインポートします。このプロセスは、FBX ファイルのサイズにより非常に長い時間がかかる場合があります。
ML Deformer アセットを作成する
次に、Alembic と FBX の両方のシーケンスを格納し、関連付けるために、ML Deformer アセット**を作成する必要があります。コンテンツ ブラウザで、追加 (+) ボタンをクリックして、[Animation (アニメーション)] > [ML Deformer (ML デフォーマ)]** を選択します。作成されたら、アセットを開きます。
ML デフォーマ エディタ の [Details (詳細)] パネルで、キャラクターのスケルタル メッシュとインポートされたトレーニング済みの FBX アニメーション シーケンスの両方を、それぞれのプロパティに割り当てます。これで、メッシュがビューポートの Training Base というラベルの下に表示されるようになります。
また、インポートされた Alembic ファイルを Geometry Cache プロパティに割り当てます。これで、Alembic メッシュがビューポートの Training Target というラベルの下に表示されるようになります。
トレーニング ベース モデルの上にレンダリングされた緑色の線が表示されているのがわかります。これらはベース メッシュとターゲット メッシュの差分 (デルタ) を表しています。デフォーマ モデルはトレーニング中にこれらを学習しますので、これらが正しく表示されていることを確認してください。ターゲット メッシュの回転がトレーニング ベースと異なる場合、[Alignment Transform (アライメント トランスフォーム)] を使用して、両者を一致させることができます。両者を重ねる必要はありません。回転だけ一致させる必要があります。
タイムラインの再生ヘッドをドラッグすると、両方のシーケンスが一緒にスクラブされ、アニメーションが一致していることを確認することができます。緑色の線 (デルタ) が各フレームで適切に表示されることを確認してください。
一部のフレームでデルタが正しく表示されていない場合は、オプション [Constant Topology Optimization (一致のトポロジの最適化)] を有効にしてジオメトリ キャッシュの再インポートを試みることができます。
ML デフォーマ エディタ ツールバーの [Train Model (モデルをトレーニング)] をクリックし、トレーニングを開始します。このプロセスには、時間かかる場合があります。
デフォーマ ブループリントの設定
レベルのキャラクターで ML デフォーマを使用し始めるには、ブループリントの ML Deformer コンポーネント を使用して、キャラクターを設定する必要があります。
まず、アクタ ブループリント を作成します。コンテンツ ブラウザ で、追加 (+) > [Blueprint Class (ブループリント クラス)] をクリックして、[Actor (アクタ)] を選択します。作成されたら、ブループリントを開きます。
スケルタル メッシュをコンテンツ ブラウザから [Components (コンポーネント)] パネルにドラッグし、ブループリントに追加します。
次に、[Components] パネルの 追加 (+) をクリックし、[MLDeformer] を選択して、MLDeformer コンポーネント を追加します。
MLDeformer コンポーネント を選択して、[Details (詳細)] パネルで ML Deformer アセット を指定します。
最後に、Skeletal Mesh コンポーネント を選択して、Mesh Deformer プロパティで デフォーマ グラフ を指定します。
デフォーマ グラフがない場合は、「Engine > Plugins > MLDeformer Content > Deformers」コンテンツ フォルダにあるサンプルの DefaultMLDeformerGraph を使用することができます。このフォルダにアクセスするには、コンテンツ ブラウザの [Settings (設定)] をクリックし、[Show Engine Content (エンジンのコンテンツを表示)] と [Show Plugin Content (プラグインのコンテンツを表示)] の両方を有効にしてください。