Gerçekten, gerçekten yüksek çözünürlüklü bir görüntü dizisi için kodlama


17

60x2 inç LED TV'lerin 5x2 dizisinde çalışmak için gerçek zamanlı bir "tam ekran" demosu oluşturmakla görevlendirildim: veya başka bir deyişle 20 megapiksel bir ekran.

Ekranlara tam çözünürlükte tek bir Win7 masaüstü çalıştırabilen bir makine ve bazı oldukça iyi ekran kartlarımız var.

Sorum şu: Piksel gölgelendiricilerimin yapacakları saçma işin yanı sıra, DX10. * 'In daha aklı başında bir görüntü alanında olmayacak başka sınırlamaları var mı? Gelecek haftaya kadar donanıma erişimim olmayacak, ancak o zamana kadar sistemi karşılaştırmak için kullanabileceğim bir şey yazmak istiyorum.

Güncelleme

Iman, bir sürü AMD EyeFinity (6 çıkış) kartlı tek bir makinede çalışmayı sürdürürken - işlerin sorunsuz çalışmasını sağlamak için, "en kolay" yolun bir pencere açıklığı ekranı olarak ekran başına bir DX penceresi oluşturmak olduğu ortaya çıktı. bazı performans sorunlarına neden oldu - Ayrıca, her biri iki ekran kullanan bir grup makineye görevi dağıtarak oldukça iyi çalışmasını sağladım.

Şaşırtıcı derecede kolaydı. Test XNA uygulamam için, bazı oyun durumlarını (kamera konumu / yönü vb.) Yakalayan bir GameComponent ekledim ve çerçeve başına yerel alt ağda UDP-spam'lerini ekledim.

Bu bileşenin bir Modeanahtarı vardır (gönderme veya alma). İçinde ise Receivemodunda, bu UDP veri birimi yakalar ve gönderenden gelen bilgilerle oyun durumunu günceller. Sendmodu yalnızca durum paketleri gönderir ve bir hizmet / arka plan programı aracılığıyla düğümlerin istemci uygulamasını başlatmasına veya durdurmasına neden olur. Herhangi bir istemci bir "ana" gibi davranabilir ve bir istemciyi Sendmoda geçirmek diğer tüm düğümlerin geçişini ister Receive. İnsanlar kontrol üzerinde savaşırken neler olduğunu görmek oldukça eğlenceli.

Başka bir yarar: Bir dizi ana kare durum tanımını (konum, zaman vb.) İşleyen bir konsol uygulaması oluşturdum, gerektiğinde enterpolasyonlar ve bunları oyun motorunda kullanılanla aynı kodu kullanarak gönderir. Bu, kolayca komut dosyası hareketini, bir web tarayıcısından dönüşümler göndermemi vb. Sağlar.

Sonuç olarak, uygulamanın birden fazla kopyasının senkronize çalışmasını sağlamak yaklaşık 50 satır kod aldı. Bazı ek karmaşıklıklar, her makine için kamera konumunun ayarlanmaması ve bazı perspektif / projeksiyon sıkıntılarının düzeltilmesinden kaynaklandı, ancak bunların çoğu düğüm başına yapılandırma dosyasına indi.


2
Bu gerçekten eğlenceli bir proje gibi geliyor.
Cypher

1
Evet. Neredeyse gittim ve muah-ha-ha'd.
3Dave

3
Kir emtia makineleri olarak 10 ucuzla yapardım, her biri sadece dünya görüşünün küçük bir parçası haline gelmesinden endişe ediyor ve zaman senkronizasyonunu ve bazı ana kutudan kontrolü korumak için ağa bağlıydı. Bir ton Ar-Ge riski olan kanama kenarı, test edilmemiş makine konfigürasyonu yerine, çok düşük risk altında konserve bir çözüm olacaktır. Yine de bu sadece YMMV.
Patrick Hughes

Ben böyle giderdim ama donanım satın almadım. = /
3Şubat

Aslında, ağ, senkronize oluşturma yönü kulağa harika geliyor. Zorlayıcı, ama bunu nasıl yapacağımı zaten söyleyebilirim. Ve biraz esneklik sağlar: diziyi bölmek istiyorsanız bir kutudan birden fazla akış oluşturmak gerekmez. "Paralel" benim en sevdiğim kelimelerden biri!
3Dave

Yanıtlar:


5

Yazılım yapılandırması kadar endişelenirim. Her TV'yi kendi çözünürlüğünde çalıştırmak zorunda değilsiniz ve ekran boyutu çözünürlükten farklı. 60 "TV'lerin her birinin 1920x1080 olduğunu varsayacağım, bu yüzden 5 satır x 2 sütun TV'yi kastediyorsanız, tümünde doğal çözünürlük 9600x2160 veya 5 sütun x 2 satır demek istiyorsanız 3840x5400.

En yeni AMD Radeon kartı olan 7970, video aktarmak için DisplayPort 1.2 kullanıyorsanız, ekran başına maksimum iki ekranda 4096x2160'a kadar bir çözünürlüğü destekler. Bu nedenle sizi doğal çözünürlüğe yakınlaştırabilir, ancak bu şekilde 5 TV'ye kadar çalışmaz.

AMD Radeon 6870 Eyefinity 6 bir seferde 6 adede kadar çıkışı destekler, ancak yalnızca 5760x2160 maksimum çözünürlüğünün üzerinde. Ayrıca, performansınıza biraz yardımcı olacak bir Crossfire yapılandırmasını da destekler. Ekstra GPU'ların daha yüksek bir maksimum çözünürlük vermeyeceğini unutmayın.

Tamamen özel bir ekran kurulumundan kısa veya video sinyalinizi daha fazla monitöre / TV'ye bölecek bir şey, bir kerede 10 ekranda nasıl çalışabileceğinizden emin değilim. Ancak bu yeteneğe sahipseniz, aradığınız şey yerel çözünürlüğünüze en yakın çözünürlüğü destekleyen en hızlı grafik kurulumudur. En iyi seçeneğiniz, piksel gölgelendiricilerinizi olabildiğince ucuz tutmak ve aşırı çekilmekten kaçınmaktır, bu da tek pikselleri birden fazla hesaplamak anlamına gelir. Frustum ve oklüzyon ayırma ve derinlik ayıklama, aşırı çekilmeyi azaltmaya büyük ölçüde yardımcı olacaktır. DX10 içinde bir sınır kadar, çözünürlüğü sınırlayan bir emin değilim, eminim bir tane var, ama muhtemelen mevcut herhangi bir DX10 karttan daha büyük.


Donanım tüm diziyi zaten çalıştırıyor ve her bir ekran 1920x1080'de. 5 sütun iki satır. Başka bir adam, dönen tel kafesli tam çözünürlüklü bir OpenGL penceresine sahipti. Sadece geri gelip beni daha sonra ısırabilecek herhangi bir DX sınırını merak ediyorum.
3Dave

1
Bildiğim kadarıyla, tarif ettiğiniz gibi DX10 ile sınırlı olmayacaksınız. Zaten bu kurulumda görüntüleyebiliyorsanız, performans tek endişeniz olacak ve bu performansı ele almak, diğer ekran / programlar gibi olacak, ekstra ekran alanı nedeniyle biraz ölçeklendirilecek.
Nic Foster

6

Performansı test etmek için kolayca eşdeğer boyutta bir oluşturma hedefi oluşturabilirsiniz. Gerçek donanımı elde edene kadar arka ölçeğe kopyalarken küçültmeniz veya yakınlaştırmanız gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.