Texture Share

Unreal Engine インスタンス、nDisplay デバイス、その他のグラフィック アプリケーション間で GPU データを共有し CPU をバイパスします

Texture Share は、CPU および負荷の高いメモリ コピー処理をバイパスし、データ ストアを GPU メモリに保持することで、処理間での GPU データの受け渡しを効率的に行います。

共有可能なデータの例には、テクスチャ、プロジェクション、カメラ マトリクス、深度バッファが含まれます。Texture Share は、アプリケーション間における一貫性を確保にするための同期メカニズムとスレッド バリアをサポートします。

Texture Share は以下のメソッドによってプロジェクトへ統合することが可能です。

  • C++ SDK (DirectX11 と DirectX12 を統合)

  • ブループリント

  • nDisplay へのサポート

Unreal sending its viewport to an external application to render as a texture on a rotating cube

Unreal Engine が外部アプリケーションとビューポートを共有している例。アプリケーションは回転するキューブのテクスチャとしてビューポートを使用しています。

サンプル プロジェクト

Sample C++ プロジェクトはソースコードと共に「Engine/Source/Programs/TextureShare/Samples/ThirdParty」に含まれています。DirectX11 および DirectX12 の両方で Texture Share を使用する方法のサンプルがあります。Texture Share の使用方法の詳細については、Texture Share クイック スタート を参照してください。

同期ポリシー

GPU データを共有するには、Texture Share の各インタラクションに対して送信側と受信側が必要です。アプリケーションがデータ交換を行うとき、送信側と受信側は送受信操作に対してミラーリングされた優先順位を使用する必要があります。

たとえば、Unreal Engine を送信側、サードパーティの DirectX アプリケーションを受信側とします。

  • Unreal Engine は送信、次に受信を実行する。

  • サードパーティ アプリケーションは受信、次に送信を実行する。

Texture Share はブロックとなる動作を制御するために、データ交換のさまざまなステージで同期を行うためのオプションをいくつか提供します。この 3 つのステージについて説明していきます。

Connection Sync Mode

Connection Sync Mode (接続同期モード) はクライアントとサーバーが接続する際の同期ポリシーを定義します。以下の表がこのポリシーの説明になります。

オプション

説明

Default

このモードはモジュールのグローバル設定を使用します。デフォルトの接続同期ポリシーは以下のとおりです。

  • Client: SyncSession

  • Server: None

None

このモードは、リモート プロセスがテクスチャ共有メカニズムに接続するときにブロックしません。

SyncSession

このモードは、リモート プロセスが正常に接続し、データを交換する準備ができるまでブロックします。

Frame Sync Mode

Frame Sync Mode (フレーム同期モード) は生成されたフレームに対する同期ポリシーを定義します。以下の表がこのポリシーの説明になります。

オプション

説明

デフォルト

このモードはモジュールのグローバル設定を使用します。デフォルトのフレーム同期ポリシーは以下のとおりです。

  • Client: FrameSync

  • Server: FrameSync

None

このモードは、フレームをリモート プロセスと同期せず、フレームをスキップできます。

FrameSync

このモードでは、両方のアプリケーションがスキップせずにフレームを交換します。このモードは、フレーム インデックスがプロセス間での一貫性を保証します。

Texture Sync Mode

Texture Sync Mode (テクスチャ同期モード) は、テクスチャ共有接続メカニズムが確立された際のデータの読み取りと書き込みの操作の順序を定義します。以下の表がこのポリシーの説明になります。

オプション

説明

デフォルト

このモードはモジュールのグローバル設定を使用します。デフォルトのテクスチャ同期ポリシーは以下のとおりです。

  • Client: SyncRead

  • Server: SyncRead

None

このモードは、テクスチャのペアリングをスキップし、読み取り前にリモート プロセスからの書き込み操作をブロックしません。

SyncRead

このモードでは、テクスチャのペアリングはスキップされますが、読み取り前にリモート プロセスで書き込み操作が終了するのをブロックします。

SyncPairingRead

このモードは、テクスチャのペアリング中にブロックし、読み取り前にリモート プロセスで書き込み操作が終了するのを待機します。

Texture Share を nDisplay で使用する

nDisplay は Texture Share によるビューポートの共有およびビューポート上での受信テクスチャの表示をサポートしています。ビューポートの id から共有したビューポート テクスチャにアクセスすることができます。

他のアプリケーションから受信したテクスチャを nDisplay ビューポートに表示するには、nDisplay のポストプロセスを使用して、テクスチャ共有アイテムを定義し、それを nDisplay ウィンドウに割り当てます。

nDisplay でのテクスチャの共有および受信の詳細については、「nDisplay コンフィギュレーション ファイルのリファレンス」を参照してください。

既知の制約事項

Texture Share は現在ベータ版です。この機能の既知の制限事項は以下の通りです。

  • Texture Share SDK は現在 DirectX11 と DirectX12 のみをサポートします。

  • Texture Share アイテム名は最大 128 文字です。

  • 1 プロセスでの Texture Share の最大アイテム数は 100 です。

  • Texture Share アイテムの最大テクスチャ数は 10 です。

Texture Share アイテムは、DirectX テクスチャへのポインタと、プロジェクション、カメラ、回転マトリクスなどの補助バッファを持つコンテナです。

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