Codificação para uma matriz de exibição muito, muito alta resolução


17

Fui encarregado de criar uma demonstração em "tela cheia" em tempo real para rodar em uma matriz de 5x2 de TVs LED com mais de 60 polegadas: ou, em outras palavras, uma tela de 20 megapixels.

Nós construímos uma máquina que pode executar uma única área de trabalho Win7 distribuída pelos monitores em resolução máxima e algumas placas de vídeo bastante decentes.

Minha pergunta é: além da quantidade ridícula de trabalho que meus pixel shaders farão, existem outras limitações do DX10. * Que entrariam em jogo aqui que não teriam uma viewport de tamanho mais saudável? Não terei acesso ao hardware até a próxima semana, mas gostaria de ter algo escrito até então que possa ser usado para comparar o sistema.

Atualizar

Embora eu tenha conseguido fazer isso funcionar em uma única máquina com várias placas AMD EyeFinity (6 saídas) - para manter as coisas funcionando sem problemas, a maneira "mais fácil" acabou por ser criar uma janela DX por tela, como mostra uma extensão de janela causou alguns problemas de desempenho - eu também o fiz funcionar muito bem distribuindo a tarefa por um grupo de máquinas, cada uma delas dirigindo dois monitores.

Foi surpreendentemente fácil. Para o meu aplicativo XNA de teste, adicionei um GameComponent que captura algum estado do jogo (posição / orientação da câmera etc.) e o UDP envia spam pela sub-rede local por quadro.

Esse componente possui um Modecomutador (enviar ou receber). Se estiver no Receivemodo, ele captura datagramas UDP e atualiza o estado do jogo com as informações do remetente. SendO modo apenas envia pacotes de estado e, por meio de um serviço / daemon, faz com que os nós iniciem ou parem o aplicativo cliente. Qualquer cliente pode atuar como um "mestre", e a mudança de um cliente para o Sendmodo solicita a entrada de todos os outros nós Receive. É muito divertido ver o que acontece quando as pessoas estão brigando por controle.

Outro benefício interessante: criei um aplicativo de console que processa uma série de definições de estado do quadro-chave - local, horário etc. - interpola conforme necessário e as envia usando o mesmo código usado no mecanismo de jogo. Isso me permite facilmente mover scripts, enviar transformações a partir de um navegador da web etc.

Em suma, foram necessárias cerca de 50 linhas de código para manter várias cópias do aplicativo em execução em sincronia. Alguma complexidade adicional veio da alteração da posição da câmera de cada máquina e da correção de alguns aborrecimentos de perspectiva / projeção, mas a maior parte se resumiu a um arquivo de configuração por nó.


2
Parece um projeto muito divertido.
cifra

1
Sim. Eu quase gargalhei e muah-ha-ha.
3Dave

3
Eu teria feito isso com 10 máquinas baratas como commodity, cada uma preocupada apenas em renderizar seu pequeno pedaço da visão de mundo e conectada em rede para manter a sincronização e o controle de tempo de alguma caixa master. Em vez de uma borda sangrenta, uma configuração de máquina não testada com uma tonelada de risco de P&D seria uma solução enlatada com risco muito baixo. Mas sou apenas eu, YMMV.
Patrick Hughes

É assim que eu teria ido, mas não comprei hardware. = /
3Dave

Na verdade, o aspecto de renderização sincronizada da rede parece incrível. Desafiador, mas já posso saber como fazê-lo. E fornece alguma flexibilidade: não é necessário renderizar múltiplos fluxos de uma caixa, se você deseja dividir a matriz. "Paralelo" é uma das minhas palavras favoritas!
3Dave

Respostas:


5

Eu me preocuparia tanto com a configuração de hardware quanto com o software. Você não precisa executar cada TV em sua resolução nativa e o tamanho da tela é diferente da resolução. Suponho que as TVs de 60 "são 1920x1080, então a resolução nativa em todas elas é 9600x2160 se você quis dizer 5 linhas x 2 colunas de TVs ou 3840x5400 se você quisesse 5 colunas x 2 linhas.

A mais nova placa AMD Radeon, a 7970, suporta uma resolução de até 4096x2160 por tela, no máximo em duas telas, se você estiver usando o DisplayPort 1.2 para transferir vídeo. Portanto, você pode chegar perto da resolução nativa, mas não funcionará com até 5 TVs dessa maneira.

O AMD Radeon 6870 Eyefinity 6 suporta até 6 saídas de uma só vez, mas apenas com uma resolução máxima de 5760x2160. Ele também suporta uma configuração Crossfire que ajudará bastante seu desempenho. Lembre-se de que as GPUs extras não produzirão uma resolução máxima maior.

Com falta de uma configuração de tela completamente personalizada ou algo para dividir seu sinal de vídeo em mais monitores / TV, não tenho certeza de como você poderá executar em 10 telas ao mesmo tempo. Mas se você tiver esse recurso, o que procura é a configuração gráfica mais rápida que suporte uma resolução mais próxima da sua resolução nativa. Uma vez que você tenha essa, sua melhor aposta é manter os shaders de pixel o mais barato possível e evitar o empate, o que significa calcular pixels únicos mais de uma vez. Seleção de frustum e oclusão e classificação de profundidade ajudarão bastante na redução do excesso. Quanto ao limite no DX10, não tenho certeza de um que limite a resolução, tenho certeza de que existe, mas provavelmente é maior do que qualquer placa DX10 existente.


O hardware já executa toda a matriz, com cada exibição individual em 1920x1080. suas 5 colunas por duas linhas. Outro cara conseguiu uma janela OpenGL de alta resolução com um wireframe rotativo em execução. Só queria saber sobre as limitações de DX que podem voltar e me morder mais tarde.
3Dave

1
Tanto quanto eu sei, você não será limitado pelo DX10 para a resolução que você está descrevendo. Se você já pode exibir essa configuração, o desempenho será sua única preocupação, e lidar com esse desempenho será como qualquer outro jogo / programa, apenas aumentado um pouco devido ao espaço extra na tela.
Nic Foster

6

Você pode criar facilmente um destino de renderização de tamanho equivalente para testar o desempenho. Você terá que reduzir a escala ou aumentar o zoom ao copiá-lo para o buffer traseiro até obter o hardware real.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.