Unreal Engine 5, sorti en avril 2022, a déjà révolutionné de nombreux processus dans le monde de la 3D.
Le tout grâce à ses évolutions clés : Lumen pour la Global Illumination temps réel, Chaos pour la physique et enfin la principale, Nanite, pour les performances. Dans cet article nous nous intéresserons à la véritable révolution dans la manière d’appréhender les calculs de géométrie apportés par Nanite.
Quels sont les avantages de Nanite ?
Les avancées de Nanite en termes de calcul vont accroître l’optimisation pour la géométrie et diminuer celle des textures, dans le monde de la 3D et plus spécifiquement pour les infographistes 3D. En ce sens, Nanite brise les frontières en rendant le graphisme plus accessible et repousse les limites en transformant la qualité du rendu visuel tout en améliorant la fluidité et l’efficacité.
En d’autres termes, auparavant, nous étions habitués à faire des rendus laids pour gagner en efficacité, maintenant nous pouvons allier la qualité de rendu et l’efficacité grâce aux optimisations de Nanite.
Comment Nanite a révolutionné la puissance des rendus visuels ?
Nanite se concentre sur le maillage ; c’est ce que les nouvelles technologies de rendu ont optimisé le plus et au détriment de l’optimisation des formes et du nombre de polygones. Le nombre de polygones est de moins en moins important dans le monde de la 3D en général, et maintenant avec Unreal Engine 5, il est devenu un détail relégué au second plan, tandis qu’auparavant il constituait un défi majeur.
L’un des principaux tour-de-force est que de Nanite affiche uniquement le niveau exact de détails nécessaires à une résolution optimale en fonction du display pour obtenir un rendu magnifique, ni plus, ni moins.
Nanite ne montre que l’essentiel ! Et pour y parvenir, l’idée a été de transformer la manière d’appréhender les LODs (Level of Detail).
Clustering : Nanite atteint un niveau de performance inégalé
Epic Games s’est basé sur les recherches faites par Nvidia il y a quelques années et portant sur les techniques de clustering de mesh pour développer une nouvelle approche d’optimisation des calculs.
En effet, plutôt que de baser les calculs sur les mesh en eux-mêmes, les calculs se basent sur le découpage des mesh en zones (clusters) pour mieux appréhender la géométrie et la forme de l’objet et ainsi faire un calcul approprié en fonction du besoin d’affichage à un instant T. Chaque élément est découpé en clusters qui sont eux-mêmes divisés en sous-clusters (128 maximum), en fonction de la complexité de la forme. De plus, Nanite prend en compte le nombre de pixels de l’écran pour calculer la complexité qu’il doit afficher pour obtenir la meilleure qualité de rendu.
On pourrait considérer que c’est une approche en LOD à la différence majeure qu’elle n’est pas fournis par un infographiste lors de la conception d’un jeu mais automatiquement généré en fonction de la complexité topologique des clusters de la géométrie.
La complexité d’une scène n’est alors plus basée sur la géométrie ou sur les mesh mais sur la topologie des objets. Ainsi, la géométrie et les meshs sortent de l’équation et deviennent mineurs dans le calcul.
Affichage et DMA : pré-calcul et affichage instantané des données
Bien entendu, le clustering implique un nombre considérable de calculs et de transfert de données au runtime et cela pousse le besoin de performance machine pour les exécuter.
Pour apporter une solution à ce problème, Unreal Engine utilise la technologie DMA poussée par Microsoft puis Sony. Le Direct Memory Access est un système qui permet au GPU d’avoir un accès direct à la mémoire en s’affranchissant du passage par le CPU et donc d’accélérer les calculs.
Par conséquent, Nanite pré-calcule toutes les informations sur les clusters et les stocke dans la mémoire. Par la suite, le GPU va directement venir les chercher pour afficher instantanément les bons clusters au bon moment, plus rapidement que jamais.
Avec l’application de ces nouvelles méthodes de fonctionnement , on considère que le défi majeur pour Epic Games n’est plus le nombre de polygones mais la superposition de maillages et la densité de la géométrie que le moteur pourra rendre en conservant un affichage avec Frame Rate par seconde important.
Pour entrer dans le détail, et avoir une explication technique bien plus approfondie, nous vous recommandons la lecture de cet article.
Avec la puissance de Nanite, quels sont les changements pour SkyReal et ses clients ?
Les clients de SkyReal ont un réel intérêt pour le nombre d’éléments au sein d’un même modèle. En effet, le secteur industriel est très gourmand en nombre de pièces et de détails de chacune d’elles. Dernièrement, avec UE4, Epic Games conseille une limite de 10.000 objets et 200 millions de triangles dans un modèle lorsque les modèles de nos clients peuvent atteindre plus de 300.000 objets et 800 millions de triangles. La différence est importante si SkyReal veut offrir une bonne expérience d’utilisation.
Ainsi, notre principal défi est de trouver comment gagner en performance pour pouvoir se permettre de charger les modèles extrêmement volumineux de nos clients sans dégrader l’affichage. Différentes approches sont possibles pour répondre à cette problématique mais SkyReal a décidé de commencer par accélérer l’import et la conversion de données 3D. En effet, les équipes SkyReal travaillent depuis maintenant plus d’un an sur une plateforme que nous appelons XR Center et qui va changer en profondeur la manière dont va, entre autres, transformer les données CAO.
Afin d’augmenter les performances liées au processus de pré-calcul Nanite, XR Center a évolué vers une multi-machine de préparation de données que nous pourrions appeler une « prep farm » (ou plus exactement une render farm dédiée à la préparation). Nous allons donc démultiplier la puissance de calcul en faisant travailler plusieurs machines sur les mêmes données puis les ré-assembler ensuite ; ça rappelle le clustering dont il était question plus haut 🤔
Grâce à Unreal Engine 5, SkyReal peut intégrer le rendu temps réel au moment de l’exécution avec un affichage par pixel et l’intégration du DMA directement dans son système.
Enfin, dans le meilleur des mondes, la solution la plus évidente serait de réduire le nombre de pièces. Cependant, pour accomplir ce prodige, il faudrait pouvoir multi-instancier les éléments, ce qui, aujourd’hui, est très complexe à implémenter dans Unreal.
Peut-être une évolution prévue sur la roadmap de Unreal Engine ?
Et si vous voulez aller encore plus loin sur Nanite, voici tout ce que vous devriez savoir sur Unreal Engine 5.