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 Mode
comutador (enviar ou receber). Se estiver no Receive
modo, ele captura datagramas UDP e atualiza o estado do jogo com as informações do remetente. Send
O 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 Send
modo 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ó.
fonte
Respostas:
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.
fonte
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.
fonte