Kodowanie naprawdę wysokiej rozdzielczości tablicy wyświetlacza

17

Zadanie polegało mi na zbudowaniu demonstracji „pełnoekranowej” w czasie rzeczywistym, aby działała na matrycy 5 x 2 telewizorów LED o przekątnej 60 cali i, innymi słowy, na ekranie o rozdzielczości 20 megapikseli.

Mamy zbudowaną maszynę, która może obsługiwać pojedynczy pulpit Win7 na wyświetlaczach w pełnej rozdzielczości i całkiem przyzwoite karty graficzne.

Moje pytanie brzmi: oprócz absurdalnej ilości pracy, jaką będą wykonywać moje moduły cieniujące piksele, czy istnieją jakieś inne ograniczenia DX10. *, Które mogłyby tu się pojawić, które nie byłyby w bardziej rozsądnym obszarze wyświetlania? Nie będę miał dostępu do sprzętu do przyszłego tygodnia, ale do tego czasu chciałbym napisać coś, czego mogę użyć do przetestowania systemu.

Aktualizacja

Chociaż Imanaged ma to działać na pojedynczym komputerze z wieloma kartami AMD EyeFinity (6 wyjść) - aby utrzymać płynność działania, „najłatwiejszym” sposobem było utworzenie okna DX na jeden ekran, ponieważ wyświetla się okno spowodowało pewne problemy z wydajnością - działałem też całkiem nieźle, rozdzielając zadanie na grupę komputerów, z których każdy obsługuje dwa wyświetlacze.

To było zaskakująco łatwe. Do mojej testowej aplikacji XNA dodałem GameComponent, który przechwytuje pewien stan gry (położenie kamery / orientacja itp.) I UDP-spamuje ją w lokalnej podsieci na ramkę.

Ten komponent ma Modeprzełącznik (wysyłanie lub odbieranie). Jeśli jest w Receivetrybie, przechwytuje datagramy UDP i aktualizuje stan gry o informacje od nadawcy. SendTryb po prostu wysyła pakiety stanu i za pośrednictwem usługi / demona powoduje, że węzły uruchamiają lub zatrzymują aplikację kliencką. Każdy klient może działać jako „master”, a przełączenie klienta w Sendtryb żąda przełączenia wszystkich innych węzłów Receive. Zabawnie jest zobaczyć, co się dzieje, gdy ludzie walczą o kontrolę.

Kolejna fajna zaleta: stworzyłem aplikację konsolową, która przetwarza serię definicji stanu klatki kluczowej - lokalizację, czas itp. - interpoluje w razie potrzeby i wysyła je za pomocą tego samego kodu, który jest używany w silniku gry. To pozwala mi z łatwością wykonywać ruchy skryptowe, przesyłać transformacje z przeglądarki internetowej itp.

Podsumowując, synchronizacja wielu kopii aplikacji zajęła około 50 linii kodu. Dodatkowa złożoność wynikała z przesunięcia położenia kamery dla każdej maszyny i skorygowania pewnych niedogodności związanych z perspektywą / projekcją, ale większość z nich sprowadzała się do pliku konfiguracyjnego dla poszczególnych węzłów.

3Dave
źródło
2
To brzmi jak naprawdę fajny projekt.
Cypher
1
Tak. Prawie zachichotałem i muah-ha-ha'd.
3Dave
3
Zrobiłbym to z 10 tanimi jak brudnymi maszynami towarowymi, z których każda martwiła się renderowaniem tego małego kawałka widoku świata i połączeniem w sieć, aby utrzymać synchronizację czasu i kontrolę z jakiegoś master boxu. Zamiast najnowocześniejszej, niesprawdzonej konfiguracji maszyny z mnóstwem ryzyka badań i rozwoju byłoby to rozwiązanie w puszce o bardzo niskim ryzyku. Ale to tylko ja, YMMV.
Patrick Hughes,
Tak bym poszedł, ale nie kupiłem sprzętu. = /
3Dave
W rzeczywistości aspekt synchronizacji renderowania w sieci brzmi niesamowicie. Wyzwanie, ale już umiem, jak to zrobić. Zapewnia także pewną elastyczność: nie jest konieczne renderowanie wielu strumieni z jednego pola, jeśli chcesz podzielić tablicę. „Parallel” to jedno z moich ulubionych słów!
3Dave

Odpowiedzi:

5

Martwiłbym się zarówno konfiguracją sprzętu, jak i oprogramowaniem. Nie musisz uruchamiać każdego telewizora w jego natywnej rozdzielczości, a rozmiar ekranu różni się od rozdzielczości. Zakładam, że 60-calowy telewizor ma rozdzielczość 1920 x 1080, więc natywna rozdzielczość dla wszystkich wynosi 9600 x 2160, jeśli chodziło o 5 rzędów x 2 kolumny telewizorów, lub 3840 x 5400, jeśli chodziło o 5 kolumn x 2 rzędy.

Najnowsza karta AMD Radeon, 7970, obsługuje rozdzielczość do 4096 x 2160 na ekran, maksymalnie dwa ekrany, jeśli używasz DisplayPort 1.2 do przesyłania wideo. Może więc zbliżyć się do rozdzielczości natywnej, jednak nie zadziała w ten sposób nawet z 5 telewizorami.

AMD Radeon 6870 Eyefinity 6 obsługuje do 6 wyjść jednocześnie, ale tylko w maksymalnej rozdzielczości 5760 x 2160. Obsługuje również konfigurację Crossfire, która znacznie poprawi Twoją wydajność. Pamiętaj, że dodatkowe procesory graficzne nie zapewniają większej maksymalnej rozdzielczości.

Poza całkowicie niestandardową konfiguracją wyświetlania lub czymś, co dzieli sygnał wideo na więcej monitorów / telewizorów, nie jestem pewien, jak będziesz w stanie działać na 10 ekranach jednocześnie. Ale jeśli masz taką możliwość, szukasz najszybszej konfiguracji graficznej, która obsługuje rozdzielczość najbliższą rozdzielczości natywnej. Gdy już to zrobisz, najlepszym rozwiązaniem jest utrzymanie możliwie najtańszych modułów cieniujących pikseli i unikanie przesadzania, co oznacza liczenie pojedynczych pikseli więcej niż jeden raz. Wycinanie zgrubień i okluzji oraz sortowanie głębokości znacznie przyczynią się do ograniczenia nadmiernego wyciągania. Jeśli chodzi o limit w DX10, nie jestem pewien, który ogranicza rozdzielczość, jestem pewien, że istnieje, ale prawdopodobnie jest większy niż jakakolwiek karta DX10, która istnieje.

Nic Foster
źródło
Sprzęt obsługuje już całą tablicę, a każdy wyświetlacz ma rozdzielczość 1920 x 1080. 5 kolumn przez dwa rzędy. Inny facet dostał okno OpenGL w pełnej rozdzielczości z uruchomionym obracającym się szkieletem. Zastanawiam się tylko nad ograniczeniami DX, które mogą wrócić i ugryźć mnie później.
3Dave
1
O ile wiem, nie będziecie ograniczeni przez DX10 jako rozdzielczość, którą opisujesz. Jeśli jesteś w stanie wyświetlać już w tej konfiguracji, wydajność będzie Twoim jedynym zmartwieniem, a obsługa tej wydajności będzie podobna do każdej innej gry / programu, po prostu powiększona nieco ze względu na dodatkowe miejsce na ekranie.
Nic Foster,
6

Możesz łatwo utworzyć cel renderowania o równoważnym rozmiarze w celu przetestowania wydajności. Będziesz musiał przeskalować go w dół lub powiększyć podczas kopiowania do bufora tylnego, aż dostaniesz prawdziwy sprzęt.

Adam
źródło