Codage pour une matrice d'affichage vraiment à très haute résolution


17

J'ai été chargé de créer une démo "plein écran" en temps réel à exécuter sur une gamme 5x2 de téléviseurs LED 60+ pouces: ou, en d'autres termes, un écran de 20 mégapixels.

Nous avons construit une machine qui peut exécuter un seul bureau Win7 réparti sur les écrans en pleine résolution, et quelques cartes vidéo assez décentes.

Ma question est: à part la quantité ridicule de travail que mes pixel shaders vont faire, y a-t-il d'autres limitations de DX10. * Qui entreraient en jeu ici qui ne le seraient pas sur une fenêtre plus saine? Je n'aurai pas accès au matériel avant la semaine prochaine, mais j'aimerais avoir écrit quelque chose d'ici là que je puisse utiliser pour comparer le système.

Mise à jour

Bien qu'Imanaged ait réussi à le faire fonctionner sur une seule machine avec un tas de cartes AMD EyeFinity (6 sorties) - pour que les choses fonctionnent bien, la manière la plus "simple" s'est avérée être de créer une fenêtre DX par écran comme ayant une fenêtre s'étalant causé des problèmes de performances - je l'ai également fait fonctionner assez bien en répartissant la tâche sur un groupe de machines, chacune pilotant deux écrans.

C'était étonnamment facile. Pour mon application XNA de test, j'ai ajouté un GameComponent qui capture certains états de jeu (position / orientation de la caméra, etc.) et les spams UDP sur le sous-réseau local par image.

Ce composant possède un Modecommutateur (envoyer ou recevoir). S'il est en Receivemode, il attrape les datagrammes UDP et met à jour l'état du jeu avec les informations de l'expéditeur. Sendle mode envoie simplement des paquets d'état et, via un service / démon, oblige les nœuds à démarrer ou arrêter l'application cliente. Tout client peut agir en tant que «maître» et le basculement d'un client en Sendmode demande à tous les autres nœuds de basculer Receive. C'est assez amusant de voir ce qui se passe quand les gens se disputent le contrôle.

Un autre avantage intéressant: j'ai créé une application console qui traite une série de définitions d'état des images clés - emplacement, heure, etc. - interpole selon les besoins et les envoie en utilisant le même code que celui utilisé dans le moteur de jeu. Cela me permet de déplacer facilement des scripts, de soumettre des transformations à partir d'un navigateur Web, etc.

Dans l'ensemble, il a fallu environ 50 lignes de code pour que plusieurs copies de l'application soient synchronisées. Une certaine complexité supplémentaire provenait du décalage de la position de la caméra pour chaque machine et de la correction de certains désagréments de perspective / projection, mais la plupart de ces problèmes se résumaient à un fichier de configuration par nœud.


2
Cela ressemble à un projet vraiment amusant.
Cypher

1
Oui. J'ai presque gloussé et muah-ha-ha'd.
3Dave

3
Je l'aurais fait avec 10 machines bon marché en tant que produits de saleté, chacune ne se souciant que de rendre son petit morceau de la vue du monde et en réseau pour maintenir la synchronisation et le contrôle de l'heure à partir d'une boîte principale. Au lieu d'une configuration de machine à la pointe du progrès, avec une tonne de risques en R&D, ce serait une solution en conserve à très faible risque. C'est juste moi, cependant, YMMV.
Patrick Hughes

C'est comme ça que j'aurais fait, mais je n'ai pas acheté de matériel. = /
3Dave

En fait, le réseau, l'aspect de rendu synchronisé semble génial. Difficile, mais je sais déjà comment le faire. Et offre une certaine flexibilité: il n'est pas nécessaire de rendre plusieurs flux à partir d'une seule boîte si vous souhaitez diviser le tableau. "Parallèle" est l'un de mes mots préférés!
3Dave

Réponses:


5

Je m'inquiéterais autant de la configuration matérielle que du logiciel. Vous n'avez pas besoin d'exécuter chaque téléviseur à sa résolution native, et la taille de l'écran est différente de la résolution. Je suppose que les téléviseurs de 60 pouces sont chacun de 1920 x 1080, donc la résolution native sur chacun d'eux est soit 9600x2160 si vous vouliez dire 5 lignes x 2 colonnes de téléviseurs, soit 3840x5400 si vous vouliez dire 5 colonnes x 2 lignes.

La toute dernière carte AMD Radeon, une 7970, prend en charge une résolution pouvant atteindre 4096 x 2160 par écran, avec un maximum de deux écrans, si vous utilisez DisplayPort 1.2 pour transférer des vidéos. Cela peut donc vous rapprocher de la résolution native, mais cela ne fonctionnera pas avec jusqu'à 5 téléviseurs de cette façon.

L'AMD Radeon 6870 Eyefinity 6 prend en charge jusqu'à 6 sorties à la fois, mais uniquement sur une résolution maximale de 5760x2160. Il prend également en charge une configuration Crossfire qui améliorera considérablement vos performances. Gardez à l'esprit que les GPU supplémentaires ne donneront pas une résolution maximale supérieure.

À moins d'une configuration d'affichage entièrement personnalisée ou de quelque chose pour diviser votre signal vidéo sur plus de moniteurs / TV, je ne sais pas comment vous pourrez exécuter sur 10 écrans à la fois. Mais si vous avez cette capacité, alors ce que vous recherchez est la configuration graphique la plus rapide qui prend en charge une résolution la plus proche de votre résolution native. Une fois que vous avez cela, votre meilleur pari est simplement de garder vos pixel shaders aussi bon marché que possible et d'éviter le surmenage, ce qui signifie calculer plusieurs pixels à la fois. L'abattage du tronc et de l'occlusion, et le tri en profondeur aideront grandement à réduire le surmenage. En ce qui concerne une limite au sein de DX10, je ne suis pas sûr de celui qui limite la résolution, je suis sûr qu'il y en a un, mais il est probablement supérieur à n'importe quelle carte DX10 qui existe.


Le matériel exécute déjà l'intégralité de la baie, avec chaque affichage individuel à 1920x1080. ses 5 colonnes par deux rangées. Un autre gars a eu une fenêtre OpenGL en pleine résolution avec un filaire tournant tournant. Je me demande simplement quelles limitations DX pourraient revenir et me mordre plus tard.
3Dave

1
Pour autant que je sache, vous ne serez pas limité par DX10 pour une résolution comme vous le décrivez. Si vous êtes déjà en mesure d'afficher sur cette configuration, les performances seront votre seule préoccupation, et la gestion de ces performances sera comme n'importe quel autre jeu / programme, juste à grande échelle en raison de l'espace d'écran supplémentaire.
Nic Foster

6

Vous pouvez facilement créer une cible de rendu de taille équivalente pour tester les performances. Vous devrez le réduire ou zoomer lors de la copie dans le tampon arrière jusqu'à ce que vous obteniez le vrai matériel.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.