nDisplay の概要

nDisplay レンダリング ネットワークで複数台のコンピュータがどのように連携するかについて説明します。

Choose your operating system:

Windows

macOS

Linux

すべての nDisplay のセットアップは、単一の マスター コンピュータと任意の台数の追加のコンピュータで構成されます。

  • ネットワークの各コンピュータは、プロジェクトのパッケージ化された実行ファイルの 1 つ以上のインスタンスを実行します。

  • Unreal Engine の各インスタンスでは、スクリーン、プロジェクターなどの 1 台以上のディスプレイ デバイスへのレンダリングを処理します。

  • Unreal Engine のインスタンスが処理する各デバイスが、同一の 3D シーン上の単一の視点をレンダリングします。これらの視点を、3D ワールドでの位置が現実世界のスクリーンまたは投影されたサーフェスの物理的な位置に一致するように設定することで、視聴者に仮想ワールド内にいるような錯覚をもたらします。

  • また、マスター ノードは、VRPN (Virtual-Reality Peripheral Networks) への接続を介して空間トラッカーおよびコントローラーからの入力を受け入れ、その入力を他のすべての接続コンピュータにレプリケートします。

nDisplay network overview

この図は、設定可能な nDisplay ネットワークを示しています。すべての nDisplay ネットワークと同様に、1 台の PC がマスター ノードとして機能します。このマスター ノードは、VRPN サーバーからシステムへの入力を受け入れます。VRPN サーバーでは、空間トラッキング デバイスやその他のコントローラー デバイスからの信号を中継します。このネットワークには、Unreal Engine プロジェクトの他のインスタンスを実行する他の PC も複数台含まれています。これらそれぞれのクラスタ ノードが、1 台以上のディスプレイ プロジェクターを制御します。

One instance, one device

単一のアプリケーション インスタンスで 1 台のディスプレイ デバイスにレンダリングする。
これは、nDisplay の 1 台のホストをセットアップする最もシンプルな方法です。必要なプロジェクターまたはディスプレイ デバイスごとに、1 台のコンピュータをセットアップして、そのデバイスに対するレンダリングを処理します。そのコンピュータでは、Unreal Engine の単一のインスタンスを実行します。通常、このシナリオでは、3D 空間の単一の長方形を単一のビューポートにレンダリングするように、そのアプリケーション インスタンスを設定します。

Multiple instances, multiple devices

複数のアプリケーション インスタンスのそれぞれが 1 台のディスプレイ デバイスにレンダリングする。
複数のグラフィックス カードを搭載し、複数台のディスプレイ デバイスの制御を処理できる複数台のコンピュータがネットワークにある場合、それらのコンピュータで Unreal Engine の複数のインスタンスを実行できます。Unreal Engine の各インスタンスに 3D 空間の 1 つの個別の長方形をレンダリングするよう指示し、それぞれの長方形を 1 つの個別のグラフィックス カードにディスパッチします。
このアプローチは、プロジェクトの CPU およびメモリの要件が低く、同一コンピュータ上で複数のインスタンスを十分実行できる場合は、適切に機能します。

One instance, multiple devices

単一のアプリケーション インスタンスで複数台のディスプレイ デバイスにレンダリングする。
このオプションでは、コンピュータ上で Unreal Engine アプリケーションの単一のインスタンスを実行します。ただし、シーンの 3D 空間の複数の個別の長方形を大きなウィンドウの異なる領域にレンダリングするように設定します。次に、 NVIDIA Mosaic NVIDIA Surround などのテクノロジーを使用して、その 1 つの大きなウィンドウを分割し、他のディスプレイ デバイスの個別の各領域にレンダリングします。
このシナリオで Mosaic または Surround と nDisplay を組み合わせて使用するメリットは、お使いのさまざまなモニターが同一平面上に並んで配置されていない場合でも、それらのモニターの物理的な配置に正確に一致するビューポートをレンダリングできる点です。ただし、すべてのビューポートは Unreal Engine の同一のインスタンスによってレンダリングされるため、同一のコンピュータに複数のグラフィックス カードが搭載されていてもメリットはありません。

nDisplay のコンポーネント

nDisplay では通常の Unreal システム アーキテクチャにコンポーネントをいくつか追加します。

  • Unreal Engine 内で機能するプラグイン。このプラグインでは、クラスタを構成するすべてのアプリケーション インスタンス間で情報をやり取りして、同期することで、すべてのインスタンスが同一フレームを同時にレンダリングできるようにしたり、各ディスプレイ デバイスがゲーム ワールドなどの正しい視錐台をレンダリングしたりできるようにします。

  • nDisplayLauncher という名前のネットワーク プロビジョニングおよび管理アプリケーション。ネットワークの 1 台のコンピュータでこのアプリケーションを実行することで、ネットワーク内のすべてのコンピュータ上でパッケージ化された Unreal Engine アプリケーションを自動的に起動および終了できます。

  • 各コンピュータで実行される nDisplayListener という名前の独立したリスナー アプリケーション。このアプリケーションでは、nDisplayLauncher からの受信リクエストをリッスンして、ローカル コンピュータでそれらのリクエストを処理します。

  • nDisplay で適切な台数のコンピュータで適切な数のインスタンスを起動するために必要なすべての設定が指定されている共有コンフィギュレーション ファイル。各コンピュータが、ゲームの 3D ワールドの適切な視点をレンダリングすることで、すべてのディスプレイ スクリーンまたはプロジェクターにまたがるシームレスなレンダリングによる錯覚を生み出します。詳細は、「 nDisplay コンフィギュレーション ファイル リファレンス 」を参照してください。

Runtime Camera Control

内部で、nDisplay はコンフィギュレーション ファイルで設定した仮想 3D スペースでシーン オブジェクトの階層を維持します。たとえば、このシーン階層は通常、 カメラ の位置と 画面 一式 (現実世界のディスプレイ スクリーンまたは仮想世界のプロジェクション サーフェスを表す3D スペースの長方形) の位置を定義します。NnDisplay シーン オブジェクトの位置は、仮想スペースの基点 (0,0,0) に常に置かれる単一の ルート 位置に関連して定義されます。

NnDisplay を有効にしてプロジェクトを実行する場合、この仮想スペースのルートはレベル内のカメラにアタッチされた DisplayClusterRoot コンポーネントの位置と回転に基づきます。フレームごとに、nDisplay はこのルート コンポーネントの位置と回転を、nDisplay コンフィギュレーション ファイルで設定したシーン ノードの階層に対する開始点として使用します。

デフォルトで、nDisplay はスタートアップで DisplayClusterRoot コンポーネントを作成し、デフォルト カメラにアタッチします。その結果、nDisplay クラスタ全体のすべてのデバイスとプロジェクターがアクティブ カメラの視点からのシーンを自動的にレンダリングします。

Blueprint API

ブループリント API を使用して、ゲームのランタイム ロジックで nDisplay システムのビヘイビアを制御できます。

これらの API で公開されている関数を利用するには、次の手順を実行します。

  1. クラスタ管理、入力デバイスのクエリ、nDisplay レンダリングなどに関連するほとんどの nDisplay ブループリント関数では、ブループリントで新しい [N Display (N ディスプレイ)] > Get DisplayCluster Module API ノードを作成します。
    VRPN 入力デバイスおよび Unreal Engine 入力イベント間のバインディングと反映を設定する関数では、ブループリントで [N Display (N ディスプレイ)] > Get DisplayClusterInput Module API ノードを作成します。「 デバイス チャンネルを UE4 入力へバインドする 」も参照してください。

  2. ノードの [Out API (出力 API)] ピンをドラッグして、 [Display Cluster (ディスプレイ クラスタ)] または [Display Cluster Input (ディスプレイ クラスタ入力)] カテゴリを確認します。

nDisplay を拡張する

nDisplay では、複数台のコンピュータと出力デバイス間でリアルタイムの同期レンダリングを制御するための、すぐに使用できる多くの機能を提供しています。ただし、多岐にわたる投影システムとディスプレイ サーフェスが存在するため、nDisplay レンダリング システムを拡張して、自分が選んだテクノロジーをサポートする必要がある場合があります。C++ のプログラミングに慣れており、nDisplay が一般的なユース ケースでどのように機能するかを理解している場合は、拡張可能なレンダリング API に基づいて構築することにより、nDisplay を拡張して追加のディスプレイおよびキャリブレーション テクノロジーをサポートできます。

nDisplay API では、レンダリング パイプラインを次のような複数の主要な概念に分割します。

  • DisplayClusterRenderingDevice 。基本的にネイティブ インターフェースの拡張です。

  • DisplayClusterPostProcess 。特定のビューポートに後処理を適用するために使用できる 6 つのコールバックのグループです。

  • DisplayClusterProjectionPolicy 。カーブしたサーフェスにレンダリングするためのスケーラブル ディスプレイまたは MPCDI のサポート、または単純な平面投影の実行など、カスタマイズされた投影メソッドの処理を担います。

  • DisplayClusterRenderSyncPolicy nvSwapLock 、vSync、または 24hz ディスプレイ向けのカスタマイズされたスキップフレーム同期など、さまざまな同期方法に対応するために使用されます。

上記の要素の独自の特殊化を作成することにより、nDisplay システムが生成する画像を、使用するあらゆる投影テクノロジーまたはディスプレイ テクノロジーに合わせてカスタマイズできるだけでなく、リリースされている Unreal Engine のソース コードを変更する必要なく nDisplay クラスタリング システムのすべての主要なメリットを活用することができます。

これらの要素の実装を設定する方法の作業モデルについては、 PicpProjection モジュールおよび PicpMPCDI モジュールのソース コードを参照してください。これらのモジュールは、 Engine/Plugins/Runtime/nDisplay/Source の Unreal Engine のソースコードにあります。

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