Se me ha encomendado la tarea de crear una demostración de "pantalla completa" en tiempo real para ejecutar en una matriz de 5x2 de televisores LED de más de 60 pulgadas: o, en otras palabras, una pantalla de 20 megapíxeles.
Tenemos una máquina construida que puede ejecutar un solo escritorio Win7 distribuido en las pantallas a resolución completa, y algunas tarjetas de video bastante decentes.
Mi pregunta es: aparte de la cantidad ridícula de trabajo que van a hacer mis sombreadores de píxeles, ¿hay alguna otra limitación de DX10. * Que entraría en juego aquí que no lo haría en una ventana gráfica de tamaño más sensato? No tendré acceso al hardware hasta la próxima semana, pero me gustaría tener algo escrito para entonces que pueda usar para comparar el sistema.
Actualizar
Si bien logré hacer que esto funcione en una sola máquina con un montón de tarjetas AMD EyeFinity (6 salidas), para que todo funcione sin problemas, la forma "más fácil" resultó ser crear una ventana DX por pantalla, ya que tiene una ventana de visualización causó algunos problemas de rendimiento: también lo hice funcionar bastante bien al distribuir la tarea en un grupo de máquinas, cada una de las cuales maneja dos pantallas.
Fue sorprendentemente fácil. Para mi aplicación XNA de prueba, agregué un GameComponent que captura algún estado del juego (posición / orientación de la cámara, etc.) y UDP lo envía a través de la subred local por cuadro.
Ese componente tiene un Mode
interruptor (enviar o recibir). Si está en Receive
modo, captura datagramas UDP y actualiza el estado del juego con la información del remitente. Send
el modo solo envía paquetes de estado y, a través de un servicio / demonio, hace que los nodos inicien o detengan la aplicación cliente. Cualquier cliente puede actuar como un "maestro", y cambiar un cliente a Send
modo solicita que todos los demás nodos se conecten Receive
. Es bastante entretenido ver lo que sucede cuando las personas luchan por el control.
Otro beneficio interesante: creé una aplicación de consola que procesa una serie de definiciones de estado de fotogramas clave (ubicación, hora, etc.) interpola según sea necesario y las envía usando el mismo código que se usa en el motor del juego. Esto me permite mover fácilmente el script, enviar transformaciones desde un navegador web, etc.
En general, se necesitaron unas 50 líneas de código para mantener sincronizadas varias copias de la aplicación. Parte de la complejidad adicional provino de desactivar la posición de la cámara para cada máquina y corregir algunas molestias de perspectiva / proyección, pero la mayor parte se redujo a un archivo de configuración por nodo.
fuente
Respuestas:
Me preocuparía tanto la configuración del hardware como el software. No tiene que ejecutar cada televisor con su resolución nativa, y el tamaño de la pantalla es diferente de la resolución. Sin embargo, supondré que los televisores de 60 "son cada uno de 1920x1080, por lo que la resolución nativa en todos ellos es 9600x2160 si se refería a 5 filas x 2 columnas de televisores, o 3840x5400 si se refería a 5 columnas x 2 filas.
La nueva tarjeta AMD Radeon, una 7970, admite una resolución de hasta 4096x2160 por pantalla, con un máximo de dos pantallas, si está utilizando DisplayPort 1.2 para transferir video. Por lo tanto, puede acercarse a la resolución nativa, sin embargo, no funcionará con hasta 5 televisores de esa manera.
El AMD Radeon 6870 Eyefinity 6 admite hasta 6 salidas a la vez, pero solo con una resolución máxima de 5760x2160. También es compatible con una configuración Crossfire que ayudará un poco a su rendimiento. Tenga en cuenta que las GPU adicionales no producirán una resolución máxima mayor.
A falta de una configuración de pantalla completamente personalizada, o algo para dividir su señal de video en más monitores / TV, no estoy seguro de cómo podrá ejecutar en 10 pantallas a la vez. Pero si tiene esa capacidad, lo que está buscando es la configuración de gráficos más rápida que admita una resolución más cercana a su resolución nativa. Una vez que tenga eso, su mejor opción es mantener sus sombreadores de píxeles lo más baratos posible y evitar el sobregiro, lo que significa calcular píxeles individuales más de una vez. La eliminación del frustum y la oclusión, y la clasificación por profundidad ayudarán en gran medida a reducir el sobregiro. En cuanto a un límite dentro de DX10, no estoy seguro de uno que limite la resolución, estoy seguro de que hay uno, pero probablemente sea mayor que cualquier tarjeta DX10 que exista.
fuente
Puede crear fácilmente un objetivo de representación de tamaño equivalente para probar el rendimiento. Tendrá que reducirlo o acercarlo al copiarlo en el búfer posterior hasta obtener el hardware real.
fuente