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 Mode
commutateur (envoyer ou recevoir). S'il est en Receive
mode, il attrape les datagrammes UDP et met à jour l'état du jeu avec les informations de l'expéditeur. Send
le 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 Send
mode 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.
la source
Réponses:
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.
la source
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.
la source