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

ブループリントにおける Dataprep システム用のカスタム フィルタと演算子の作成方法について説明します。

Windows
MacOS
Linux

Visual Dataprep システムには、既成フィルタや演算子が数多く用意されています。リアルタイムのビジュアリゼーション用に 3D データを準備する際にそれらを使用すると、一般的に必要とされるものの多くを処理することができます。ただし、事前に設定されているフィルタと演算子のリストは、実行する必要があるすべての演算子を完全にはサポートしていません。Unreal Editor のスクリプティング システムで使用可能なものを Dataprep グラフで実行する必要があるにもかかわらず、既成の Dataprep ブロックに適切なものがない場合、必要な操作を正確に実行する独自のカスタム タイプのフィルタや演算子を作成することができます。

このページでは、Dataprep グラフで使用する新しいタイプのフィルタおよび演算子を作成する方法を説明します。

カスタム Dataprep ブロックの作成方法

作成する Dataprep ブロックのタイプに関係なく、全体的なプロセスは同じです。

  1. 新しいブループリント クラスを作成します。詳細は「ブループリント クラスを作成する 」を参照してください。

  2. [Pick Parent Class (親クラスを選択)] ダイアログで、一番下にある [All Classes (すべてのクラス)] リストを展開します。作成するブロックのタイプに対応する基本クラスを選択して [Select (選択)] をクリックします。

    選択する Dataprep の親クラスのリストについては、後述の「基本クラス 」を参照してください。

  3. 必要に応じて、[Content Browser (コンテンツ ブラウザ)] で新しいクラスの名前に変更します。

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

  5. 親クラスから継承したクラスの関数をオーバーライドします。オーバーライドした関数に応じて、新しいブロックの Dataprep Editor における表示方法を制御できます。また、Dataprep グラフの実行中にブロックが実行された時のビヘイビアをカスタマイズできます。

    関数をオーバーライドするには、[My Blueprint (マイ ブループリント)] パネルにある [Functions (関数)] カテゴリにマウスをかざすと表示される [Override (オーバーライド)] ドロップダウンをクリックし、オーバーライドする関数を選択します。

    Overriding a function in Blueprint

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

次に Dataprep アセットを開くと、グラフ エディタの左にあるパレットに新しいノードが追加されていることを確認できます。

基本クラス

カスタム Dataprep ブロックの親クラスとして、次の基本クラスの 1 つを使用します。

クラス

説明

DataprepBoolFetcher

特定の条件式が「true」の時にオブジェクトを選択するフィルタを実装する場合に、このクラスを使用します。

DataprepFloatFetcher

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

DataprepIntegerFetcher

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

DataprepStringFetcher

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

DataprepOperation

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

DataprepEditingOperation

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

変数および設定

ブループリント クラスで公開している変数はいずれも、このタイプのすべてのブロックについて Dataprep Editor でカスタマイズ可能な設定として表示されます。このメカニズムを使用して、Dataprep グラフのデザイナーに関数の動作方法をカスタマイズできる機能を提供することができます。

たとえば、この演算子クラスには公開されている変数がいくつか含まれます。それらは、下記の開いた目のアイコンでマーク付けされています。

Public variables in the Blueprint class

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

Public variables exposed as settings in a Dataprep block

上の画像では、HiddenStringVariable が Dataprep ブロックの設定として表示されていないことに注意してください。これは、ブループリント クラスで「Public」としてマークされていないためです。また、ブロックの設定には、ブループリント クラスの変数に設定したデフォルト設定が考慮されることにも注意してください。たとえば、一番下の変数、StringWithDefaultSet には、デフォルト値のセットがあります。これにより、ブロックの設定で対応するテキスト ボックスが自動的に入力されます。

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

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

関数

説明

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 のパレットにおけるブロックの表示方法を制御することを強く推奨します。

フィルタの例

次の例では、Fetch 関数を実装して Select By ブロックを作成します。それにより、ユーザーはメッシュに含まれるセクション数に応じてスタティック メッシュ アセットをフィルタすることができます。

Copy Node Graph

Fetch function implementation

カスタム操作を作成する

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

関数

説明

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

Getting objects from the Dataprep context

たとえば、上述の操作はスタティック メッシュ アセットにのみ存在する設定を変更しますが、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] ノードを使用してアクタのスポーンを行います。

操作の例

UV チャンネルを削除する

次の On Execution イベントを実装すると、コンテキスト内のすべてのスタティック メッシュ アセットを探し出し、それぞれから UV チャンネルを削除します。削除する UV チャンネルのインデックスは、Index (インデックス) という名前の変数からのものです。この場合、Index 変数はパブリックで編集可能とマーク付けされているため、Dataprep グラフでブロックの設定として表示されます。

Custom block that removes a UV channel

Copy Node Graph

On Execution function implementation

このシンプルな例は、現在のコンテキストからスタティック メッシュを分離する方法と、ブループリントに公開されている操作を使用してそれらのメッシュに変更を加える方法を示すことを目的としています。ただし、削除するチャンネルの識別にいつも単一の定数インデックスを使用することは、あまり実用的ではない場合があります。たとえば、スタティック メッシュの UV チャンネルが指定したインデックスより少ない場合、または指定したインデックスが (削除不可能な) 生成済みのライトマップの保存にスタティック メッシュが使用するインデックスと一致する場合、処理されません。UV チャンネルを操作するためのより実用的な Dataprep ブロックの実装は、スタティック メッシュを作成する際に使用する規則に依存します。

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

次の 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

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback