Кодування дійсно, дуже-дуже високої роздільної здатності дисплея


17

Мені було доручено створити демонстрацію "повного екрану" в режимі реального часу для роботи на 5x2 масиві 60+-дюймових світлодіодних телевізорів: або, іншими словами, 20-мегапіксельним дисплеєм.

У нас створена машина, яка може запускати один робочий стіл Win7, розповсюджений на дисплеї з повною роздільною здатністю, і кілька досить пристойних відеокарт.

Моє запитання: окрім смішного обсягу роботи, який збираються робити мої піксельні шейдери, чи існують якісь інші обмеження DX10. У мене не буде доступу до обладнання до наступного тижня, але я хотів би, щоб до цього часу було написано щось, що я можу використовувати для порівняння системи.

Оновлення

Хоча Imanaged для того, щоб це працювало на одній машині з купою карт AMD EyeFinity (6 вихідних) - щоб все працювало безперебійно, "найпростішим" способом виявилося створення DX-вікна на дисплей, як відображення діапазону вікон викликав деякі проблеми з продуктивністю - я також змусив його працювати досить добре, розподіливши завдання по групі машин, кожна з яких працює на двох дисплеях.

Це було напрочуд легко. Для мого тестового додатка XNA я додав GameComponent, який фіксує певний ігровий стан (положення / орієнтація камери тощо) та UDP-передає його по локальній підмережі за кадром.

Цей компонент має Modeкомутатор (надсилати або отримувати). Якщо він перебуває в Receiveрежимі, він збирає дейтаграми UDP та оновлює стан гри інформацією від відправника. Sendрежим просто надсилає пакети стану і через службу / демон демонструє запуск або зупинку вузлів клієнтської програми. Будь-який клієнт може діяти як "головний", а перемикання клієнта в Sendрежим вимагає переключення всіх інших вузлів Receive. Дуже цікаво бачити, що відбувається, коли люди борються за контроль.

Ще одна акуратна перевага: я створив консольний додаток, який обробляє низку визначень стану ключових кадрів - місцеположення, час і т. Д. - інтерполює за потребою та надсилає їх, використовуючи той самий код, який використовується в ігровому двигуні. Це дозволяє мені легко рухатись сценаріями, надсилати перетворення з веб-браузера тощо.

Загалом знадобилося близько 50 рядків коду, щоб синхронізувати кілька копій програми. Деяка додаткова складність полягала в тому, що не встановлюється положення камери для кожної машини та виправляється певна роздратованість / перспектива проекції, але більшість з них зводиться до файлу конфігурації на вузол.


2
Це звучить як дійсно веселий проект.
Cypher

1
Так. Я ледь не какав і муа-ха-ха.
3Dave

3
Я зробив би це за допомогою 10 дешевих, як брудових товарних машин, кожен з яких турбувався лише про те, щоб зробити це маленьким шматочком світогляду та з’єднати в мережу, щоб підтримувати синхронізацію часу та контроль з якогось головного поля. Замість кровотоку, неперевіреної конфігурації машини з тоною ризику НДДКР це було б консервоване рішення з дуже низьким ризиком. Це тільки я, правда, YMMV.
Патрік Х'юз

Так би я пішов, але я не купував обладнання. = /
3Dave

Насправді мережевий, синхронізований аспект візуалізації звучить приголомшливо. Проблемно, але я вже можу зробити, як це зробити. І надає певну гнучкість: не потрібно відображати кілька потоків з одного поля, якщо ви хочете розділити масив. "Паралель" - одне з моїх улюблених слів!
3Dave

Відповіді:


5

Я б хвилювався так само за конфігурацію обладнання, як і програмне забезпечення. Вам не доведеться запускати кожен телевізор із початковою роздільною здатністю, а розмір екрана відрізняється від роздільної здатності. Я припускаю, що телевізори на 60 "є кожним 1920x1080, тому нативна роздільна здатність для всіх - або 9600x2160, якщо ви мали на увазі 5 рядків x 2 стовпці телевізорів, або 3840x5400, якщо ви мали на увазі 5 стовпців x 2 рядки.

Найновіша карта AMD Radeon, 7970, підтримує роздільну здатність до 4096x2160 на дисплей, максимум на двох дисплеях, якщо ви використовуєте DisplayPort 1.2 для передачі відео. Таким чином, ви можете наблизитись до нашої роздільної здатності, однак це не буде працювати з до 5 телевізорів таким чином.

AMD Radeon 6870 Eyefinity 6 підтримує до 6 виходів одночасно, але лише з максимальною роздільною здатністю 5760x2160. Він також підтримує конфігурацію Crossfire, яка трохи допоможе вашій роботі. Майте на увазі, що додаткові графічні процесори не дадуть більшої максимальної роздільної здатності.

Окрім повністю настроюваного налаштування дисплея або чогось, щоб розділити ваш відеосигнал на більше моніторів / телевізора, я не впевнений, як ви зможете працювати відразу на 10 дисплеях. Але якщо у вас є ці можливості, то те, що ви шукаєте, - це найшвидша настройка графіки, яка підтримує роздільну здатність, найближчу до вашої рідної роздільної здатності. Коли ви переконаєтесь, що найкраща ставка - це просто зберегти ваші піксельні шейдери якомога дешевше і уникати перевитрати, що означає обчислювати один піксель не один раз. Відсікання фрустуму та оклюзії та сортування глибин допоможуть значно зменшити перевитрату. Що стосується обмеження в межах DX10, я не впевнений у тому, що обмежує роздільну здатність, я впевнений, що він є, але він, мабуть, більший, ніж будь-яка карта DX10, яка існує.


Апаратне забезпечення вже працює з усім масивом, кожен окремий дисплей у 1920x1080. його 5 стовпчиків на два ряди. Інший хлопець отримав вікно OpenGL з повною роздільною здатністю з обертовим каркасом. Просто цікаво про будь-які обмеження DX, які можуть повернутися і кусати мене пізніше.
3Dave

1
Наскільки я знаю, ви не обмежуватиметесь DX10 такою ж роздільною здатністю, як ви описуєте. Якщо ви вже зможете відобразити цю програму, продуктивність буде вашою єдиною турботою, а обробка цієї продуктивності буде подібно до будь-якої іншої гри / програми, просто збільшена за рахунок додаткового простору на екрані.
Нік Фостер

6

Ви можете легко створити ціль візуалізації еквівалентного розміру, щоб перевірити продуктивність. Вам доведеться зменшити масштаб або збільшити масштаб, коли копіюєте його в задній буфер, поки не отримаєте справжнє обладнання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.