Pengodean untuk array tampilan resolusi sangat tinggi

17

Saya telah ditugaskan untuk membangun demo "layar penuh" waktu nyata untuk dijalankan pada array 5x2 TV LED 60+ inci: atau, dengan kata lain, layar 20 megapiksel.

Kami memiliki mesin yang dibangun yang dapat menjalankan penyebaran desktop Win7 tunggal di seluruh layar dengan resolusi penuh, dan beberapa kartu video yang cukup bagus.

Pertanyaan saya adalah: selain dari jumlah pekerjaan konyol yang akan dilakukan oleh pixel shaders saya, apakah ada batasan lain dari DX10. * Yang akan berperan di sini yang tidak akan pada viewport berukuran lebih waras? Saya tidak akan memiliki akses ke perangkat keras sampai minggu depan tetapi saya ingin memiliki sesuatu yang ditulis pada saat itu yang dapat saya gunakan untuk benchmark sistem.

Memperbarui

Sementara saya berhasil mendapatkan ini bekerja pada satu mesin dengan sekelompok AMD EyeFinity (6 output) kartu - untuk menjaga hal-hal bekerja dengan lancar, cara "termudah" ternyata adalah membuat jendela DX per tampilan sebagai memiliki tampilan rentang jendela menyebabkan beberapa masalah kinerja - Saya juga membuatnya bekerja cukup baik dengan mendistribusikan tugas di sekelompok mesin, yang masing-masing menggerakkan dua layar.

Ternyata sangat mudah. Untuk aplikasi pengujian XNA saya, saya menambahkan GameComponent yang menangkap beberapa kondisi permainan (posisi / orientasi kamera, dll.) Dan UDP-mem-spam-nya ke subnet per frame lokal.

Komponen itu memiliki Modesakelar (kirim atau terima). Jika dalam Receivemode, ia menangkap datagram UDP dan memperbarui status game dengan informasi dari pengirim. Sendmode hanya mengirim paket state, dan, melalui service / daemon, menyebabkan node memulai atau menghentikan aplikasi klien. Setiap klien dapat bertindak sebagai "master", dan mengalihkan klien ke Sendmode meminta semua node lain untuk beralih ke Receive. Sangat menghibur melihat apa yang terjadi ketika orang-orang memperebutkan kontrol.

Manfaat lain yang rapi: Saya membuat aplikasi konsol yang memproses serangkaian definisi keadaan keyframe - lokasi, waktu, dll - menginterpolasi sesuai kebutuhan, dan mengirimkannya menggunakan kode yang sama seperti yang digunakan dalam mesin game. Ini memungkinkan saya dengan mudah menyalin gerakan, mengirim transformasi dari browser web, dll.

Secara keseluruhan, butuh sekitar 50 baris kode untuk menjaga banyak salinan aplikasi berjalan dalam sinkronisasi. Beberapa kompleksitas tambahan datang dari pengaturan posisi kamera untuk setiap mesin dan mengoreksi beberapa gangguan perspektif / proyeksi, tetapi sebagian besar berasal dari file konfigurasi per-simpul.

3Dave
sumber
2
Ini terdengar seperti proyek yang sangat menyenangkan.
Cypher
1
Ya. Aku hampir terkekeh dan muah-ha-ha'd.
3Dave
3
Saya akan melakukannya dengan 10 murah sebagai mesin komoditas tanah, masing-masing hanya khawatir tentang rendering itu sepotong kecil dari pandangan dunia dan jaringan untuk menjaga sinkronisasi waktu dan kontrol dari beberapa kotak induk. Alih-alih tepi pendarahan, konfigurasi mesin yang belum diuji dengan satu ton risiko R&D itu akan menjadi solusi kalengan dengan risiko yang sangat rendah. Tapi itu hanya aku, YMMV.
Patrick Hughes
Begitulah cara saya pergi, tetapi saya tidak membeli perangkat keras. = /
3Dave
Sebenarnya, aspek rendering yang disinkronkan jaringan terdengar luar biasa. Menantang, tetapi saya sudah bisa melakukan cara melakukannya. Dan memberikan beberapa fleksibilitas kembali: tidak perlu membuat beberapa aliran dari satu kotak jika Anda ingin membagi array. "Paralel" adalah salah satu kata favorit saya!
3Dave

Jawaban:

5

Saya akan khawatir sama banyak tentang konfigurasi perangkat keras sebagai perangkat lunak. Anda tidak harus menjalankan setiap TV pada resolusi aslinya, dan ukuran layar berbeda dari resolusi. Saya akan menganggap 60 "TV masing-masing 1920x1080, jadi resolusi asli di semua itu adalah 9600x2160 jika Anda berarti 5 baris x 2 kolom TV, atau 3840x5400 jika Anda berarti 5 kolom x 2 baris.

Kartu AMD Radeon terbaru, 7970 mendukung resolusi hingga 4096x2160 per layar, maksimum dua layar, jika Anda menggunakan DisplayPort 1.2 untuk mentransfer video. Jadi itu mungkin membuat Anda mendekati resolusi asli, namun itu tidak akan berfungsi hingga 5 TV dengan cara itu.

AMD Radeon 6870 Eyefinity 6 mendukung hingga 6 output sekaligus, tetapi hanya lebih dari resolusi maksimal 5760x2160. Ini juga mendukung konfigurasi Crossfire yang akan membantu kinerja Anda sedikit. Ingatlah bahwa GPU tambahan tidak akan menghasilkan resolusi maksimal yang lebih besar.

Pendek dari pengaturan tampilan sepenuhnya khusus, atau sesuatu untuk membagi sinyal video Anda ke lebih banyak monitor / TV, saya tidak yakin bagaimana Anda akan dapat berjalan di 10 layar sekaligus. Tetapi jika Anda memiliki kemampuan itu, maka yang Anda cari adalah pengaturan grafis tercepat yang mendukung resolusi yang paling dekat dengan resolusi asli Anda. Setelah Anda yakin bahwa taruhan terbaik Anda adalah menjaga pixel shader semurah mungkin, dan menghindari penarikan berlebih, yang berarti menghitung piksel tunggal lebih dari sekali. Pemusnahan frustum dan oklusi, dan penyortiran kedalaman akan sangat membantu dalam mengurangi penarikan berlebih. Sejauh batas dalam DX10, saya tidak yakin satu yang membatasi resolusi, saya yakin ada satu, tapi mungkin lebih besar daripada kartu DX10 yang ada.

Nic Foster
sumber
Perangkat keras sudah menjalankan seluruh array, dengan masing-masing layar berukuran 1920x1080. 5 kolomnya dengan dua baris. Seorang pria lain mendapat jendela OpenGL resolusi penuh dengan running wireframe berputar. Hanya ingin tahu tentang batasan DX yang mungkin akan kembali dan menggigit saya nanti.
3Dave
1
Sejauh yang saya tahu Anda tidak akan dibatasi oleh DX10 karena resolusi seperti yang Anda gambarkan. Jika Anda sudah bisa menampilkan pada pengaturan itu maka kinerja akan menjadi satu-satunya urusan Anda, dan menangani kinerja itu akan sama seperti game / program lain, hanya ditingkatkan sedikit karena ruang layar tambahan.
Nic Foster
6

Anda dapat dengan mudah membuat target render dengan ukuran yang setara untuk menguji kinerja. Anda harus menurunkan skala atau memperbesar saat menyalinnya ke buffer belakang sampai Anda mendapatkan perangkat keras yang sebenarnya.

Adam
sumber