Кодирование для действительно, действительно высокого разрешения экрана дисплея

17

Мне было поручено создать в режиме реального времени полноэкранную демо-версию для 5x2 массива 60-дюймовых светодиодных телевизоров или, другими словами, 20-мегапиксельного дисплея.

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

Мой вопрос: кроме нелепого объема работы, которую будут выполнять мои пиксельные шейдеры, есть ли какие-то другие ограничения DX10. *, Которые вступят в действие здесь, которых не будет в окне просмотра с более разумным размером? У меня не будет доступа к оборудованию до следующей недели, но я бы хотел, чтобы к тому времени было написано что-то, что я мог бы использовать для тестирования системы.

Обновить

В то время как мне удалось заставить это работать на одной машине с кучей карт AMD EyeFinity (6 выходных) - для обеспечения бесперебойной работы, самым простым способом оказалось создание окна DX для каждого дисплея с отображением диапазона окна. Это вызвало некоторые проблемы с производительностью - я также добился того, чтобы это работало достаточно хорошо, распределив задачу по группе машин, каждая из которых управляет двумя дисплеями.

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

Этот компонент имеет Modeпереключатель (отправить или получить). Если он в Receiveрежиме, он перехватывает UDP-дейтаграммы и обновляет состояние игры информацией от отправителя. Sendmode просто отправляет пакеты состояния и через сервис / демон заставляет узлы запускать или останавливать клиентское приложение. Любой клиент может выступать в роли «мастера», и переключение клиента в Sendрежим запрашивает все другие узлы для переключения Receive. Довольно интересно посмотреть, что происходит, когда люди борются за контроль.

Еще одно полезное преимущество: я создал консольное приложение, которое обрабатывает серию определений состояний ключевых кадров - местоположение, время и т. Д. - интерполирует по мере необходимости и отправляет их с использованием того же кода, который используется в игровом движке. Это позволяет мне легко записывать движения, отправлять преобразования из веб-браузера и т. Д.

В целом, для поддержания синхронизации нескольких копий приложения потребовалось около 50 строк кода. Некоторая дополнительная сложность возникла из-за настройки положения камеры для каждой машины и исправления некоторых неудобств перспективы / проекции, но большая часть этого сводилась к файлу конфигурации для каждого узла.

3Dave
источник
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

Вы можете легко создать цель рендеринга эквивалентного размера для проверки производительности. Вам придется уменьшить его или увеличить при копировании в задний буфер, пока вы не получите реальное оборудование.

Адам
источник