Unreal Engine の Deformer Graph プラグインを使用して、デフォーマー グラフ アセットを作成し、編集して、Unreal Engine のスキン メッシュに対して、メッシュ変形を実行し、カスタマイズできます。デフォーマー グラフを使用することにより、メッシュのジオメトリを調整するロジックを作成および変更してメッシュ変形の処理を微調整できます。また、Unreal Engine 内で完全に新しい変形を作成することもできます。ほとんどのデフォーマー グラフは、キャラクターや手動で作成するアニメーションよりも変形ロジックを使用して作成する方が簡単な 1 回限りのアニメーションに対して、リアルなスキンやファブリック (衣装) の動きを微調整するために使用されます。

メッシュ デフォーマーには、多様な形式 (モーフィング ターゲット、クロス シミュレーション) などがあり、外部の DCC (デジタル コンテンツ作成) ソフトウェア (機械学習 (ML) デフォーマー など) で作成される生成モデルもあります。
このドキュメントでは、Unreal Engine のデフォーマー グラフ システムの概要について説明します。
デフォーマー グラフを使用する方法
ここでは、Unreal Engine でデフォーマー グラフをセットアップし使用する方法について解説します。
前提条件
- Deformer Graph プラグイン を有効にします。メニュー バー で [Edit (編集)] > [Plugins (プラグイン)] の順に選択して [Animation (アニメーション)] セクションにある Deformer Graph を見つけるか、検索バー を使用して見つけます。このプラグインを有効にして、エディタを再起動します。

- プロジェクトにスキン メッシュ (スケルタルメッシュ キャラクターまたは スタティックメッシュ オブジェクト) が含まれている。
デフォーマー グラフ アセットを作成する
Deformer Graph アセットを作成するには、コンテンツ ブラウザ で 右クリック して、[Animation (アニメーション)] > [Deformers (デフォーマー)] > [Deformer Graph (デフォーマー グラフ)] を選択します。

ビューポートでメッシュを選択し、[Details (詳細)] パネルで Mesh Deformer プロパティに移動し、Mesh Deformer プロパティを 有効 にした後、選択メニューから Deformer Graph オプションを選択して、新しいデフォーマー グラフを作成できます。

次のデフォルト デフォーマー グラフ アセットは、Deformer Graph プラグインとともにパッケージ化に含まれます。キャラクターやオブジェクトにカスタム仕様のメッシュ デフォーマー ロジックを作成するときに、これを使用し、カスタマイズできます。これらのデフォーマー グラフは、コンテンツ ブラウザで [Engine] > [PlugIns] > [Deformer Graph Content] > [Deformers] に移動してアクセスできます。

アセット | 説明 |
---|---|
DG_LinearBlendSkin | このグラフは、標準の線形ブレンド スキニング パイプラインを適用します。すべてのスキニング機能はこのグラフを使用してサポートされます。 |
DG_LinearBlendSkin_Morph | このグラフは、標準の線形ブレンド スキニングおよび モーフィング ターゲット パイプラインを適用します。これらのパイプラインの全機能がこのグラフでサポートされます。 |
DG_LinearBlendSkin_Morph_Cloth | このグラフは標準の線形ブレンド スキニング、モーフィング ターゲット および クロス シミュレーション パイプラインを適用します。これらのパイプラインの全機能がこのグラフでサポートされます。これは DG_LinearBlendSkin と DG_LinearBlendSkin_Morph デフォーマー グラフのスーパーセットであり、これらの代わりにパフォーマンス低下なしで使用できます。シンプルなデフォーマー グラフ アセット、DG_LinearBlendSkin と DG_LinearBlendSkin_Morph は、独自の実装を構築するユーザーが参照用として利用できます。 |
DG_LinearBlendSkin_Morph_Cloth_RecomputeNormals | このグラフは標準の線形ブレンド スキニング、モーフィング ターゲット および クロス シミュレーション パイプラインを適用します。頂点法線を再計算するために追加パスにも適用します。これは GPU スキン キャッシュの既存の動作を再計算接線設定でエミュレートします。 |
「Engine」フォルダ、メッシュの [Details] パネルでデフォーマー グラフを選択したとき、利用可能なデフォルトのデフォーマー グラフが見つからない場合、コンテンツ ブラウザ の [View Settings (表示設定)] で プラグイン コンテンツ が表示になっていることを確認します。

デフォーマー グラフ アセットの作成と使用の詳細については、「カスタム デフォーマー グラフの作成方法」を参照してください。
デフォーマー グラフを開く
Deformer Graph プラグイン を有効にした後、デフォーマー グラフ エディタ を開きます。これは コンテンツ ブラウザ にある、あるいはゲーム オブジェクトの [Details] パネルの Mesh Deformer プロパティにある、デフォーマー グラフ アセットを ダブルクリック します。

デフォーマー グラフ インターフェース
ここで示すのは、デフォーマー グラフ インターフェースのリファレンスで、Unreal Engine でメッシュを変形するために、カスタム デフォーマー グラフ アセットを作成し編集するときに使用できます。

インターフェース | 説明 |
---|---|
1. Compile (コンパイル) | デフォーマー グラフをコンパイルします。 |
2.Viewport (ビューポート) | メッシュにおけるデフォーマー グラフ ロジックのエフェクトを表示します。 |
3.Palette (パレット) | 固有のデフォーマー グラフ ブループリント ノードのツールボックス。 |
4.Explorer (エクスプローラ) | デフォーマーグラフの サブグラフ、コンポーネントのバインディング、変数 および リソース を追加し、管理します。 |
5.Graph Editor (グラフ エディタ) | 他の ブループリント エディタ と同様に、固有の デフォーマー グラフ ノード セットを使用して、デフォーマー グラフ ロジックを管理し、編集します。 |
6.Compile Output (コンパイル出力) | デフォーマー グラフの正常/失敗コンパイル後、コンパイラ ログと情報をレビューします。 |
6.Details (詳細) | コンポーネントやノード固有の情報とプロパティにアクセスします。 |
7.Shader Text Editor (シェーダー テキスト エディタ) | HLSL (上位レベル シェーダー言語) による、Custom Compute Kernel ノード プログラミングを変更するために使用するテキスト エディタ。 |
パレット パネル
デフォーマー グラフ パレット を使用して、カスタム デフォーマー グラフのノードやカーネルをドラッグアンドドロップして、メッシュ変形ロジックを作成するときに参照または使用できます。

パレット パネルで利用できるコンポーネントを網羅したリストと説明については、このドキュメントの最後にある「パレット コンポーネントのリファレンス」リストを参照してください。
デフォーマー グラフ サブグラフ
デフォーマー グラフ内で使用できる 3 種類の サブグラフ があります。

デフォルトでは、デフォーマー グラフには、フレームごとに 1 回実行される Update Graph (更新グラフ) のみが含まれます。
所有するオブジェクトが 初期化 されたときに実行される SetUp Graph (セットアップ グラフ) をオプションで追加できます。
さらに、Trigger Graphs (トリガーグラフ) を作成し、使用できます。これはブループリントまたは C++ コードからリクエストで実行できます。Trigger Graphs がリクエストされるとき、キューに入り、存在する場合は、初期 Setup Graph の 後、各フレームで Update Graph の 前 に実行されます。
サブグラフをデフォーマー グラフに追加するには、[Explorer] パネルの [Graphs (グラフ)] セクションの隣にある [+ (追加)] をクリックする、または [Explorer] パネルの一番上にある緑の [+Add New (+新規追加)] ボタンをクリックします。いずれかをクリックした後、ドロップダウン メニューから Setup Graph または Trigger Graph を作成するために選択できます。

追加の Update Graph はなく、1 つの Setup Graph だけが、デフォーマー グラフに追加できます。プロジェクトで必要とされる数の Trigger Graph を追加できます。Trigger Graph は名前を変更でき、[Explorer] パネルで対象の Trigger Graph の名前を ダブルクリック するか、Trigger Graph を選択してから F2 キーを押します。
コンポーネントのバインディング
コンポーネントのバインディングは、所有するオブジェクトに含まれる利用可能なコンポーネントに対する参照です。

デフォーマー グラフに追加のコンポーネントのバインディングを作成できます。[Explorer] パネルの [Component Bindings (コンポーネントのバインディング)] の隣にある [+ (追加)] をクリックする、または [Explorer] パネルの一番上にある緑の [+Add New (+新規追加)] ボタンをクリックします。

次に、デフォーマー グラフ ロジックを作成するときに使用できるコンポーネントのバインディングのサンプルを示します。
コンポーネントのバインディング | 説明 |
---|---|
スケルタルメッシュ コンポーネント | 所有するオブジェクトの スケルタルメッシュ コンポーネントへの参照を追加します。スケルタルメッシュを使用すると、Mesh Vertices、Triangles および Scene Time など、多くのプロパティとコンポーネントを参照できます。 |
Scene Component | シーン コンポーネントは、デフォーマー グラフが占めているキャラクターやオブジェクトがある シーン からデータや情報を取り出します。ゲーム時間や他の便利な情報をシーン コンポーネントから引き出せます。 シーン情報は、スケルタルメッシュまたはスキン メッシュのコンポーネントのバインディングから収集できますが、状況により、個別のシーン コンポーネントのバインディングを使用すると、コントロールや整理の観点で便利になることがあります。 |
スキンメッシュ コンポーネント | スキン メッシュ コンポーネントはあらゆる種類のスキン メッシュを代表するものです。これはキャラクターにアタッチされた補助オブジェクトであり、ボーンがないキャラクターやオブジェクトを表します。 |
変数
[Explorer] タブ の [Variables (変数)] セクションで、デフォーマー グラフのロジックを調整し、コントロールするために、参照できる、外部から見える変数を作成し、管理できます。

変数を作成するには、[Explorer] パネルの [Variables] セクションの隣にある [Add (追加)] (+) をクリックする、または [Explorer] パネルの一番上にある、緑の (+) [Add New] ボタンをクリックします。

新しい変数を作成した後、[Explorer] パネルで変数を選択し、[Details] パネルでそのプロパティを開くことができます。

[Details] パネルで、Variable Name プロパティを使用して変数名を指定し、Data Type を定義できます。変数にあらゆるデータ タイプまたはコンポーネントを割り当てることができ、他のデフォーマー グラフのノードで使用できます。
リソース
変数 と同様に、[Explorer] パネルの [Resources (リソース)] セクションで、Shader Resources (シェーダー リソース) を作成し管理できます。リソースは、デフォーマー グラフで他のノードが、メッシュ変形関数を実行するために参照できる、値とコンポーネントへの内部参照です。

リソースを作成するには、[Explorer] パネルの [Resources] セクションの隣にある [Add (追加)] (+) をクリックする、または [Explorer] パネルの一番上にある、緑の [+Add New] ボタンをクリックします。

新しいリソースを作成した後、[Explorer] タブでリソースを選択し、[Details] パネルでそのプロパティを開くことができます。

次のリソース パラメータを調整できます。
プロパティ | 説明 |
---|---|
Resource Name (リソース名) | 指定されたフィールドでリソースに名前を付けます。 |
Data Type (データ タイプ) | リソースが格納できるデータのタイプを設定します。 |
Component Binding (コンポーネントのバインディング) | リソースが結合されるコンポーネントのバインディングを設定します。 |
Data Domain (データ ドメイン) | リソースのデータ ドメインを設定します。 最初のドロップダウン メニューで、ディメンションを選択できます。次のディメンションから選択できます。
ディメンションが「Triangle」または「Vertex」に設定されているとき、エントリごとに何個のデータ値を格納できるのかを追加で指定できます。x1 (エントリごとに 1 つのデータ点) から始めて、x3、x4、x8 から選択できます。 データ点は、そのディメンションとともに、各エントリで表示されるデータ値の量でも一致する必要があります。入力/出力ピンに互換性がない場合、またはデフォーマー グラフ ロジックでリソースが応答しない場合、Data Domain プロパティが互換性のある値に設定されていることを確認します。 |
変数と異なり、デフォーマー グラフ内でリソース値やコンポーネントを 設定 し、参照 できます。リソースを作成した後、デフォーマー グラフ エディタにリソースを ドラッグアンドドロップ して、リソースに含まれる既存の値を参照するために使用する Get インスタンス、後で使用するリソースを設定、定義するために使用する Set インスタンス、格納された値を設定および参照するために使用できる Get/Set インスタンスから選択できます。

Get/Set Resource、Get Resource または Set Resource ノード を作成した後、リソースのインスタンスが リソース バッファ とやり取りする方法を変更できます。この動作を定義するには、Graph でノードを選択し、そのノードの [Details] パネルで Write Type プロパティを設定します。

次の書き込みタイプ プロパティ オプションから選択できます。
オプション | 説明 |
---|---|
Write (書き込み) | 値をリソース バッファに書き込みます。 |
Write Atomic Add (追加のアトミック書き込み) | リソース バッファの値にグラフ値を上書きします。 |
Write Atomic Min (最小値のアトミック書き込み) | リソース バッファの値にグラフの 最小 値を上書きします。 |
Write Atomic Max (最大値のアトミック書き込み) | リソース バッファの値にグラフの 最大 値を上書きします。 |
詳細パネル
デフォーマー グラフの詳細 パネルでは、各デフォーマー グラフ ノードに関する情報と設定を表示します。ノードのプロパティを確認するには、グラフ エディタでノードを選択し、[Details] パネルにプロパティを表示します。

Kernel ノードを選択すると、入力 と 出力 のバインディングを追加し変更できます。
関数の結果を達成するには、入力と出力のバインディングは、つなぐ先のデータ タイプに正確に一致する必要があります。Kernel の入力および出力バインディングが想定する接続または抽出値と一致するように設定されていることを確認してください。
シェーダー テキスト エディタ
シェーダー テキスト エディタ を使用して、Custom Compute Kernel ノードをプログラムし、 特定メッシュ変形の動作をコントロールできます。

シェーダー テキスト エディタでは、カーネルをプログラミングするために HLSL (上位レベル シェーダー言語) を扱います。
デフォーマー グラフに追加された各 Custom Compute Kernel に対して、シェーダー テキスト エディタ パネル内に新しいタブが開きます。

各 Custom Compute Kernel タブ内で、ノードの Declarations (宣言) にアクセスでき、読み取り専用で、ノードに対するグラフ エディタの変更 (追加された入力および出力のバインディングなど) を表します。

メッシュ変形を作成するため、カスタムの HLSL コードを書き込める、ノードの シェーダー テキスト にもアクセスできます。

HLSL コーディング標準の詳細については、Microsoft 社の上位レベル シェーダー言語のリファレンスおよびプログラミング ガイド を参照してください。
シェーダー テキスト エディタを使用するサンプル ワークフローの詳細については、「デフォーマー グラフの作成方法」を参照してください。
パレット コンポーネントのリファレンス
次のように、デフォーマー グラフ パレット にある利用可能なコンポーネントのリストとその関数の説明を参照できます。

パレット コンポーネント | ノード | 説明 |
---|---|---|
Animation Attributes (アニメーション属性) | ![]() |
デフォーマー ロジックをトリガー、アクティブ化するために使用できる アニメーション属性 への参照を追加します。 |
Cloth (クロス) | ![]() |
スケルタルメッシュに関連付けられた クロス シミュレーション モデルへの参照を追加しアタッチします。詳細については、「クロス シミュレーション モデル」を参照してください。 |
Connectivity (接続性) | ![]() |
スキン メッシュ コンポーネントを既存の (複数) 頂点データ セットにつなげます。 |
Debug Draw (デバッグ描画) | ![]() |
つながったスキン メッシュ コンポーネントのバインディングを使用して、ビューポートでメッシュのデバッグ ビューを描画します。デバッグ データは 文字列 として抽出し、グラフのノード 出力 ピンを使用して、アクセスできます。 詳細パネルには次のオプションがあります。
|
Morph Target (モーフィング ターゲット) | ![]() |
スキン メッシュ コンポーネントを使用すると、Morph Target ノードは、Delta Position (デルタ位置) と Delta Normal (デルタ法線) を Vector 3** 値として分離できます。 |
Scene Data (シーン データ) | ![]() |
デフォーマー グラフ ロジックをコントロール、トリガーするために使用できるシーン データを抽出します。シーン コンポーネントのバインディング を作成できますが、スケルタルメッシュのコンポーネントのバインディング を使用して、ランタイム時にスケルタルメッシュが占有する現在のシーンを参照することもできます。 |
Skeleton (スケルトン) | ![]() |
スケルタルメッシュ コンポーネントのバインディングからスケルトン データを抽出します。以下に使用可能なオプションを示します。
|
Skinned Mesh (スキン メッシュ) | ![]() |
メッシュ データを スキン メッシュ コンポーネントのバインディングから抽出します。以下に使用可能なオプションを示します。
|
Custom Compute Kernel (カスタム コンピュート カーネル) | ![]() |
カスタム仕様のメッシュ変形を実行するために、HLSL (上位レベル シェーダー言語) を使用して、プログラミングできる、Custom Compute Kernel を作成します。Custom Compute Kernel の作成と使用の詳細については、「カスタム デフォーマー グラフの作成方法」を参照してください。 |
Execute Skinned Mesh (スキンメッシュを実行) | ![]() |
スキン メッシュ コンポーネントを入力として使用すると、Kernel で使用するために、メッシュ データ スレッドを実行できます。[Details] パネルで、頂点 あたり 1 スレッド、または トライアングル あたり 1 スレッドで Kernel を実行するため、関数の ドメイン を設定できます。 Execute Skinned Mesh ノードは、つなげて、Custom Compute Kernel で使用できる IntVector 3 値を出力します。X、Y または Z 軸のみの出力データに分離するため、出力ピンの隣にある 三角アイコン を使用して、出力 ピンを展開します。それぞれの軸には、個別の 整数 出力ピンがあります。 |
Write Skinned Mesh (スキン メッシュを書き込み) | ![]() |
Write Skinned Mesh 出力ノードは、デフォーマー グラフの最終操作であり、メッシュの 頂点や トライアングル** に対する変更を書き込みます。 Skinned Mesh 入力ピンは、初期メッシュの コンポーネントのバインディング につなげます。続いて、Vector 3 の Position 入力ピン、Vector 4 の Tangent X、Tangent Z および Color 入力ピンを使用すると、新しいメッシュ プロパティをメッシュに書き込むことができます。 |
Bool Constant (ブール定数) | ![]() |
定数 ブール 値を設定します。ノードはブール変数値を受け取ることができます。またグラフや、ノードの [Details] パネルで、Value プロパティを使用して、ブール値を手動で切り替えられます。 |
Component Constant (コンポーネント定数) | ![]() |
コンポーネント定数 をコンポーネントのバインディングを使用して設定します。コンポーネント定数はグラフで設定、またはノードの [Details] パネルにある Value プロパティを使用して手動で定義できます。 |
Float Constant (float 定数) | ![]() |
定数 float 値を設定します。ノードは別のコンポーネントから float 値を受け入れられます。またはグラフで、またはノードの [Details] パネルで値を手動で設定できます。 |
Int Constant (Int 定数) | ![]() |
定数 符号付整数 値を設定します。ノードは、他のコンポーネントから ゼロ と 正の 整数値を受け入れられます。またはグラフで、またはノードの [Details] パネルで値を手動で設定できます。 |
UInt Constant (UInt 定数) | ![]() |
定数 符号なし整数 値を設定します。ノードは、他のコンポーネントから あらゆる 整数値を受け入れられます。またはグラフで、またはノードの [Details] パネルで値を手動で設定できます。 |
Double Constant (Double 定数) | ![]() |
定数 double 値を設定します。ノードは別のコンポーネントから double 値を受け入れられます。グラフで、またはノードの [Details] パネルで値を手動で設定できます。 |
Int Vector 2 Constant (Int Vector 2 定数) | ![]() |
定数 Vector 2 値を X および Y 軸に対して設定します。ノードは別のコンポーネントからベクター 2 の値を受け入れられます。三角アイコンを使用して入力ピンを展開することで、グラフで X と Y の整数値を、あるいは、ノードの [Details] パネルで、手動で設定できます。出力ピンの近くにある三角アイコンを使用して、Vector 2 の値を X と Y の整数値に分割することもできます。 |
Int Vector 3 Constant (Int Vector 3 定数) | ![]() |
定数 Vector 3 値を X、Y および Z 軸に対して設定します。ノードは別のコンポーネントからベクター 3 の値を受け入れられます。三角アイコンを使用して入力ピンを展開することで、グラフで X、Y および Z の整数値を、あるいは、ノードの [Details] パネルで、手動で設定できます。出力ピンの近くにある三角アイコンを使用して、Vector 3 の値を X、Y および Z** の整数値に分割することもできます。 |
Int Vector 4 Constant (Int Vector 4 定数) | ![]() |
定数 Vector 4 値を X、Y、Z および W 軸に対して設定します。ノードは別のコンポーネントから Vector 4 の値を受け入れられます。三角アイコンを使用して入力ピンを展開することで、グラフで X、Y、Z および W の整数値を、あるいは、ノードの [Details] パネルで、手動で設定できます。出力ピンの近くにある三角アイコンを使用して、Vector 4 の値を X、Y、Z および W の整数値に分割することもできます。 |
Linear Color Constant (線形カラー定数) | ![]() |
float 4 値として格納された R、G、B および A 値に対して、定数 カラー 値を設定します。ノードは別のコンポーネントから float 4 つまりカラー値を受け入れられます。三角アイコンを使用して入力ピンを展開することで、グラフで R、G、B および A の float 値を、あるいは、ノードの [Details] パネルで、手動で設定できます。出力ピンの近くにある三角アイコンを使用して、カラー値を個別の R、G、B および A の float 値に分割することもできます。 |
Quat Constant (クォータニオン定数) | ![]() |
定数 Quat つまり float 4 値を X、Y、Z および W 軸に対して設定します。ノードは別のコンポーネントから Quat つまり float 4 の値を受け入れられます。三角アイコンを使用して入力ピンを展開することで、グラフで X、Y、Z および W の float 値を、あるいは、ノードの [Details] パネルで、手動で設定できます。出力ピンの近くにある三角アイコンを使用して、クワット値を個別の X、Y、Z および W の float 値に分割することもできます。 |
Rotator Constant (ローテータ定数) | ![]() |
定数 ローテータ つまり float 3 値を X (ピッチ)、Y (ヨー) および Z (ロール) 軸に対して設定します。ノードは別のコンポーネントからローテータつまり float 3 の値を受け入れられます。三角アイコンを使用して入力ピンを展開することで、グラフで ピッチ、ヨー および ロール の float 値を、あるいは、ノードの [Details] パネルで、手動で設定できます。出力ピンの近くにある三角アイコンを使用して、ローテータ値を個別の ピッチ、ヨー および ロール の float 値に分割することもできます。 |
Transform Constant (トランスフォーム定数) | ![]() |
定数 トランスフォーム 値を設定します。ノードは別のコンポーネントからトランスフォーム値を受け入れられます。ノードの [Details] パネルで、X、Y および Z 軸に対して、位置、回転およびスケールの値を手動で設定できます。 |
Vector 2 Constant (Vector 2 定数) | ![]() |
定数 Vector 2 値を X、Y および Z 軸に対して設定します。ノードは別のコンポーネントから Vector 2 の値を受け入れられます。三角アイコンを使用して入力ピンを展開することで、グラフで X、Y および Z の float 値を、あるいは、ノードの [Details] パネルで、手動で設定できます。出力ピンの近くにある三角アイコンを使用して、Vector 2 値を個別の X、Y および Z 軸の float 値に分割することもできます。 |
Vector 3 Constant (Vector 3 定数) | ![]() |
定数 Vector 3 値を X、Y および Z 軸に対して設定します。ノードは別のコンポーネントから Vector 3 の値を受け入れられます。三角アイコンを使用して入力ピンを展開することで、グラフで X、Y および Z の float 値を、あるいは、ノードの [Details] パネルで、手動で設定できます。出力ピンの近くにある三角アイコンを使用して、Vector 3 値を個別の X、Y および Z 軸の float 値に分割することもできます。 |
Vector 4 Constant (Vector 4 定数) | ![]() |
定数 Vector 4 値を X、Y、Z および W 軸に対して設定します。ノードは別のコンポーネントから Vector 4 の値を受け入れられます。三角アイコンを使用して入力ピンを展開することで、グラフで X、Y、Z および W の float 値を、あるいは、ノードの [Details] パネルで、手動で設定できます。出力ピンの近くにある三角アイコンを使用して、Vector 4 値を個別の X、Y、Z および W 軸の float 値に分割することもできます。 |