Мне было поручено создать в режиме реального времени полноэкранную демо-версию для 5x2 массива 60-дюймовых светодиодных телевизоров или, другими словами, 20-мегапиксельного дисплея.
У нас есть машина, которая может работать с одним рабочим столом Win7, распределенным по дисплеям в полном разрешении, и несколько довольно приличных видеокарт.
Мой вопрос: кроме нелепого объема работы, которую будут выполнять мои пиксельные шейдеры, есть ли какие-то другие ограничения DX10. *, Которые вступят в действие здесь, которых не будет в окне просмотра с более разумным размером? У меня не будет доступа к оборудованию до следующей недели, но я бы хотел, чтобы к тому времени было написано что-то, что я мог бы использовать для тестирования системы.
Обновить
В то время как мне удалось заставить это работать на одной машине с кучей карт AMD EyeFinity (6 выходных) - для обеспечения бесперебойной работы, самым простым способом оказалось создание окна DX для каждого дисплея с отображением диапазона окна. Это вызвало некоторые проблемы с производительностью - я также добился того, чтобы это работало достаточно хорошо, распределив задачу по группе машин, каждая из которых управляет двумя дисплеями.
Это было удивительно легко. Для моего тестового приложения XNA я добавил GameComponent, который фиксирует некоторое игровое состояние (положение / ориентация камеры и т. Д.) И UDP-спамит его через локальную подсеть на кадр.
Этот компонент имеет Mode
переключатель (отправить или получить). Если он в Receive
режиме, он перехватывает UDP-дейтаграммы и обновляет состояние игры информацией от отправителя. Send
mode просто отправляет пакеты состояния и через сервис / демон заставляет узлы запускать или останавливать клиентское приложение. Любой клиент может выступать в роли «мастера», и переключение клиента в Send
режим запрашивает все другие узлы для переключения Receive
. Довольно интересно посмотреть, что происходит, когда люди борются за контроль.
Еще одно полезное преимущество: я создал консольное приложение, которое обрабатывает серию определений состояний ключевых кадров - местоположение, время и т. Д. - интерполирует по мере необходимости и отправляет их с использованием того же кода, который используется в игровом движке. Это позволяет мне легко записывать движения, отправлять преобразования из веб-браузера и т. Д.
В целом, для поддержания синхронизации нескольких копий приложения потребовалось около 50 строк кода. Некоторая дополнительная сложность возникла из-за настройки положения камеры для каждой машины и исправления некоторых неудобств перспективы / проекции, но большая часть этого сводилась к файлу конфигурации для каждого узла.
источник
Ответы:
Я бы так же беспокоился о конфигурации оборудования, как и программное обеспечение. Вам не нужно запускать каждый телевизор с его собственным разрешением, а размер экрана отличается от разрешения. Я предполагаю, что 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.
источник
Вы можете легко создать цель рендеринга эквивалентного размера для проверки производительности. Вам придется уменьшить его или увеличить при копировании в задний буфер, пока вы не получите реальное оборудование.
источник