nDisplay での同期

複数のディスプレイ間で行う同期についての概要です。

Choose your operating system:

Windows

macOS

Linux

同期は、リアルタイム コンテンツを複数のセクションに分割して単一の大きなディスプレイに表示する上で欠かせない処理です。レンダリングまたはディスプレイ エコシステム内のすべてのシステムがミリ秒単位で測定される厳密なタイミングに従うことで、シームレスなディスプレイが表示されているように見せます。

複数のディスプレイのセットアップでは、多くの場合、ソフトウェア レベルとハードウェア レベルの両方で同期機能が必要になります。生成されたコンテンツは、シミュレーションのための同一のタイミング情報を使用してすべての PC で同時に生成される必要があるだけでなく、ディスプレイ スワップ (ビデオ カード バッファ中での次の映像のための現在の映像の置換) を正しいタイミングで実行して、ディスプレイで「ティアリング」アーティファクトが発生しないようにする必要もあります。

VR をはじめとする立体ディスプレイでは、2 つのフレーム (片目ごとに 1 フレーム) が完全に一致する必要があるため、この同期の問題が二重に生じます。

決定論

同期を管理するには次の 2 通りの方法があります。

  • 決定的: 各サーバー (PC、レンダリング ノード) に特定の入力セットが指定され出力が常に予測可能になるように設定されます。つまり、サーバーがシステム内で他のマシンと同期する必要がある情報は正確な時間と、個々のマシンの入出力情報だけです。

  • 非決定的: システムは同期を確実に行うために、トランスフォーム行列とシーン内のすべてのアクタやオブジェクトのその他の関連特性を強制的にレプリケーションしてシステム全体を複製します。

どちらのアプローチにも長所と短所があります。決定的システムの主な長所は、プロジェクトのシンプルさと各フレームで各オブジェクトのトランスフォーム データを共有しないことによりデータ帯域幅が節約されることです。短所はシステムで拡散が生じると、時間の経過とともにその拡散を把握しきれないという問題が発生します。レンダリングの均一性が大幅に損なわれることで映像が断続的になったりアーティファクトが発生したりすることがあります。

ハードウェアの同期とゲンロック

どのフレームをレンダリングするかなどのゲームプレイの観点では「nDisplay のプライマリ PC」は、クラスタ内のすべての「クラスタ (ノード) PC」にタイミング情報を通知しますが、専用のハードウェア同期カードと互換性のあるプロ用グラフィック カードは、物理的なディスプレイ デバイスでレンダリングされたフレームの表示をまったく同じタイミングで同期する必要があります。

例えば、ブロードキャスト アプリケーションでは、カメラ、モニタ、その他のディスプレイなど、多数のデバイスを厳密に同時に次のフレームに切り替えてキャプチャするために、これらすべてのデバイスを同期するのが一般的です。この業界では、ゲンロック (genlock) が広く導入され、使用されています。

この構成は、通常、同期が必要なハードウェアにクロックを送信するハードウェア ジェネレータで構成されます。リアルタイム レンダリングに使用する PC の場合、NVIDIA Quadro シリーズのようなプロ向けのグラフィック カードのなかでも受信したタイミング信号またはパルスにロックする NVIDIA Quadro Sync II カードがこのテクノロジーをサポートしています。

システム トポロジー

Primary Node (house clock generator)

クラスタ ノード (プライマリ ノード GPU からクロックを受信)

Synchronisation Demystified を表示する

  • フレームロックのみ: GPU でデイジーチェーン技術を使用するこのメソッドは、NVIDIA では一般的に FrameLock/SwapSync と呼ばれています。ゲンロックは使用されていません。マスター nDisplay PC の GPU はプライマリ クロックを取得します。すべての PC が 3 つのトポロジー内で接続されます (プライマリ PC はルートです)。このアプローチにより、NVIDIA API 経由で NVIDIA スワップ グループ/バリアの使用が可能になります。

    このアプローチはバーチャル プロダクションにはあまり適していません。空間内で使用され、外部のマスター クロックと同期している他のすべてのデバイスとは分離して機能するからです。

  • ゲンロックのみ: このスキームを使うと、すべてのクラスタ PC の GPU が同じソースから独自のマスター クロック信号 (ゲンロック) を取得します。言い換えると、各 PC は独自の BNC ケーブルを取得し、すべてのケーブルは同じマスター クロック ジェネレータに接続します。

    このアプローチにより、VSync の同期が可能になりますが、NVIDIA API を介した NVIDIA バリアは使用されません。技術的に、すべてのクラスタ PC は受信されるクロックにフレームロックされます。しかしながら、このアプローチではアプリケーション レベルでのフレーム提示に対する正確な制御がないため、100% 信頼できることが証明されていません。

    このメソッドを以前使用していたため、同期されない可能性 / グリッチの可能性を低くする「高度な」同期ポリシーを実装しなければなりませんでした。

  • ゲンロックとフレームロック:バーチャル プロダクションの最も好ましいアプローチです。 すべてのステージ デバイスはマスター nDisplay PC GPU などのプライマリ クロックに接続されます。クラスタ内同期は、プライマリ PC とレンダー ノード PC 間のデイジー チェーン接続を使って完了します。

    このアプローチでは NVIDIA API の使用が可能なため、NVIDIA バリアを使用し、アプリケーション レベル上でのフレーム提示に対して UE 制御を行うことができます。そのため、与えられた外部クロック (ゲンロック) と共に、ディスプレイを同期する上で最も信頼できる同期メソッドが提供されます。

デイジー チェーンとダイレクト ゲンロックの比較

デイジー チェーンは、ダイレクト ゲンロックと一緒に使用できる信号ロック技術です。デイジー チェーンでは、プライマリ クロックは単一の PC またはデバイスに送信され、個別のケーブルにより信号が他すべてのハードウェアに伝播されます。NDisplay に関するこれまでの経験から、各 PC がプライマリ ソースから直接クロックを受信するダイレクト ゲンロックはデイジー チェーンよりもシンプルで効果的であるものの、デイジー チェーンに基づく新しいハードウェア アプローチは、ダイレクト ゲンロック アプローチより信頼性と費用対効果の高い、信号ロック ソリューションにつながると考えられています。このソリューションは NVIDIA スワップ同期/ロックという名称です。

NVIDIA Mosaic と AMD EyeFinity

NVIDIA の Mosaic モード と AMD の EyeFinity は、1 枚のグラフィック カード内の複数の出力を結合して同期させることで、OS やソフトウェアの観点から独自のディスプレイとして表示されるようにできるよく似ている GPU 技術です。この仮想ディスプレイは、基本的には複数の物理ディスプレイの集合体であり、単一の同期ディスプレイとして機能します。また、基盤となるフレームロックまたはゲンロック技術を使用して、異なるシステムの他のディスプレイと同期することもできます。

ハウス クロックを使用して複数のディスプレイをロックするプロセスは、フレームロックといいます。ゲンロックは、ハウス クロックではなく、外部クロックを使用するプロセスです。ゲンロックでは、ディスプレイ デバイス、カメラ、トラッキング センサーを含むすべてのデバイス全体で外部クロックが使用されます。

Quadro Sync II カードまたは Firepro S400 カードを使って正確に接続すると仮定すると、Mosaic および EyeFinity 技術を使用して、1 枚のグラフィック カードの複数の出力で厳密に同一のクロックを共有し、オペレーティング システムの観点で単一の大型ディスプレイ キャンバスとして処理することができます。PC 全体ではなく PC ごとに好きな数だけ Mosaic グループまたは Eyefinity ブループを作成することができます。各 PC には独自の Mosaic または Eyefinity がなければなりません。

デイジー チェーン技術を使用して複数の PC や GPU で制御される複数のディスプレイを同期させるには、1 つの GPU がマスター クロック ジェネレータとして動作して、この GPU が、Nvidia Quadro Sync II や AMD Firepro S400 などの同期カードを使用する同一の PC または異なる PC 上で他の GPU とクロックを共有する必要があります。

詳細については、「 マルチディスプレイのための Mosaic テクノロジー - | NVIDIA 」および「 マルチディスプレイ Eyefinity テクノロジー 」を参照してください。

1 台の PC 内の複数に GPU に MOSAIC 仮想ディスプレイをスポーンすることも可能ですが、現時点ではキャンバス上でのアプリケーション ウィンドウの表示に時間がかかります。(今後は使用可能になるかもしれません。)現時点でこのアプローチはバーチャル プロダクションやインカメラ VFX では推奨しません。

ディスプレイ同期のその他の特性

ゲーム スレッドとレンダリング スレッドは、スレッド バリアと呼ばれる機構によって常に同期されます。スレッド バリアは、以下の 2 つの項目の主要な機能です。バリアを無効にすることはできません。スレッド バリアは、プライマリ ノードが同期的にクラスタ ノードを処理することで、複数の UE PC 間で統一されたコンテンツ エクスペリエンスを提供するのに役立つタイムスケール上のポイントと考えることができます。

機能

説明

ソフトウェア/シミュレーション (表示する必要がある要素)

すべてのソフトウェア関連事項を同期するプロセス。Unreal Engine とそのコンテンツを適切に同期させることを目的としたプロセスで、機能決定論、デルタタイム同期、入力レプリケーション、カスタム トランスフォーム、スレッド バリア、クラスタ イベント、ゲーム ロジックなどがあります。

ハードウェア/OS (コンテンツを表示する方法)

1 つの共有クロック (ハウス同期またはゲンロック信号) を使用して、GPU、ディスプレイ デバイスなどのハードウェア デバイスと DWM (デスクトップ ウィンドウ マネージャー) を同期させるプロセス。オペレーティング システムとハードウェアに、ティアリングを発生させることなく、必要なものを同期して表示させる方法です。これには NVIDIA Quadro グラフィック カードと Sync II カード、そしてゲンロック ジェネレータが必要です。これが有効になっていない場合、1 フレーム以上のハードウェア遅延が生じることが予測されます。

レンダリング同期ポリシー

Render Sync Policies (レンダリング同期ポリシー) は、レンダリング出力を同期する方法を定義します。このパラメータは、 nDisplay 3D コンフィグ エディタ のクラスタの [Details] パネルで設定できます。

次の表は、 レンダリング同期ポリシー で使用可能なオプションを示しています。

オプション

説明

None (Sync Policy 0)

VSync=0 を意味します。すべてのノードが RenderThreadBarrier WITHOUT を VBlank に同期した後にフレームを表示します。これは、ティアリング アーティファクトが発生する可能性がありますが、最大の FPS を得ることができます。

Ethernet (Sync Policy 1)

すべてのノードが、RenderThreadBarrier WITH を VBlank に同期した後にフレームを表示します。出力表示にティアリングは発生しません。ただし、Windows DWM とランタイムまたはドライバの設定によっては、ディスプレイの間でティアリングが生じる場合があります。

NVIDIA (Sync Policy 2)

デイジー チェーン接続に基づく NVIDIA ハードウェア フレームロック (NVIDIA SwapLock API) です。NVIDIA セクションにあるこのパラメータで、フレームロックに関連する特定のハードウェア設定を微調整できます。

  • Sync Group (同期グループ):フレームロックに使用する同期グループです。デフォルト値は「1」です。

  • Sync Barrier (同期バリア):フレームロックに使用する同期バリアです。デフォルト値は「1」です。

Custom

nDisplay が認識しないカスタム同期ポリシーを設定します。ポリシー ID と任意の数の Key-Value パラメータが必要です。

以前、特定の nDisplay PC 上でフレームのレンダリングが VBlank の後に行われ、スクリーンにティアリングが発生するような特定の状況を想定した「Advanced Sync」という同期メカニズムを開発しました。このソフトウェアの仕組みでは、当該イベントの予測を試み、すべての PC に次の VBlank でのスキップとレンダリングを強制的に実施します。このメカニズムは 100% 完璧ではなく、有効化されていると、パフォーマンスに望ましくない影響を及ぼす場合があります。

つい最近、同期に新たに利用できるようになった NVIDIA API を実装しました (Sync Policy 2)。この API は、問題に対するハードウェア対応のアプローチとなります。

FrameLockConnectionsTimingServer.png

タイミング サーバーでのフレームロック接続:1) タイミング サーバー 2) クライアント

SyncSource.png

1) 同期ソース 2) サーバー 3) クライアント

同期させる

バーチャル プロダクションという状況で信頼できる同期をするために、ゲンロックとフレームロックの両方を組み合わせた技術を使用しなければなりません。この方法を簡単に説明すると、ゲンロック信号をプライマリ nDisplay PC に発信してから、デイジーチェーン接続ハードウェア方式を使用して、残りのすべてのクラスタ PC に受信同期信号をディスパッチします。それにより、適切にフレームロックされるようにします。つまり、これはコンフィギュレーション アセット内で適切に定義する必要がある NVIDIA レンダリング同期ポリシーとなります。

ワークフロー

  1. 通常の RJ45 コネクタを備える通常の Ethernet ケーブルを使用して、クラスタの GPU 同期ボード間をデイジーチェーン接続します。

  2. MOSAIC を有効にして、NVIDIA のコントロール パネルで同期を設定します (プライマリ PC を設定してから、同期クラスタ ノードを設定)。

  3. nDisplay 3D コンフィグ エディタで、クラスタの [Render Sync Policy] NVIDIA に設定します。

  4. オプション: 複雑なシステムの場合、[Cluster] 設定で NVIDIA スワップ グループと同期バリアをカスタマイズすることができます。

デフォルトでは、sync group 1 と sync barrier 1 を使用します。

[NVIDIA Render Sync Policy] クラスタ設定により、クラスタ ノード上で NVIDIA スワップ グループが有効になります。

追加コメント

「0」という値を指定することはできません。「0」という値は、グループまたはバリアを解除/離脱するために内部で使用されます。自然数のみ使用可能です。1 つの GPU と 1 つの同期ボードを持つシンプルなシステムには、単一の同期グループ #1 と単一の同期バリア #1 があり、デフォルトではこれらを使用します。

同期テスト

次のいずれかの問題の結果として非同期が発生する場合があるため、拡張ディスプレイでの同期テストは困難になる場合があります。

  • 誤ったタイムスタンプにより間違ったフレームがシミュレートされる (ソフトウェアの問題)

  • ディスプレイ デバイスのタイミングがずれている (ディスプレイまたはハードウェアの問題)

同期をテストするために、Epic ではディスプレイ サーフェス全体を素早く移動する単一のオブジェクトを表示する単純なテスト プロジェクトを使用しています。システムが正しく同期されると、バリアを越えてオブジェクトが渡されてもそのフォームは保たれます。正しく同期されないと、ディスプレイの共有エッジでアーティファクトが発生します。

ScreenOneScreenTwo.png

システムが正しく同期されている場合、スクリーン 1 から スクリーン 2 にオブジェクトが渡されてもそのフォームは保たれます。

追加情報へのリンク

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