Ce guide fournit des instructions pour configurer SMPTE 2110 à l'aide de NVIDIA Rivermax afin de fonctionner avec nDisplay, en particulier lorsque vous travaillez avec des effets visuels intégrés à la caméra (ICVFX) et un mur LED.
Chargement dynamique de la caméra ICVFX nDisplay
L'intégration du partage multimédia et du rendu hors écran vous permet de tirer parti des sources multimédias et des sorties SMPTE 2110 afin d'optimiser les performances de vos clusters. Vous pouvez déplacer le rendu de chaque caméra ICVFX vers sa propre machine, puis utiliser les fonctionnalités de multidiffusion SMPTE 2110 pour transmettre les flux de ces caméras aux autres nœuds qui en dépendent.
Autrement dit, vous pouvez consacrer des nœuds de rendu au rendu des caméras, ce qui offre généralement une meilleure évolutivité que le rendu de tous les frustums intérieurs sur l'ensemble des nœuds de rendu. Avec cette configuration, vous ne modifiez pas la façon dont l'UE envoie les pixels au mur. Une carte de synchronisation est toujours utilisée par les nœuds compositeurs pour envoyer leur sortie de manière synchrone. Cependant, les nœuds de rendu dédiés au rendu des frustums intérieurs n'ont pas besoin de carte de synchronisation. De plus, dans cette configuration, la synchronisation PTP n'est pas utilisée pour le flux SMPTE 2110 partagé entre les instances de l'UE.
Voici un exemple de configuration d'un cluster à trois nœuds et deux caméras ICVFX. Cet exemple part d'une configuration de phase existante pour illustrer le processus de conversion permettant de tirer parti de ces nouveaux ajouts.
Configuration des nœuds
Dans le navigateur de contenu, recherchez votre configuration nDisplay, puis ouvrez-la. Cet exemple est nommé NDC_MyStage :
Cette configuration comporte trois nœuds qui pilotent le mur, chacun d'eux rendant un ensemble de hublots. Ces éléments ne seront pas modifiés.
Nœud Hublots Node_1
VP_W1
Node_2
VP_W2
Node_3
VP_C1 VP_C2
Elle comporte aussi deux caméras ICVFX. Pour chacune d'elles, cliquez sur + Ajouter, puis sélectionnez Ajouter un nouveau nœud de cluster pour créer un nœud qui vous permettra de rendre cette caméra.
Pour chaque nœud :
Attribuez-lui un nom qui identifie la caméra dont effectuer le rendu.
Désactivez l'option Ajuster la position des nœuds du cluster pour éviter tout chevauchement.
Désactivez l'option Ajouter un hublot au nouveau nœud de cluster.
Définissez l'adresse IP hôte de votre choix.
Activez le paramètre Rendu sans interface.
Configurez les cartes graphiques si votre système en possède plusieurs.
Une fois la configuration terminée, votre boîte de dialogue Ajouter un nouveau nœud de cluster doit être similaire à celle de l'image suivante.
Une fois les nœuds créés, votre cluster doit être similaire à celui de l'image suivante :
Configuration multimédia – Sortie A de caméra ICVFX
Après avoir configuré les nœuds dédiés au rendu des frustums de la caméra, passez à la configuration du partage multimédia.
Dans l'organiseur de scène, sélectionnez ICVFXCameraA.
Dans le panneau Détails, recherchez la section Multimédia :
Cochez la case Activer.
Ajoutez un groupe de sortie multimédia. Ici, vous configurez le nœud qui va rendre le frustum intérieur et son mode de partage.
Le nœud sur lequel vous souhaitez rendre cette caméra est Node_CamA pour ICVFXCameraA. Si vous souhaitez configurer ICVFXCameraB, sélectionnez plutôt Node_CamB.
Configurez le type de sortie multimédia sur Sortie Nvidia Rivermax pour le partager à l'aide de ST 2110. Certains paramètres sont importants :
Définissez Mode d'alignement sur Création d'images, ce qui signifie que votre sortie commencera à charger dynamiquement le frustum rendu dès qu'il sera disponible, en respectant toujours l'intervalle de trame configuré pour le flux.
Réglez le mode Verrouillage de cadre sur Bloquer à la réservation, pour vous assurer de partager toutes les images rendues.
Activez DoFrameCounterTimestamp. Cela permet d'intégrer le numéro d'image d'Unreal Engine dans le flux vidéo, qui sera utilisé par les nœuds récepteurs pour déterminer à quelle image correspondent les échantillons.
Il n'est pas nécessaire d'activer l'option Résolution, car l'UE détecte automatiquement de taille du frustum une fois qu'il est capturé.
L'option Fréquence d'images est importante. À l'instar de la norme SDI, la norme 2110 transfère une image vidéo sur l'intervalle de trame complet. Si vous configurez votre flux vidéo 2110 à 24 ips, chaque image prendra 41 ms pour être entièrement reçue par les utilisateurs. Afin de réduire au minimum la latence, et en fonction de la bande passante disponible de votre carte réseau, configurez votre fréquence d'images pour qu'elle soit supérieure à celle présentée par votre cluster. Par conséquent, pour un cluster qui fonctionne à 24 ips, vous devez charger dynamiquement le frustum intérieur plus rapidement. Il est préférable d'utiliser une fréquence d'images de 48, 60 ou supérieure, mais vous devez tenir compte de l'utilisation de la bande passante.
Pour l'adresse d'interface, utilisez des caractères génériques afin de rendre la configuration aussi flexible que possible et de permettre son fonctionnement sur différentes machines avec différentes adresses IP.
Pour l'option Adresse de chargement dynamique, choisissez une adresse de multidiffusion unique afin d'éviter que deux frustums intérieurs ne soient chargés sur la même adresse. Si cela se produit, les récepteurs ne pourront pas les distinguer. Dans cet exemple, CameraA utilise l'adresse 225.1.1.10 et CameraB utilise l'adresse 225.1.1.11.
L'option Synchronisation de capture n'est pas nécessaire ici, car ce flux n'est pas envoyé vers le mur.
Votre configuration de sortie doit être similaire à celle de l'image suivante :
Configuration multimédia – Entrée A de la caméra ICVFX
Maintenant que vous avez configuré la section de sortie du rendu ICVFXCameraA, vous pouvez travailler sur la section de réception. Ici, vous allez configurer les nœuds chargés de recevoir le rendu partagé et son mode de réception.
Tout d'abord, ajoutez un groupe d'entrée multimédia.
Ajoutez des nœuds de cluster pour recevoir cette sortie. Dans ce cas, vous souhaitez disposer de tous les nœuds qui pilotent le mur (Node_1, Node_2, Node_3).
Pour recevoir le rendu partagé à l'aide de ST 2110, définissez le paramètre Source multimédia sur Source multimédia Rivermax. Certaines options doivent être correctement configurées pour que le verrouillage de cadre à faible latence fonctionne.
Pour le mode Joueur, utilisez Verrouillage de cadre pour que les récepteurs attendent une image attendue à chaque rendu. À l'aide du numéro d'image intégré, les instances de réception de l'UE peuvent mettre en correspondance les échantillons vidéo au numéro d'image actuel. Si une image n'est pas encore arrivée, les instances de destination attendent qu'elle arrive.
Vous pouvez faire appel à l'option Utiliser une latence nulle pour que les instances UE réceptrices attendent un numéro d'image correspondant à celui en cours sans latence supplémentaire. Cette opération peut s'avérer impossible selon le contenu. Vous avez donc la possibilité d'ajouter une image de latence pour obtenir une marge supplémentaire en attendant l'image entrante.
Il n'est pas nécessaire d'appliquer la résolution, car elle est détectée automatiquement par les instances de l'UE destinataires lors de la réception du flux.
Définissez la fréquence d'images sur celle utilisée pour la sortie.
Pour l'adresse d'interface, utilisez à nouveau des caractères génériques, car celle-ci sera utilisée par plusieurs nœuds du cluster et ceux-ci n'auront pas la même adresse IP d'interface.
Configurez l'adresse de chargement dynamique et le port correspondant à la configuration de sortie.
Vous pouvez activer l'option GPUDirect, mais assurez-vous que le processeur graphique et le DPU (carte Mellanox) se trouvent sur le même complexe racine. Si ce n'est pas le cas, vous risquez de perdre les 2 110 paquets, notamment en cas de flux d'entrée multiples.
Pour activer le paramètre GPUDirect sur l'entrée, définissez
Rivermax.GPUDirectInput=1au démarrage de l'Unreal Engine ou avant de lancer le flux Rivermax.
Votre configuration d'entrée doit être similaire à celle de l'image suivante :
Votre ICVFXCameraA est désormais configurée pour être partagée entre un nœud de rendu et le cluster. Les paramètres multimédias doivent être similaires à ceux-ci :
Configuration multimédia – Caméra ICVFX B
Une fois la configuration de ICVFXCameraA terminée, vous pouvez configurer ICVFXCameraB qui utilisera principalement les mêmes paramètres, à l'exception des détails suivants :
Groupes de sortie multimédia
Le nœud de cluster qui effectue le rendu de ICVFXCameraB est le nœud Node_CamB.
Le champ Adresse de chargement dynamique doit être différent. Utilisez 225.1.1.11, mais conservez le même numéro de port.
Groupes d'entrée multimédia
L'option Adresse de chargement dynamique est la seule que vous devez modifier pour correspondre à la configuration de sortie, dans cet exemple 225.1.1.11.
Vous pouvez utiliser une fréquence d'images plus élevée pour vos chargements dynamiques 2110 afin de réduire la latence. Étant donné que le coût de cette bande passante est plus élevé, tenez-en compte en fonction de la configuration de votre réseau. Si d'autres appareils utilisent la bande passante sur le même réseau, ceux-ci doivent également être pris en compte.
Exemple d'utilisation de la bande passante :
4k24 RVB10
~6,3 Gb/s
4k48 RGB10
~12,6 Gb/s
8k24 RVB10
~25 Gb/s
8k48 RVB10
~50 Gb/s
Chargement dynamique et sortie synchrone de la caméra ICVFX nDisplay (phase expérimentale)
Prérequis
L'autre zone nDisplay que vous pouvez mettre à jour concerne le mode d'envoi de vos rendus au mur LED. Au lieu d'envoyer des flux depuis le processeur graphique, vous pouvez désormais envoyer des flux ST 2110 directement depuis la carte réseau. En fournissant une référence temporelle PTP commune à chaque nœud, vous pouvez verrouiller les cadres et synchroniser chaque flux sur le mur, sans avoir à utiliser une carte de synchronisation.
Pour ce faire, vous devez disposer des éléments suivants :
Une horloge maîtresse qui génère un PTP.
Un commutateur qui prend en charge les flux ST 2110.
Une carte réseau NVIDIA compatible, par exemple la carte ConnectX-6 BlueField-2.
Le processeur LED doit aussi pouvoir recevoir des flux ST 2110.
Lorsque cette option est sélectionnée, tous vos nœuds sont configurés sans interface ou hors écran. Il n'est plus nécessaire de configurer la mosaïque ou de gérer les paramètres EDID, car vous n'effectuez pas le chargement dynamique à l'aide du processeur graphique. Cependant, la référence temporelle PTP transmise à chaque nœud doit être valide à tout moment.
Pour que cette configuration fonctionne, la section facultative sur la configuration du PTP, mentionnée dans la phase de déploiement, est obligatoire.
Notions de base de la configuration
En ce qui concerne la configuration sous nDisplay, cette fonctionnalité ne modifie pas la manière dont vous configurez le chargement dynamique de la caméra ICVFX. Au lieu de cela, cette fonctionnalité exploite la configuration de sortie multimédia que vous pouvez définir au niveau du nœud pour charger dynamiquement la mémoire tampon finale rendue par un nœud donné. Vous devez également configurer le verrouillage de cadre.
Lors de la configuration de la taille de la fenêtre de chaque nœud, en fonction du processeur LED recevant les flux, il peut exister certaines contraintes. Si le même processeur reçoit deux flux, il peut être nécessaire de donner la même taille à chaque flux. Voici comment appliquer cette contrainte pour l'exemple de cluster décrit précédemment.
Dans cet exemple, vous avez trois nœuds à envoyer : Node_1, Node_2 et Node_3. Dans la mesure où vous n'avez pas de contraintes de résolution, vous pouvez réduire au maximum la fenêtre des nœuds afin d'envoyer le nombre minimal de pixels requis. Dans ce cas, vous allez définir la fenêtre de Node_1 et Node_2 à la même taille en ajoutant une contrainte. Considérez que les deux nœuds utilisent le même processeur LED. Le flux Node_3 n'a pas cette contrainte et n'a pas la même taille de fenêtre.
Configuration des nœuds – Node_1 et Node_2
Commencez par les configurations des nœuds Node_1 et Node_2. Dans la configuration d'origine :
Node_1 a utilisé un nœud plein écran avec une taille de fenêtre de 7 680 x 2 160 et un hublot de 2 640 x 1 408.
Node_2 a utilisé un nœud plein écran avec une taille de fenêtre de 3 840 x 2 160 et un hublot de 3 344 x 1 408.
Étant donné que le hublot VP_W2 est le plus grand, définissez les paramètres pour Node_1 et Node_2 de manière identique, et utilisez la taille de VP_W2, soit 3 344 x 1 408.
Activez le paramètre Rendu sans interface pour configurer les deux nœuds hors écran, puis désactivez le paramètre Plein écran.
Cette modification a ajouté des pixels supplémentaires au flux de Node_1 afin de correspondre aux dimensions du flux de Node_2. Lorsque les hublots ne sont pas tous identiques, il est important de réfléchir à leur organisation nœud par nœud afin de minimiser le gaspillage de la bande passante.
Configurez maintenant la sortie multimédia de chaque nœud. Les éléments multimédias peuvent être configurés au niveau du nœud (mémoire tampon finale) et au niveau du hublot. Il est important d'effectuer cette configuration sur le nœud afin d'envoyer le résultat final composé et déformé.
Sélectionnez Node_1 et recherchez sa section Multimédia :
Activez la configuration des éléments multimédias :
Renseignez le champ Sortie multimédia :
Définissez le champ Sortie multimédia sur Sortie NVIDIA Rivermax et configurez les paramètres en conséquence :
Mode d'alignement : AlignmentPoint. Vous devez aligner votre sortie avec Genlock à l'aide de la référence temporelle PTP. Votre sortie doit donc être envoyée à des points d'alignement connus.
Sortie continue : True. Si une image n'a pas été rendue à temps, votre sortie doit continuer et répéter l'image précédente.
Mode Verrouillage de cadre : Bloquer à la réservation. Vous souhaitez charger dynamiquement toutes les images rendues.
Taille de la file d'attente de présentation : 2. Le double tampon est idéal pour minimiser la latence.
Nombre de tampons de texture : 3. Il n'y a pas d'exigences strictes concernant ce paramètre.
Résolution : option désactivée. Vous n'avez pas besoin d'appliquer de résolution. Si vous ne cochez pas cette case, un flux est créé en utilisant la taille de la mémoire tampon du nœud.
Fréquence d'images : selon le projet. Dans cet exemple, nous utilisons une fréquence d'images de 24 ips, mais votre projet utilise peut-être un paramètre différent.
Format de pixel : RGB10. Ce format peut varier selon le projet et le récepteur (processeur LED) doit prendre ce format en charge.
Adresse d'interface : 10.69.70. Dans cet exemple, tous les nœuds se trouvent dans le sous-réseau 10.69.70. afin de faciliter le changement de machine chargée du rendu de chaque nœud. L'utilisation d'un caractère générique sur le dernier octet signifie que le nœud sélectionné est capable de se résoudre sur son adresse d'interface locale.
Adresse de chargement dynamique : Adresse de chargement dynamique unique du Node_1. Pour cet exemple, utilisez 225.1.2.1 et incrémentez le dernier octet pour chaque nœud afin d'obtenir une adresse de multidiffusion unique par nœud. Assurez-vous que le groupe de multidiffusion spécifié ici n'est pas déjà utilisé sur votre réseau pour éviter les collisions.
Port : 50000. Dans cet exemple, la valeur est de 50000 pour tous les nœuds et seule l'adresse de multidiffusion change.
Utiliser GPUDirect : FALSE. Ce paramètre n'est actuellement pas pris en charge pour la sortie ST 2110 à verrouillage de cadre.
Configurez la section Synchronisation de capture pour utiliser Rivermax (PTP). Cela permet de mettre en place un mécanisme de verrouillage de cadre à l'échelle du cluster en utilisant une barrière de synchronisation Ethernet qui fait appel à une référence temporelle PTP commune à l'ensemble du cluster.
Marge (ms) : 5. Utilisez la valeur par défaut. Il s'agit d'une marge temporelle référencée lorsque le nœud est sur le point d'entrer dans la barrière de synchronisation de capture, juste avant de mettre une image en file d'attente pour son affichage. Si ce paramètre détecte que le nœud est trop proche du point d'alignement suivant (en raison de la marge), son entrée dans la barrière est retardée.
Expiration de barrière (ms) : 3 000. Utilisez la valeur par défaut. Il s'agit du délai d'expiration avant de quitter la barrière lorsque tous les nœuds ne se sont pas connectés avant la fin du délai.
La configuration de Node_1 est terminée et ses paramètres doivent être similaires à ceux-ci :
Maintenant que la configuration de Node_1 est terminée, procédez à la configuration de Node_2. Sa configuration doit être identique à celle de Node_1, à l'exception du paramètre Adresse de chargement dynamique, qui doit être unique.
Configurez les paramètres de Node_2 pour qu'ils soient identiques à ceux de Node_1.
Définissez le champ Adresse de chargement dynamique de Node_2 sur 225.1.2.2.
La configuration finale de Node_2 est la suivante :
Configuration de nœud – Node_3
Passez à la configuration de Node_3. Dans l'exemple d'origine décrit ci-dessus, nous avons détecté un écart entre les deux hublots.
Afin de réduire l'espace perdu, vous pouvez configurer les hublots de manière à éliminer l'écart.
Ensuite, comme vous l'avez fait pour Node_1 et Node_2, configurez ce nœud pour qu'il fonctionne sans interface graphique et définissez la taille de sa fenêtre au minimum requis pour contenir les deux hublots.
Au lieu d'utiliser 7 680 x 2 160, définissez le champ Taille de fenêtre sur 6 336 x 1 408.
Activez le paramètre Rendu sans interface.
Ensuite, configurez la sortie multimédia de Node_3. Les paramètres sont les mêmes que pour Node_1 et Node_2, à l'exception de l'adresse de chargement dynamique, qui doit être unique dans le cluster.
Configurez les paramètres de Node_3 pour qu'ils soient identiques à ceux de Node_1 et de Node_2.
Définissez le champ Adresse de chargement dynamique de Node_3 sur 225.1.2.3.
Une fois cette configuration terminée, votre cluster utilise désormais 5 groupes de multidiffusion :
225.1.1.10:50000 : ICVFXCameraA
225.1.1.11:50000 : ICVFXCameraB
225.1.2.1:50000 : Node_1
225.1.2.2:50000 : Node_2
225.1.2.3:50000 : Node_3
La configuration finale de Node_3 est la suivante :