カスタム仕様の Dataprep ブロックを作成する

ブループリントの Dataprep システム向けに独自のカスタム仕様のフィルタおよび演算子を作成する方法。

前提トピック

このページは以下のトピックへの知識があることを前提にしています。まず以下のトピックの内容についてご確認をお願いします。

Visual Dataprep システムには、事前作成済みのフィルタおよび処理が多数用意されており、リアルタイムのビジュアライゼーション用の 3D データの準備に最も共通するニーズの多くに対応できます。ただし、フィルタおよび処理のプリセット リストは、実行する必要があるすべての処理を完全にサポートできるわけではありません。Unreal Editor スクリプティング システムで可能な処理を Dataprep グラフで行う必要があるものの、事前作成済みの Dataprep ブロックではできない場合、独自のカスタム仕様のフィルタおよび演算子を作成して、必要としている正確な処理を作成できます。

このページでは、Dataprep グラフ用の新しいフィルタや演算子の作成方法について説明します。

Dataprep の処理をブループリントで使用するには、Dataprep Editor プラグインを有効にします。プラグインの詳細については、「プラグインを操作する」を参照してください。

カスタム仕様の Dataprep ブロックを作成する方法

全体的なプロセスは、Dataprep ブロックのタイプが異なっていてもすべて同じです。

  1. コンテンツ ブラウザ を右クリックして、新しい ブループリント クラス を作成します。詳細については、「ブループリント クラスを作成する」を参照してください。

  2. [Pick Parent Class (親クラスを選択)] ダイアログで、下部の [All Classes (すべてのクラス)] リストを展開します。作成するブロックのタイプに対応する基本クラスを選択し、[Select (選択)] をクリックします。選択可能な Dataprep の親クラスについては、後述の「基本クラス」の表を参照してください。

    クリックしてフルサイズで表示。

  3. 必要に応じて コンテンツ ブラウザ で新しいクラスの名前を変更します。

  4. 新しいクラスをダブルクリックしてブループリント エディタで開きます。

  5. クラスが親クラスから継承した関数をオーバーライドします。関数をオーバーライドすることで、グラフ実行時の Dataprep ブロックの動作をカスタマイズできます。関数をオーバーライドするには、[My Blueprint (マイ ブループリント)] パネルの [Functions (関数)] カテゴリにカーソルを乗せます。表示された [Override (オーバーライド)] ドロップダウンをクリックし、オーバーライドする関数を選択します。

    Overriding a function in Blueprint

  6. ブループリント クラスを コンパイル して 保存 します。

次に [Dataprep Asset (Dataprep アセット)] を開くと、グラフ エディタの左のパレットに新しいノードが追加されて表示されます。

基本クラス

次の基本クラスのいずれかを、カスタム仕様の Dataprep ブロックの親クラスとして使用します。

クラス

説明

DataprepBoolFetcher

特定の条件が true であると判定された場合にオブジェクトを選択するフィルタを実装する場合は、このクラスを使用します。

DataprepFloatFetcher

浮動小数点値 (つまり、小数部を持つことができる数) のプロパティに基づいてオブジェクトを選択するフィルタを実装する場合、このクラスを使用します。

DataprepIntegerFetcher

整数値 (つまり、小数部がない整数) のプロパティに基づいてオブジェクトを選択するフィルタを実装する場合、このクラスを使用します。

DataprepStringFetcher

文字列のプロパティに基づいてオブジェクトを選択するフィルタを実装する場合、このクラスを使用します。

DataprepOperation

アクタまたはアセットを変更する演算子を実装する場合、このクラスを使用します。

DataprepEditingOperation

アクタまたはアセットを変更し、アクタおよびアセットの追加と削除を実行できる演算子を実装する場合、このクラスを使用します。

変数と設定

ブループリント クラスで一般に表示している変数は、このタイプのすべてのブロックで Dataprep エディタのカスタマイズ可能な設定に公開されます。このメカニズムを利用すると、Dataprep グラフ デザイナは関数の動作方法をカスタマイズできるようになります。

たとえば、この演算子クラスには一般に表示されるいくつかの変数が含まれ、次のような開いた目のアイコンでマークされます。

Public variables in the Blueprint class

このタイプのブロックが Dataprep グラフで使用されている場合、こうした一般に表示される変数は、次のようにカスタマイズ可能な設定として公開されます。

Public variables exposed as settings in a Dataprep block

上記の例で HiddenTextVariableHiddenVectorVariable が Dataprep ブロックの設定として公開されていないことに注意してください。これは、ブループリント クラスで公開としてマークされていないためです。また、ブロック内の設定ではブループリント クラスの変数に設定したデフォルトの設定が優先されます。

カスタム仕様のフィルタを作成する

カスタム仕様のフィルタを作成する場合、次のいずれかまたはすべての関数をオーバーライドできます。

関数

説明

Fetch

Dataprep グラフを実行すると、このタイプのフィルタ ブロックが処理され、現在のコンテキストの各オブジェクトについてこの関数が呼び出されます。

この関数は、Fetch 関数にパスされたオブジェクトを評価することを前提としており、ブール値、整数、浮動小数、文字列など、特定の型の情報項目を生成します。フィルタ ノードは、ロジックを実行し、返す情報項目がグラフの設定で表現されている論理的条件を満たしているかどうかの判定を処理します。たとえば、返す整数値は、ユーザーによってブロック内に設定された値以上かどうか、返す文字列は、ユーザーによってブロック内に設定された文字列と一致するか、またはそれに含まれるかなどです。

この関数は、ブール値を返し、現在のオブジェクトの出力値を計算できるかどうかを示す必要もあります。このブールで false 値を返すと、現在のオブジェクトがフィルタによって除外されます。

Get Additional Keyword

Dataprep Editor はこの関数を呼び出し、このブロックのキーワードのリストを取得します。ユーザーが関数によって返されたキーワードの 1 つをパレットの最上部にある検索フィルタに入力すると、エディタは一致するアイテムのリストにこのブロックを含めます。ユーザーが入力したキーワードがブロック名に含まれない場合にも、ブロックはリストに含まれます。

Get Display Fetcher Name

Dataprep Editor はこの関数を呼び出し、このブロックのパレットに表示される表示名を取得します。

Get Node Display Fetcher Name

Dataprep Editor はこの関数を呼び出し、このタイプのすべてのブロックについて実際の Dataprep グラフに表示される表示名を取得します。

Get Tooltip Text

Dataprep Editor はこの関数を呼び出し、ユーザーがパレットにあるこのブロックの名前、または Dataprep グラフにあるこのタイプのブロックにマウスオーバーすると表示されるツールチップのテキストを取得します。

フィルタを有効にするには、Fetch 関数をオーバーライドする必要があります。他の関数はオプションです。ただし、Dataprep Editor のパレットにおけるブロックの表示方法を制御することを強く推奨します。

カスタム仕様の操作を作成する

カスタム仕様の操作を作成すると、次に示す関数のいずれか、またはすべてをオーバーライドすることができます。

関数

説明

Get Additional Keyword

Dataprep Editor はこの関数を呼び出し、このブロックのキーワードのリストを取得します。ユーザーが関数によって返されたキーワードの 1 つをパレットの最上部にある検索フィルタに入力すると、エディタは一致するアイテムのリストにこのブロックを含めます。ユーザーが入力したキーワードがブロック名に含まれない場合にも、ブロックはリストに含まれます。

Get Category

Dataprep Editor はこの関数を呼び出し、[Operations (操作)] リストのパレットのどのサブカテゴリにこのブロックを配置するかを判定します。

この関数をオーバーライドしない場合は、[User-defined (ユーザー定義)] カテゴリに操作ブロックがリストされます。

Get Display Operation Name

Dataprep Editor はこの関数を呼び出し、このブロックのパレットに表示される表示名と、このタイプのすべてのブロックについて実際の Dataprep グラフに表示される表示名を取得します。

Get Tooltip

Dataprep Editor はこの関数を呼び出し、ユーザーがパレットにあるこのブロックの名前、または Dataprep グラフにあるこのタイプのブロックにマウスオーバーすると表示されるツールチップのテキストを取得します。

On Execution

Dataprep グラフを実行すると、このタイプの操作ブロックが処理され、インポートされたアセットおよびアクタでの変更を実行するためにこの関数が呼び出されます。このイベントからダウンストリームのブループリント ノードのグラフを作成することで、操作中の前のブロックによってパスされるアセットおよびアクタのリストへの操作内容を制御できます。

グラフの実装方法の詳細については、以下のセクションを参照してください。

操作を有効にするには、Event On Execution イベントをオーバーライドする必要があります。関数はすべて任意ですが、Dataprep Editor のパレットにおけるブロックの表示方法を制御することを強く推奨します。

Dataprep コンテキスト

Dataprep システムが Dataprep グラフの実行中に操作ブロックの On Execution イベントをトリガーすると、ブループリント グラフで使用する コンテキスト オブジェクトがパスされます。これは基本的に、演算子が変更できるすべてのアクタおよびアセットのリストです。操作ブロックが Dataprep アクションのフィルタ ブロックの上にある場合、このコンテキスト オブジェクトは Dataprep ワールドにインポートされたすべてのアセットとアクタを含みます。そうではない場合、コンテキスト オブジェクトは現在の Dataprep アクションにある操作ブロックの上にあるフィルタによって選択されたアクタとアセットをすべて含みます。

Break DataprepContext ノードを使用してコンテキストのオブジェクト配列を取得することができます。それにより、コンテキストのすべてのオブジェクトを変更したり、特定のタイプに一致するオブジェクトに絞り込んだりすることができます。

クリックしてフルサイズで表示。

たとえば、上述の操作はスタティックメッシュ アセットのみに存在する設定を変更しますが、Dataprep コンテキストに含まれる可能性があるその他の種類のオブジェクト (アクタ、テクスチャ アセット、マテリアル アセットなど) は対象外となります。そのため、コンテキストのオブジェクト配列内をループしてスタティックメッシュにそれぞれをキャストします。そして、キャストが成功した場合のみに変更を行います。

操作および編集操作

演算子ブロックには 2 つの親クラス、DataprepOperation および DataprepEditingOperation があります。どちらを使用するのかは実行する編集操作により異なります。すでに Dataprep コンテキストに含まれているオブジェクトへの変更のみを行う場合は、DataprepOperation を親クラスとして使用します。たとえばコンテンツ ブラウザでアセットを作成する、レベルに新しいアクタをスポーンする、または Dataprep コンテキストのオブジェクトのリストを変更するなど、新しいオブジェクトを作成する場合は、基本クラスとして DataprepEditingOperation を使用する必要があります。

DataprepEditingOperation からクラスを派生させると、ブループリント エディタにある追加の特別な関数にアクセスできるようになります。それらは [Dataprep] > [Editing Operations (編集操作)] カテゴリで確認できます。

Dataprep Editing Operations

たとえば、[Add Asset (アセットを追加)] を使用してアセットを Dataprep コンテキストに追加すると、同じ Dataprep アクションにある他のブロックにパスされる Dataprep コンテキストに含めることができます。

可能な限り、通常は同様の目的を果たす他のノードの代わりに、[Dataprep] > [Editing Operations] カテゴリの関数を使用してアクションを実行するようにします。Dataprep システムがインポートされたすべてのデータを維持するために使用する一時的なワールドは一意であり、これらの関数のみを使用して編集することができます。

たとえば、一般的な [Editor Scripting (エディタのスクリプト処理)] > [Level Utility (レベル ユーティリティ)] > [Spawn Actor from Class (クラスからアクタをスポーン)] または [Spawn Actor from Object] ではなく、常に [Dataprep] > [Editing Operations] > [Create Actor (アクタを作成)] ノードを使用してアクタのスポーンを行います。

操作の例

スタティックメッシュ アクタを分配する

次の On Execution イベントを実装すると、コンテキスト内のすべてのスタティックメッシュ アクタを探し出し、それらをスペースでグリッドに再分配します。最小および最大グリッド数は Min および Max という名前の変数から取得します。これらは一般に編集可能とマークされているため、Dataprep グラフのブロックの設定として表示されます。ただし、Actors 変数はシーンのスタティックメッシュ アクタの配列の保存に使用されているため、編集可能とマークされていません。そのため、Dataprep グラフのブロックに表示されません。

Custom block that redistributes Static Mesh Assets

Copy Node Graph

On Execution function implementation

オブジェクトをレイヤーに追加する

次の On Execution イベントを実装すると、コンテキスト内のアクタを探し出し、エディタの指定したレイヤーに追加します。

Custom block that adds Actors to a Layer

Copy Node Graph

On Execution function implementation

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