Les assemblages Nanite sont un composant clé du système Végétation Nanite. Ils sont conçus pour gérer efficacement le rendu d'une géométrie complexe et reproductible, notamment les branches ou les frondes d'un arbre. Cette fonctionnalité supplémentaire pour les maillages squelettiques et statiques permet la "micro-instanciation" de petites parties très détaillées.
Les assemblages Nanite constituent un élément essentiel du pipeline de rendu du système Végétation Nanite. Sans eux, l'espace disque ou la mémoire tampon seraient insuffisants pour rendre ces vastes forêts, comme celle présentée dans la démonstration technique de l'Unreal Fest The Witcher 4.
Dans la scène ci-dessus de la démonstration, l'espace disque du plus grand arbre est passé de 3,5 gigaoctets (Go) à environ 29 mégaoctets (Mo). La mémoire de chargement dynamique d'un seul arbre dans une vue donnée a été réduite (d'environ 36 Mo à 2,7 Mo). Ce type d'économie permet de rendre 500 000 instances de dizaines de variantes d'arbres dans une scène ; chaque arbre y est très détaillé et comporte entre un et dix millions de polygones chacun.
Procédure d'utilisation des assemblages Nanite
Les assemblages Nanite sont un ensemble de maillages de parties servant à créer la végétation Nanite. Il s'agit de maillages très détaillés instanciés sur un seul élément de végétation. Ces instances transforment leur position, leur rotation et leur échelle dans l'espace local de l'assemblage. Vous pouvez combiner ces parties avec un maillage de base non instancié, par exemple un tronc d'arbre, pour créer un élément de végétation complet.
Pour les maillages squelettiques, ces parties peuvent être rattachées à un ou plusieurs os, avec des pondérations individuelles pour gérer la déformation. Il est ainsi possible de créer une végétation animée détaillée qui répond correctement à l'animation squelettique, comme une réaction au vent dynamique.
Au moment de l'exécution, Nanite gère de manière dynamique le niveau de détail (LOD) de l'assemblage. Autrement dit, à proximité de la caméra, les différentes parties d'un assemblage sont rendues sous forme d'instances Nanite, conservant ainsi tous leurs détails géométriques. À mesure que la taille des objets diminue à l'écran, ces parties sont simplifiées : le système de rendu de Nanite réduit intelligemment la complexité jusqu'à ce que la totalité de l'assemblage soit représentée par un cluster unique simplifié. Cette approche garantit des performances optimales.
Assemblages Nanite et instanciation standard
Dans le cas d'une instanciation standard, vous devez tenir compte de divers facteurs, notamment de l'augmentation de l'utilisation de la mémoire et des distances de rendu.
L'instanciation standard implique une augmentation significative de l'utilisation de la mémoire dans les tampons de scène du processeur graphique en raison du nombre d'instances nécessaires pour les vastes forêts de grande taille. Il est par ailleurs nécessaire de rendre ces instances à des distances proches et lointaines, chaque instance visible nécessitant la génération d'au moins un cluster racine. L'instanciation de milliers de branches sur des milliers d'arbres impliquerait la rastérisation de millions de clusters, même dans les cas les plus simples, afin de conserver un niveau de détail élevé.
Dans ces deux cas, les assemblages Nanite offrent des performances nettement supérieures tout en conservant le réalisme visuel. Les assemblages offrent des instances beaucoup plus allégées, car il s'agit essentiellement d'un vaste ensemble de matrices. En contrepartie, cette optimisation implique que certaines opérations restent impossibles sur les parties d'un assemblage Nanite, alors qu'elles sont réalisables dans un graphique de matériau en utilisant des données propres à chaque instance. Autrement dit, pendant la phase de création, les clusters racines des parties d'assemblage sont combinés pour créer les niveaux de résolution les plus bas de l'assemblage de sorte que, à des distances éloignées, les assemblages sont simplifiés jusqu'à former un seul cluster, ce qui revient à disposer de son propre niveau de détail hiérarchique (HLOD) interne.
À des distances encore plus lointaines, ces niveaux simplifiés d'instances de parties individuelles sont fusionnés, leur géométrie étant traitée comme faisant partie du maillage de base (les parties perdent toute identité en tant qu'instance). Pour cette raison, les données par instance ne sont pas exposées dans les graphiques de matériau pour les parties d'assemblage.
Exemple de maillage squelettique d'assemblage Nanite
L'exemple ci-dessous montre que les triangles du maillage de base de l'arbre Assemblage squelettique (le tronc et les grosses branches) sont stockés dans la ressource proprement dite, ainsi que les références à ses maillages de parties d'assemblage (les brindilles attachées aux branches). Ces brindilles sont simplement d'autres ressources de maillage squelettique de petite taille qui se trouvent dans le dossier de contenu.
Pour les assemblages de maillage squelettique, chaque instance de partie est liée à un ou plusieurs os du squelette du maillage de base, de façon à ce que son pivot soit animé avec le maillage de base.
À ce stade, les vertex des parties de l'assemblage squelettique ne sont pas surfacés ; ils s'animent donc de manière rigide dans leur pose de liaison.
Créer des assemblages Nanite
L'Unreal Engine inclut des plug-ins expérimentaux qui permettent de créer des assemblages Nanite en les important ou en les créant dans l'éditeur. Ces plug-ins sont les suivants :
| Nom du plug-in | Description | |
|---|---|---|
Nanite Assembly Editor Utilities | Ce plug-in permet de créer un assemblage Nanite à partir d'un blueprint. Il expose la fonctionnalité dans le blueprint de l'éditeur afin de créer des assemblages squelettiques et statiques. | |
Procedural Content Generation Framework (PCG) Nanite Assemblies Interop | Ce plug-in permet de générer un assemblage Nanite à partir d'un graphique PCG pour les assemblages Nanite de maillage statique. | |
Procedural Vegetation Editor | Ce plug-in est un éditeur graphique qui permet de créer une végétation compatible Nanite de haute qualité directement dans l'éditeur. Il applique certains principes botaniques réels qui reproduisent les modèles de croissance naturelle en les adaptant à différents types de végétation. | |
USD Importer | Vous pouvez importer des assemblages Nanite directement depuis un fichier USD. Les schémas pour la création d'assemblages sont inclus dans le plug-in USD Core. |
Importer des assemblages Nanite avec USD
Vous pouvez importer des assemblages Nanite dans l'Unreal Engine à partir d'un fichier USD en utilisant le plug-in USD Importer. Les schémas pertinents pour la création d'assemblages sont inclus dans le plug-in USD Core. Ceux-ci incluent NaniteAssemblyRootAPI, NaniteAssemblyExternalRefAPI et NaniteAssemblySkelBindingAPI.
Pour en savoir plus sur l'utilisation de ces schémas, consultez la documentation fournie avec le code source.
Utiliser le plug-in Nanite Assembly Editor Utilities pour la création dans l'éditeur
Dans l'éditeur, vous pouvez créer des assemblages à l'aide du plug-in Nanite Assembly Editor Utilities. Ce plug-in expose UNaniteAssemblyStaticMeshBuilder et UNaniteAssemblySkeletalMeshBuilder dans Blueprint, ce qui permet de créer des assemblages à partir de ressources existantes.
Ce plug-in comprend également des actions scriptées dans l'éditeur de niveau pour :
Créer un assemblage de maillage statique à partir d'une sélection de maillages statiques dans l'éditeur de niveau.
Créer un assemblage de maillage squelettique à partir d'un acteur de maillage squelettique et de tous les composants de maillage squelettique qui lui sont liés.
Utiliser le plug-in Procedural Vegetation Editor pour la création dans l'éditeur
Procedural Vegetation Editor (PVE) est un puissant outil basé sur un graphique intégré à l'Unreal Engine et au framework Génération procédurale de contenu (PCG). Il permet aux utilisateurs de créer des ressources de végétation compatibles Nanite de haute qualité directement depuis l'éditeur. PVE fait appel à des principes botaniques réels en simulant la génération des plantes en fonction de la distribution des hormones et des réponses adaptatives.
Pour en savoir plus sur cet outil et son utilisation, consultez la page Outil Procedural Vegetation Editor.
Limites connues
Voici quelques limitations actuelles à connaître :
Vous ne pouvez pas créer d'assemblages d'autres assemblages. Actuellement, le système ne prend en charge qu'une seule couche d'instanciation.
La géométrie n'est pas dupliquée entre les assemblages qui font référence aux mêmes maillages de partie. Chaque assemblage stocke sa propre copie des données de partie.
Pour les maillages squelettiques, vous ne pouvez pas poser de parties individuelles, car elles ne seront rendues que dans leur pose de liaison.
Dans de futures mises à jour, nous ajouterons la prise en charge de l'instanciation d'animation pour des parties individuelles.