本当に、本当に高解像度のディスプレイアレイのコーディング


17

私は、リアルタイムの「フルスクリーン」デモを作成して、5インチx 2インチの60インチ以上のLEDテレビ、つまり20メガピクセルのディスプレイで実行するという任務を負っています。

フル解像度でディスプレイ全体に広がる単一のWin7デスクトップを実行できるマシンと、かなりまともなビデオカードがあります。

私の質問は、ピクセルシェーダーが行うことになる途方もない量の作業とは別に、より適切なサイズのビューポートではない、DX10。*のその他の制限事項がありますか?来週までハードウェアにアクセスすることはできませんが、それまでにシステムのベンチマークに使用できる何かを書きたいと思っています。

更新

AMD EyeFinity(6出力)カードを束ねた1台のマシンでこれを機能させることができました-物事をスムーズに機能させるために、「最も簡単な」方法は、ウィンドウスパンディスプレイを持つディスプレイごとにDXウィンドウを作成することでしたいくつかのパフォーマンスの問題を引き起こしました-また、それぞれが2つのディスプレイを駆動するマシンのグループにタスクを分散させることで、かなりうまく機能しました。

驚くほど簡単でした。テストXNAアプリの場合、ゲームの状態(カメラの位置/方向など)をキャプチャするGameComponentを追加し、フレームごとにローカルサブネット全体でUDPスパムします。

そのコンポーネントにはModeスイッチ(送信または受信)があります。Receiveモードにある場合、UDPデータグラムをキャッチし、送信者からの情報でゲームの状態を更新します。Sendモードは状態パケットを送信するだけで、サービス/デーモンを介して、ノードがクライアントアプリを起動または停止します。どのクライアントも「マスター」として動作でき、クライアントをSendモードに切り替えると、他のすべてのノードにに切り替えるように要求しますReceive。人々がコントロールをめぐって戦っているときに何が起こるかを見るのはとても楽しいです。

別のすばらしい利点:必要に応じて一連のキーフレーム状態定義(場所、時間など)を処理し、ゲームエンジンで使用されているのと同じコードを使用して送信するコンソールアプリを作成しました。これにより、移動のスクリプトを簡単に作成したり、Webブラウザから変換を送信したりできます。

全体として、アプリの複数のコピーを同期して実行するには、約50行のコードが必要でした。いくつかの追加の複雑さは、各マシンのカメラ位置をオフセットし、いくつかの遠近感/投影の煩わしさを修正することから生じましたが、そのほとんどはノードごとの構成ファイルに帰着しました。


2
これは本当に楽しいプロジェクトのように聞こえます。
サイファー

1
うん。私はほとんど笑ってムアハハした。
3Dave

3
10台の安価なダーティコモディティマシンでそれをやったことがありますが、各マシンは世界観の小さな部分をレンダリングすることだけを心配しており、マスターボックスからの時間同期と制御を維持するためにネットワーク化されました。最先端の未テストのマシン構成ではなく、R&Dリスクが非常に高いため、非常に低いリスクの缶詰ソリューションになります。しかし、それは私だけです、YMMV。
パトリックヒューズ

それは私が行っていた方法ですが、私はハードウェアを購入しませんでした。= /
3Dave

実際には、ネットワーク、同期レンダリングの側面は素晴らしいですね。挑戦しますが、私はすでにそれを行う方法を提供することができます。また、配列を分割する場合、1つのボックスから複数のストリームをレンダリングする必要はありません。「パラレル」は私の好きな言葉の1つです。
3Dave

回答:


5

ソフトウェアと同じくらいハードウェア構成についても心配します。各テレビをネイティブ解像度で実行する必要はなく、画面サイズは解像度とは異なります。ただし、60インチのテレビはそれぞれ1920x1080であるため、それらすべてのネイティブ解像度は、5行x 2列のテレビの場合は9600x2160、5列x 2行の場合は3840x5400です。

最新のAMD Radeonカードである7970は、DisplayPort 1.2を使用してビデオを転送する場合、ディスプレイごとに最大4096x2160の解像度をサポートし、最大2台のディスプレイをサポートします。そのため、ネイティブの解像度に近づくことがありますが、最大5台のテレビでは機能しません。

AMD Radeon 6870 Eyefinity 6は、一度に最大6つの出力をサポートしますが、最大解像度は5760x2160のみです。また、パフォーマンスを大幅に向上させるCrossfire構成もサポートしています。余分なGPUが最大解像度を大きくすることはありません。

完全にカスタム化されたディスプレイ設定、またはビデオ信号をより多くのモニター/テレビに分割するものを除いて、一度に10台のディスプレイで実行できるかどうかはわかりません。ただし、その機能がある場合、探しているのは、ネイティブ解像度に最も近い解像度をサポートする最速のグラフィック設定です。最善の策は、ピクセルシェーダーをできるだけ安く保ち、オーバードローを避けることです。つまり、単一ピクセルを複数回計算することです。錐台とオクルージョンのカリング、および深さのソートは、オーバードローを大幅に削減するのに役立ちます。DX10内の制限に関しては、解像度を制限するものは定かではありませんが、あるとは確信していますが、おそらく存在するDX10カードよりも大きいでしょう。


ハードウェアはすでにアレイ全体を実行しており、各ディスプレイは1920x1080です。5列2行です。別の男は、回転するワイヤフレームが動作するフル解像度のOpenGLウィンドウを手に入れました。戻ってきて後で噛むかもしれないDXの制限について疑問に思っているだけです。
3Dave

1
私の知る限り、あなたが説明しているような解像度として、DX10に制限されることはありません。その設定で既に表示できる場合、パフォーマンスが唯一の懸念事項になり、そのパフォーマンスの処理は他のゲーム/プログラムと同じようになり、余分な画面スペースのためにかなり大きくなります。
ニックフォスター

6

同等のサイズのレンダーターゲットを簡単に作成して、パフォーマンスをテストできます。実際のハードウェアが得られるまで、バックバッファーにコピーするときにダウンスケールするかズームインする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.