Interchange フレームワークは、Unreal Engine のインポート/エクスポート フレームワークです。 ファイル形式に依存しない、カスタマイズ可能な非同期のフレームワークで、ランタイム時に使用できます。
Interchange では、カスタマイズ可能なパイプライン スタックを提供する拡張可能なコード ベースを使用します。 これにより、C++、ブループリント、または Python を使用して、プロジェクトのニーズに合わせてインポート パイプラインを自由に編集することが可能になります。
重要な概念と用語
Interchange を使用する場合は次の概念と用語が重要となります。
パイプライン:インポートされたデータを処理する操作のコレクション。 パイプラインでは、インポート プロセスのカスタマイズに使用するオプションが公開されます。
パイプライン スタック:インポートされたファイルを処理するパイプラインの順序付きリストです。 スタック内で複数のパイプラインが組み合わされて、特定のファイル形式に割り当てられます。 パイプライン スタックは、[Project Settings (プロジェクト設定)] > [Interchange] にあります。
ファクトリ:インポートされたデータからアセットを生成する操作です。
Interchange プラグインを有効にする
Interchange フレームワークには、既定で有効になっている Interchange Editor プラグインと Interchange Framework プラグインが必要です。 これらのプラグインがプロジェクトで有効になっていない場合は、プロジェクトの [プロジェクト設定] で有効にできます。
プラグインを有効にする方法の詳細については、「プラグインを操作する」を参照してください。
アセットをインポートする
アセットを Unreal Engine にインポートするにはいくつかの方法があります。
アセットは、コンテンツ ドロワーまたはコンテンツ ブラウザでインポートするか、[ファイル] > [レベルにインポート] を選択してインポートできます。
ファイルのインポートの詳細については、「アセットを直接インポートする」を参照してください。
現時点では、[レベルにインポート] は、 glTF および MaterialX ファイル形式でのみ機能します。
インポート プロセス
上記のいずれかの方法でインポート プロセスを開始します。これにより [Interchange Pipeline Configuration (Interchange パイプライン構成)] ウィンドウが開きます。
[Choose Pipeline Stack (パイプライン スタックを選択)] ドロップダウン メニューを開き、リストから使用するパイプライン スタックを選択します。
設定を構成します。
[Import (インポート)] を押してインポート プロセスを完了します。
インポートのたびに、エンジンによって対象のファイル形式が Interchange フレームワークでサポートされているかどうかがチェックされます。 サポートされているファイルの場合、Interchange ではその形式に適切なインポート パイプライン スタックを使用します。
Interchange で次のプロセスに進みます。
Interchange により、インポートされたデータが Unreal Engine の中間ノード構造体に変換されます。
Interchange データはパイプライン スタック全体を処理して、インポートに関する指示に従います。
ファクトリを使ってその結果からアセットを生成します。
ファイル形式が Interchange でサポートされていない場合は、Unreal Engine のレガシー フレームワークによってファイルがインポートされます。
[Interchange Pipeline Configuration (Interchange パイプライン構成)] ウィンドウには次のオプションが含まれます。
| オプション | 説明 |
|---|---|
基本レイアウト | インポート パイプライン オプションを基本のフィルター プロパティにフィルターします。 |
内容をフィルター | ソースファイルで見つかったデータに基づいて、インポート パイプラインのオプションをフィルターします。 |
パイプライン スタックを選択 | このインポートに使用するパイプライン スタックを選択します。 |
FBX ファイル形式のサポートは、現在実験段階です。 Interchange を使用して FBX インポートを有効にするには、次のコンソール コマンドを使用します。
| コンソールコマンド | 説明 |
|---|---|
Interchange.FeatureFlags.Import.FBX | Interchange を使用した FBX インポートの実験的サポートを切り替えます |
Interchange.FeatureFlags.Import.FBX.ToLevel | FBX をレベルにインポートするための実験的サポートを切り替えます。 |
交換プレビュー
[Interchange Pipeline Configuration (Interchange パイプライン構成)] ウィンドウの [Preview (プレビュー)] ボタンをクリックすると、Interchange プレビュー エディタ ウィンドウが開きます。
このウィンドウでは以下が表示されます。
作成されるアセットのリスト。
その型は、アイコンまたはツールチップ テキスト (マテリアル、スタティック メッシュ、texture2D) で表されます。
それらのプロパティは、パイプラインのインポート前ステップで設定されます。
競合プレビュー
インポート プロセスで、再インポートされたアセットのマテリアルやスケルトン構造における変更が検出されると、影響を受けたパイプラインがハイライトされます。 [競合を表示] をクリックすると、[競合プレビュー] ウィンドウが開きます。
このウィンドウでは、各競合がハイライト表示され、アセットが再インポートされたときの変更内容が示されます。
以前のバージョンでは、元のマテリアルの割り当てを維持するか、競合ウィンドウからそれを置き換えることを選択できました。 Interchange ではこの操作ができません。 アセットの割り当てられたマテリアルを変更するには、ソース ファイルで修正を行うか、スタティック メッシュ エディタを使用する必要があります。 スタティック メッシュ エディタの使用に関する詳細については、「スタティックメッシュ エディタでマテリアルを適用する」を参照してください。
Interchange を使ってアセットを再インポートする
Interchange を使って以前にインポートしたことのあるアセットを再度インポートする場合は、そのときのパイプラインやオプションが Unreal Engine に記憶されているため、それらのオプションが表示されます。
ブループリントを使用してアセットをインポートする
ブループリントを使用して、Interchange フレームワークを介してアセットを Unreal Engine にインポートすることができます。
たとえば、ブループリントを使用して、Interchange で実行時にファイルを Unreal Engine ベースのアプリケーションにインポートできます。 上記の例では、デフォルトのテクスチャ パイプライン スタックを使って特定の場所にテクスチャ ファイルをインポートする関数を作成しています。 現時点で、このインポート方法ではスケルタルメッシュまたはアニメーション データはサポートされていません。
新しいブループリント クラスを作成する
上記の例を再度作成するには、次のステップを実行します。
プロジェクトで、関数を含める新しいアクタ ブループリント クラスを作成します。 アクタ ブループリントを作成するには、コンテンツ ブラウザで右クリックし、コンテキスト メニューに移動して、[ブループリント クラス] を選択します。
[親クラスを選択] ウィンドウで[アクタ] を選択し、新しいブループリント クラスに「InterchangeActor」という名前を付けます。
関数を追加する
関数を追加する:
新しいブループリントをダブルクリックしてエディタを開きます。
[マイ ブループリント] パネルで、[関数] 設定に移動し、+ ボタンをクリックして、新しい関数に「InterchangeImport」という名前を付けます。
ノードを追加してつなげる
ノードを追加してつなげる:
Sequence ノードを追加して、それを関数の出力につなげます。
Then 0 出力を接続し、インポート対象の既存のファイルを参照するための Create Source Data ノードを作成します。
Create Source Data の In File Name 入力を接続し、コンテキスト メニューから Promote to Variable を選択します。
新しい String 変数に「FilePath」という名前を付けます。 この変数では、インポート対象のファイルの位置を保持します。
ブループリント内で新しい変数を選択し、[インスタンス編集可能] チェックボックスをクリックします。
Create Source Data ノードの出力を「 SourceData」という名前の新しい変数に昇格します。
シーケンスの Then 1 出力からドラッグして Get Interchange Manager Scripted ノードを作成します。 これにより、次のステップで使用する Interchange Manager へのポインタが作成されます。
Get Interchange Manager Scripted 出力からドラッグして、 Import Asset ノードを作成します。 Get Interchange Manager Scripted からの戻り値を Import Asset の Target 入力につなげます。
Content Path 入力からドラッグして、これを「 SavePath 」という名前の新しい変数に昇格します。 この変数では、新たにインポートされたファイルの位置を保持します。
ブループリント内でこの新しい変数を選択し、[インスタンス編集可能] チェックボックスをオンにします。
Source Data 変数への参照を取得して、Import Asset の Source Data 入力につなげます。
Import Asset Parameters 入力からドラッグして、Make Input Asset Parameters ノードを作成します。
関数をランタイム時に使用できるようにする
関数を実行時に使用できるようにする:
[マイ ブループリント] で InterchangeImport 関数をクリックし、[詳細] パネルの [エディタで呼び出す] の横にあるチェックボックスをクリックします。 このオプションによって、この関数が InterchangeActor オブジェクトの [詳細] パネルで実行時に使用できるようになります。
ブループリントを保存してコンパイルします。
新しいブループリントを使用する
InterchangeActor ブループリントのコピーをレベル内にドラッグします。
[プレイ]をクリックします。
Outliner で InterchangeActor を選択します
[詳細] パネルで、FilePath と SavePath をそれぞれ設定します。
[Interchange インポート] ボタンをクリックしてファイルをインポートします。
上記のブループリントの例で Import Scene ノードを使用すると、アセットがシーン内に直接スポーンされます。
Interchange をクック済みのアプリケーションで使用する
クックされたアプリケーションで実行時に Interchange フレームワークを使用する予定の場合は、[プロジェクト設定] > [プロジェクト - パッキング] > [クックする追加アセット ディレクトリ] の順に移動し、「Interchange」フォルダーを追加します。
Python を使用してアセットをインポートする
Python スクリプトを使用して、Interchange フレームワークを介してアセットを Unreal Engine にインポートすることができます。
import unreal
import_path = "C:/Users/foo/Downloads/Fbx/SkeletalMesh/Animations/Equilibre.fbx"
import_extension = unreal.Paths.get_extension(import_path, False)
is_gltf = import_extension == 'glb' or import_extension == 'gltf'
is_fbx = import_extension == 'fbx'
is_usd = import_extension == 'usd'
上記の例では、Equilibre.fbx ファイルのインポートに Python スクリプトを使用しています。 スクリプトはファイル形式が .glb .gltf .fbx または .usd かどうかを確認し、適切なパイプラインを割り当てます。
パイプライン スタックを編集する
Interchange フレームワークを利用するメリットの 1 つとして、アセット データを処理する各プロセスのカスタマイズ可能なスタックである「パイプライン スタック」を選択してカスタマイズする機能があります。 インポート プロセス中にパイプラインをデフォルトのパイプライン スタックに加えて、動作を追加することができます。
Unreal Engine には以下のデフォルト パイプラインが備わっています。
Default Assets Pipeline
Default Material Pipeline
Default Texture Pipeline
Default Scene Assets Pipeline
Default Scene Level Pipeline
Default Graph Inspector Pipeline
これらのデフォルト パイプラインには、各タイプのインポートに最もよく使用されるオプションがそれぞれ含まれています。 プロジェクトの特定のニーズに合わせて、これらのパイプラインをカスタマイズできます。
既存のパイプラインを編集する
それぞれのデフォルト パイプラインは、プロジェクトやチームのニーズに合わせてカスタマイズすることができます。
以下は、プロジェクトに向けてインポート オプションをカスタマイズするための方法です。
[プロジェクト設定] で既存のパイプライン スタックを追加または削除したり、順序を変更したりします。
デフォルトで使用されるパイプラインを変更する。
既存のデフォルト パイプラインを変更する。
カスタム仕様のパイプラインを作成する。
プロジェクト設定を編集する
パイプライン スタックは、[プロジェクト設定] の [エンジン > Interchange] にあります。
パイプライン スタックには以下のデフォルト設定が含まれています。
Import Content (コンテンツをインポート)
Import Into Level (レベルにインポート)
エディタ インターフェース
全般
エディタ汎用パイプライン クラス
Import Content (コンテンツをインポート)
Unreal Engine ではこれらの設定を使用して、コンテンツを コンテンツ ドロワー または コンテンツ ブラウザ にインポートします。
表示されているコンテンツの各タイプに対して、設定をそれぞれ変更できます。 また、必要に応じてセクションを追加することもできます。 たとえば、デフォルトの構成には、アセット、マテリアル、テクスチャが含まれています。 アニメーション (Animations) のための追加セクションをパイプライン スタックに加えて、受信するアニメーション ファイルを処理するカスタム仕様のパイプライン (複数可) を追加することができます。
Import Into Level (レベルにインポート)
エディタのウィンドウで、[ファイル] > [レベルにインポート] を見つけます。 デフォルトでは、この関数は連携する 2 つのパイプラインを使用します。 これらのパイプラインは、ファイルからアクタ データをインポートし、レベル内にアクタをスポーンします。 インポート関数は次の設定を使用します。
DefaultSceneAssetPipeline は、DefaultAssetPipeline と同じクラスに基づいており、シーンのインポート向けに設計されています。
DefaultSceneLevelPipeline は、データが DefaultSceneAssetPipeline をパススルーした後に、ワールド内にアクタを生成します。
既存のデフォルト パイプラインを変更する
デフォルトの Interchange パイプラインのプロパティを調整して、以下を変更することができます。
デフォルト値
可視性
読み取り専用ステータス
デフォルトの Interchange パイプラインの設定を変更するには、次のステップを実行します。
コンテンツ ドロワーまたはコンテンツ ブラウザでデフォルトのパイプラインを見つけ、ダブルクリックして開きます。 パイプラインは、「 Engine > Plugins >Interchange Framework Content > Pipelines」フォルダーにあります。 「Engine」フォルダーが表示されない場合は、 コンテンツ ドロワー または コンテンツ ブラウザ の右上にある [設定] をクリックし、 [エンジン コンテンツに表示] チェックボックスをオンにします。
必要に応じて以下を編集します。
インポートおよび再インポート プロセス中の可視性。
デフォルト設定。
インポート プロセス中にプロパティを読み取り専用にするかどうか。
保存してウィンドウを閉じます。
カスタム仕様のパイプラインを作成する
新しい Interchange パイプラインを作成して、ブループリント、C++、または Python を使ってインポート プロセスをさらにカスタマイズできます。
ブループリントを使用してカスタム仕様のパイプラインを作成する
ブループリントを使って新しい Interchange パイプラインを作成するには、次のステップを実行します。
コンテンツ ドロワーまたはコンテンツ ブラウザで、右クリックして [ブループリント クラスの作成] を選択します。
[親クラスを選択] ウィンドウで [全てのクラス] カテゴリを展開し、その親クラスとして InterchangePipelineBase を選択します。
新しいブループリントをダブルクリックして、ブループリント エディタを開きます。
ブループリントを使って作成したカスタム仕様のパイプラインには、カスタム動作を追加するためにオーバーライド可能な次の機能が含まれています。
| 関数をオーバーライド | 説明 |
|---|---|
Scripted Can Execute on Any Thread | このパイプラインが非同期モードで実行可能であることを Interchange Manager に伝えます。 |
Scripted Execute Export Pipeline | エクスポート プロセス中に実行します (現時点では機能しません)。 |
Scripted Execute Pipeline | ファイルの移動後に実行します。 アセットの生成に必要なファクトリを作成します。 |
Scripted Execute Post Factory Pipeline | ファクトリでアセットが作成された後、PostEditChange 関数が呼び出される前に実行します。 |
Scripted Execute Post Import Pipeline | アセットが完全にインポートされて、PostEditChange 関数が呼び出された後に実行します。 |
Scripted Set Reimport Source Index | 再インポートするソース インデックスをパイプラインに伝えて実行します。 この関数は、複数のソースが含まれる可能性のあるアセットの再インポート時に使用します。 たとえば、ジオメトリのためのソース ファイルと、スキニング情報のためのソース ファイルが 1 つずつ含まれるスケルタルメッシュなどがあります。 |
C++ を使用してカスタム仕様のパイプラインを作成する
C++ を使って新しい Interchange パイプラインを作成するには、以下を含むヘッダ ファイルを作成します。
#pragma once
#include "CoreMinimal.h"
#include "InterchangePipelineBase.h"
#include "InterchangeSourceData.h"
#include "Nodes/InterchangeBaseNodeContainer.h"
#include "InterchangeMyPipeline.generated.h"
次に、以下を含むソース ファイルを作成します。
#include "InterchangeMyPipeline.h"
void UInterchangeMyPipeline::ExecutePipeline(UInterchangeBaseNodeContainer* NodeContainer, const TArray<UInterchangeSourceData*>& InSourceDatas)
{
Super::ExecutePipeline(NodeContainer, InSourceDatas);
// Put the logic you need on either translated nodes or factory nodes
}Unreal Engine で C++ を使用する詳細については、「C++ でのプログラミング」を参照してください。
Python を使用してカスタム仕様のパイプラインを作成する
Python スクリプトを使って新しい Interchange パイプラインを作成するには、新しい Python スクリプトを作成し、プロジェクト設定を使用して、スタートアップ スクリプトに追加します。 Unreal Engine で Python スクリプトを使用する詳細については、「Python を使用した Unreal Editor のスクリプト」を参照してください。
次の例では、Python スクリプトを使って基本的なアセット インポート パイプラインを作成します。
import unreal
@unreal.uclass()
class PythonPipelineTest(unreal.InterchangePythonPipelineBase):
import_static_meshes = unreal.uproperty(bool,meta=dict(Category="StaticMesh"))
import_skeletal_meshes = unreal.uproperty(bool,meta=dict(Category="SkeletalMesh"))
def cast(self, object_to_cast, object_class):
try: