すべての nDisplay のセットアップは、単一の「プライマリ」コンピュータと、セカンダリ ノードと呼ばれる追加のコンピュータ (任意の台数) で構成されます。
-
ネットワークの各コンピュータは、Unreal プロジェクトのインスタンス (複数可) をインゲームまたはパッケージ化された形式のいずれかで実行します。
-
Unreal Engine の各インスタンスでは、スクリーン、LED ディスプレイ、プロジェクターなどの 1 台以上のディスプレイ デバイスへのレンダリングを処理します。
-
Unreal Engine のインスタンスで処理される各デバイスでは、同じビューの原点または視点を共有するビューポートをレンダリングします。3D ワールドでの位置が現実世界のスクリーンまたは投影されたサーフェスの物理的な位置と一致するようにこれらのビューポートを設定することで、視聴者に仮想ワールド内にいるような錯覚と没入感をもたらします。
-
また、プライマリ ノードは、Live Link 経由の VRPN (Virtual-Reality Peripheral Networks) への接続を介して空間トラッカーおよびコントローラーからの入力を受け入れ、その入力を接続されている他のすべてのコンピュータにレプリケートします。

この図は、設定可能な nDisplay ネットワークを示しています。すべての nDisplay ネットワークと同様に、この中の 1 台の PC がプライマリ ノードとして機能します。このプライマリ ノードでは、VRPN サーバーからシステムへの入力を受け入れます。VRPN サーバーでは、空間トラッキング デバイスやその他のコントローラー デバイスからの信号を中継します。このネットワークには、Unreal Engine プロジェクトの他のインスタンスを実行する他の PC も複数台含まれています。これらの各セカンダリ ノードでは、1 台以上のディスプレイ プロジェクターを制御します。
One application instance and host computer per display device (ディスプレイ デバイスごとに単一のアプリケーション インスタンスとホスト コンピュータ) |
|
One application instance and host computer per multiple display devices (複数台のディスプレイ デバイスごとに単一のアプリケーション インスタンスとホスト コンピュータ) 接続された複数台のディスプレイを単一のディスプレイとして扱うには、NVIDIA Mosaic や AMD Eyefinity などのグラフィック カード ベンダーが提供するマルチディスプレイ技術を利用することをお勧めします。これにより、ディスプレイの同期とパフォーマンスを高めるために、集約されたこれらのスクリーンを Unreal によってフルスクリーンでレンダリングできることが確実になります。このシナリオでは、nDisplay Output Mapping ツールを使ってすべてのビューポートをこの拡張ディスプレイ キャンバスにマッピングできます。 パフォーマンス向上のために、2 番目の GPU をビューポートのレンダリングに利用することも可能です。すべてのピクセルがコピーされてディスプレイ対応の GPU で使用可能になると、それらがアプリケーション ウィンドウ内で合成されて GPU 出力に送信されます。複数のグラフィック カードの使用については、「Multi-GPU Support」を参照してください。 |
nDisplay のコンポーネント
nDisplay では通常の Unreal システム アーキテクチャにコンポーネントをいくつか追加します。
- Unreal Engine 内で機能するプラグイン。このプラグインでは、クラスタを構成するすべてのアプリケーション インスタンス間で情報をやり取りして、同期することで、すべてのインスタンスが同一フレームを同時にレンダリングできるようにしたり、各ディスプレイ デバイスがゲーム ワールドなどの正しい視錐台をレンダリングしたりできるようにします。
- nDisplay で適切な台数のコンピュータで適切な数のインスタンスを起動するために必要なすべての設定が指定されている共有コンフィギュレーション アセット。各コンピュータが、ゲームの 3D ワールドの適切な視点をレンダリングすることで、すべてのディスプレイ スクリーンまたはプロジェクターにまたがるシームレスなレンダリングによる錯覚を生み出します。詳細については、「nDisplay 3D コンフィグ エディタ」を参照してください。
ワークフロー
ユーザーは、ネットワークで使用する必要のあるさまざまなコンピュータ、それらのコンピュータのレンダリング先のスクリーンまたはプロジェクターのサイズと解像度、3D 空間でのそれらのスクリーン間の空間的な関係などについて nDisplay に指示する必要があります。これを行うためには、一連の設定でこれらすべての情報を指定するコンフィギュレーション アセットを作成します。
通常、コンフィギュレーション アセットの設定後は、それを変更する必要はありません。ただし、ネットワークのトポロジが変更された場合は除きます。例えば、レンダリング先のコンピュータを変更する必要がある場合や、現実世界でスクリーンやディスプレイの物理的な配置が変更される場合などがこれに該当します。
nDisplay クラスタをセットアップする一般的なワークフローは、次のとおりです。
- Unreal Editor で新しい nDisplay コンフィグ アセットを作成します。
- nDisplay 3D コンフィグ エディタで nDisplay コンフィグ アセットを設定します。
- Components (コンポーネント): ディスプレイ、カメラ、トランスフォームをルート コンポーネントに追加します。
- Cluster (クラスタ): クラスタ PC コンフィギュレーションの表現を作成し、ビューポートと GPU ID を割り当てます。基本的には、PC のものとビューポートを追加します。
- Output Mapping (出力マッピング): ビューポートを UE アプリケーション ウィンドウに効果的にマッピングします。投影ポリシーを割り当て、ビューポートをディスプレイ、スクリーン、またはメッシュ コンポーネントにバインドします。
-
nDisplay コンフィグ アセットをレベル ビューポートにドラッグして nDisplay ルート アクタを作成し、クラスタの観点からプロジェクトのコンテンツをプレビューします。
- nDisplay コンフィグ アセットをレベル ビューポートにドラッグして nDisplay ルート アクタを作成し、クラスタの観点からプロジェクトのコンテンツをプレビューします。
スイッチボード を使用して、プロジェクトを物理 nDisplay セットアップで起動します。
nDisplay クラスタを起動する上で、NDisplay ルート アクタをレベル内に配置する必要はありません。プロジェクトで nDisplay プラグインを有効にすると、コマンドライン引数として、スイッチボードまたは nDisplay コンフィグ ファイル (.cfg
または .ndisplay
) で nDisplay コンフィグ アセット (.uasset
または .ndisplay
ファイル) の場所を指定できます。この方法は、インゲームまたはパッケージ モードで使用することができます。
スイッチボードまたはコマンドライン引数を使って外部でコンフィグ アセットを指定すると、プロジェクトのアクタとして既に存在していたコンフィグ アセット (ある場合) は無視されます。
フェイルオーバー
インストールされているすべてのクラスター化 システムは、永続的または一時的に、障害のリスクにさらされています。障害の原因は、ハードウェア、ソフトウェア、ネットワーク問題である可能性があります。フェイルオーバーとは、システムが障害のリスクを軽減し、クラスター全体を終了せずにノードの障害から回復する方法を指します。
現在 nDisplay に実装されているフェイルオーバーは、レンダリング ノードのネットワークで検出可能な障害のみに対処します。つまり、原因がクラッシュでもネットワークの切断であっても、レンダリング ノードが応答しなくなった場合、構成可能なタイムアウト値の後にクラスターから削除されます。
フェイルオーバーを有効にする
nDisplay のフェイルオーバー サポートを有効にするには、nDisplay 3D Config Editor の [Cluseter Details] パネルを開いて [Failover Policy (フェイルオーバー ポリシー)] を [Drop S-node on fail] に設定します。

このオプションを有効にすると、タイムアウト値を超えたときにレンダリング ノードがクラスターから削除されます。フェイルオーバーに使用されるタイムアウト値は、クラスタのネットワーク設定にあります。ネットワーク設定の詳細については「nDisplay 通信ポートを変更する」を参照してください。

いずれかのノードが時間内に応答せず、バリアがタイムアウトした場合、それらのノードは障害が発生したと見なされ、フェイルオーバー ポリシーが有効になるとクラスターから削除されます。
マルチ GPU のサポート
nDisplay はビューポートのレンダリングにマルチ GPU (mGPU) をサポートしているため、1 つの GPU デバイスを指定して特定のビューポートをレンダリングし、そのフレームを別の GPU にコピーして表示させることができます。バーチャル プロダクションとインカメラ VFX の例では、インナー錐台を 2 番目の GPU で完全にレンダリングできるので、パフォーマンスとハードウェア使用量が改善されます。
NVLink を備えた NVIDIA 製の GPU では、CPU をバイパスして、GPU から GPU にメモリを直接転送できます。NVLink がない場合でもメモリ転送はピアツーピア (P2P) になります。しかし、この場合は PCIe を使用して CPU を経由する必要があるため、速度が低下する可能性があります。
nDisplay セットアップで mGPU を有効にするには、次の手順に従います。
- nDisplay 3D コンフィグ エディタで nDisplay コンフィグ アセットを開きます。
- [Components (コンポーネント)] パネルで、[Config Asset (コンフィグ アセット)] を選択して [Details] パネルを開き、[Configuration (コンフィギュレーション)] > [Render Frame Settings (レンダリングフレーム設定)] > [Multi GPU Mode (マルチ GPU モード)] を [Enabled (有効)] に設定します。
-
ビューポートのレンダリングの場合: nDisplay 3D コンフィグ エディタ で、ビューポートを選択し、その [Details] パネルで [GPUIndex] フィールドを GPU のインデックスに設定します。
インナー フラスタムのレンダリングの場合: nDisplay 3D コンフィグ エディタ で、ICVFX カメラを選択し、その [Details] パネルで [GPUIndex] フィールドを GPU のインデックスに設定します。
通常、コンピュータにインストールされて有効になっている最初の GPU の割り当て先は 0 で、他の GPU は 1、2、3...、n と段階的に割り当てられていきます。OS によって割り当てられた現在使用している GPU デバイス番号は、コンピュータの設定から確認できます。たとえば Windows の場合、GPU デバイス番号はタスクマネージャで確認できます。
- タスク マネージャを開きます。
- [Performance (パフォーマンス)] タブに切り替えます。
-
ウィンドウの左側に、マシンにあるすべての GPU とそのデバイス番号が表示されます。
-
nDisplay ノードの スイッチボード の設定で、[Number of GPUs (GPU 数)] を nDisplay ノード内の GPU の数と一致するように設定します。
ランタイム カメラの制御
内部で、nDisplay はコンフィギュレーション ファイルで設定した仮想 3D スペースでシーン オブジェクトの階層を維持します。たとえば、このシーン階層は通常、「カメラ」の位置と「画面」一式 (現実世界のディスプレイ スクリーンまたは仮想世界のプロジェクション サーフェスを表す3D スペースの長方形) の位置を定義します。NnDisplay シーン オブジェクトの位置は、仮想スペースの基点 (0,0,0) に常に置かれる単一の「ルート」位置に関連して定義されます。
NnDisplay を有効にしてプロジェクトを実行する場合、この仮想スペースのルートはレベル内のカメラにアタッチされた DisplayClusterRoot コンポーネントの位置と回転に基づきます。フレームごとに、nDisplay はこのルート コンポーネントの位置と回転を、nDisplay コンフィギュレーション ファイルで設定したシーン ノードの階層に対する開始点として使用します。
デフォルトで、nDisplay はスタートアップで DisplayClusterRoot コンポーネントを作成し、デフォルト カメラにアタッチします。その結果、nDisplay クラスタ全体のすべてのデバイスとプロジェクターがアクティブ カメラの視点からのシーンを自動的にレンダリングします。
ブループリント API
ブループリント API を使用して、ゲームのランタイム ロジックで nDisplay システムの動作を制御できます。
これらの API で公開されている関数を利用するには、次の手順を実行します。
- クラスタ管理、入力デバイスのクエリ、nDisplay レンダリングなどに関連するほとんどの nDisplay ブループリント関数では、ブループリントで新しい N Display > Get DisplayCluster Module API ノードを作成します。
-
ノードの Out API ピンからドラッグして、[Display Cluster (ディスプレイ クラスタ)] カテゴリを確認します。
nDisplay を拡張する
nDisplay では、複数台のコンピュータと出力デバイス間でリアルタイムの同期レンダリングを制御するための、すぐに使用できる多くの機能を提供しています。ただし、さまざまな投影システムとディスプレイ サーフェスが存在するため、お使いのテクノロジーをサポートするために nDisplay レンダリング システムを拡張しなければならない場合があります。C++ のプログラミングに慣れており、nDisplay が一般的なユース ケースでどのように機能するかを理解している場合は、拡張可能なレンダリング API に基づいて構築することにより、nDisplay を拡張して追加のディスプレイおよびキャリブレーション テクノロジーをサポートできます。
nDisplay API では、レンダリング パイプラインを次のような複数の主要な概念に分割します。
- DisplayClusterRenderingDevice: 基本的にネイティブ インターフェースの拡張です。
- DisplayClusterPostProcess: 特定のビューポートに後処理を適用するために使用できる 6 つのコールバックのグループです。
- DisplayClusterProjectionPolicy: カーブした任意のサーフェスにレンダリングするためのスケーラブル ディスプレイ、VIOSO、DomeProjection、MPCDI のサポート、または単純な平面投影の実行など、カスタム投影方法の処理を担います。
- DisplayClusterRenderSyncPolicy: nvSwapLock、vSync、または 24hz ディスプレイ向けのカスタム スキップフレーム同期など、さまざまな同期方法に使用されます。
上記の要素の独自の特殊化を作成することにより、nDisplay システムが生成する画像を、使用するあらゆる投影テクノロジーまたはディスプレイ テクノロジーに合わせてカスタマイズできるだけでなく、リリースされている Unreal Engine のソース コードを変更する必要なく nDisplay クラスタリング システムのすべての主要なメリットを活用することができます。
これらの要素の実装を設定する方法の作業モデルについては、PicpProjection
モジュールおよび PicpMPCDI
モジュールのソース コードを参照してください。これらのモジュールは、Engine/Plugins/Runtime/nDisplay/Source
の Unreal Engine のソースコードにあります。
独自にカスタムしたキー / 値のペアを nDisplay クラスター ノードに与えることができます。コンフィグ アセットの [Details] パネルにある [Custom Parameters] にパラメータと値を必要とするだけ含めることができます。すると、実行時に nDisplay ブループリントまたは C++ API からこれらの構成値を取得できるようになります。
パラメータは以下の手順で追加します。
- 3D コンフィグ エディタ の [Components] パネルで [self (自身)] を選択して [Details] パネルで開きます。
-
[Details] パネルで [Configuration] セクションを展開して [Custom Parameters] フィールドに要素を追加します。
サポートされているオペレーティング システム
Windows
すべての nDisplay ツールおよび機能は、Windows 10、8.1、8、および 7 で完全に機能します。
Linux
nDisplay とツール エコシステムには、予備的な Linux サポートが含まれるようになりました。これは、クラスタ化されたセットアップ環境でさまざまな種類の Linux ディストリビューション、特にトレーニングやシミュレーションで UE を実行しているユーザーにとってメリットになります。
Linux の既知の制限事項
- カスタム同期ポリシーには、既存のグラフィックカード ドライバーのサポートにより、いくつかの制限があります。
- 他のベンダーに依存するプロジェクション ポリシーには検証が必要なものがあります。
- レイトレーシングなどの一部のレンダリング機能は、現時点ではサポートされていません。