Nanite est le système de géométrie virtualisée de l'Unreal Engine qui utilise un nouveau format de maillage interne et une nouvelle technologie de rendu pour restituer des détails à l'échelle du pixel et un nombre élevé d'objets. Il ne travaille intelligemment que sur les détails qui peuvent être perçus et pas plus. Le format de données de Nanite est également très compressé et prend en charge le chargement dynamique à grain fin avec un niveau de détail automatique.
Avantages de Nanite
Augmentation de plusieurs ordres de magnitude dans la complexité de la géométrie, nombre de triangles et d'objets plus élevé que ce qui était possible auparavant en temps réel
Les budgets d'image ne sont plus limités par l'utilisation de polygones, d'appels à générer et de mémoire de maillage
Il est désormais possible d'importer directement des images sources de qualité cinématographique, telles que des sculptures ZBrush et des numérisations de photogrammétrie
Utilisez des détails à nombre élevé de polygones au lieu de précalculer des détails dans des textures de normales
Le niveau de détail (LOD) est géré automatiquement et ne nécessite plus de configuration manuelle pour les LOD de maillage individuel
La perte de qualité est rare, voire inexistante, en particulier avec les transitions de LOD
Bien que les avantages puissent changer la donne, des limites pratiques subsistent. Par exemple, le nombre d'instances, les triangles par maillage, la complexité des matériaux, la résolution de sortie et les performances doivent être soigneusement mesurés pour toute combinaison de contenu et de matériau. Nanite continuera à développer ses capacités et à améliorer ses performances dans les futures versions de l'Unreal Engine.
Différences entre un maillage Nanite et un maillage statique
Un maillage Nanite est un maillage statique sur lequel Nanite est activé. Un maillage Nanite est toujours essentiellement un maillage triangulaire à la base, avec un niveau de détail et de compression élevé appliqué à ses données. Nanite utilise en outre un système entièrement nouveau et efficace de restitution de ce format de données.
Tout ce qui est nécessaire pour qu'un maillage statique puisse profiter de Nanite est un drapeau pour l'activer. La création de contenu pour Nanite n'est pas différente de celle des maillages traditionnels, à l'exception du fait que Nanite peut gérer des ordres de grandeur plus importants de triangles et d'instances que ce qui est possible pour la géométrie rendue de manière traditionnelle. Approchez la caméra suffisamment pour que Nanite génère les triangles sources importés.
Les maillages Nanite prennent en charge plusieurs UV et couleurs de vertex. Les matériaux sont affectés à des sections du maillage de sorte que ces matériaux puissent utiliser différents modèles d'ombrage et des effets dynamiques qui peuvent être réalisés dans les nuanceurs. Il est possible d'échanger dynamiquement l'assignation des matériaux, comme pour tout autre maillage statique, et Nanite ne nécessite aucun processus de précalcul des matériaux.
Nanite n'impose pas l'utilisation de textures virtuelles, mais elles sont fortement recommandées. Les textures virtuelles sont une fonctionnalité orthogonale de l'Unreal Engine dont les objectifs de données de texture sont identiques à ceux des données de maillage Nanite.
Le travail avec Nanite devrait être familier aux flux de travail pour les maillages statiques, mais il y a beaucoup de choses qui ne sont pas encore prises en charge. Consultez la section Fonctionnalités prises en charge de cette page pour plus d’informations.
Fonctionnement de Nanite
Nanite s'intègre aussi harmonieusement que possible dans les flux de travail des moteurs existants, tout en utilisant une nouvelle approche pour le stockage et le rendu des données de maillage.
Pendant l'importation, les maillages sont analysés et décomposés en clusters hiérarchiques de groupes de triangles.
Pendant le rendu : les clusters sont échangés à la volée à différents niveaux de détail en fonction de la vue de la caméra et se connectent parfaitement sans fissures aux clusters voisins au sein du même objet. Les données sont transmises à la demande, de sorte que seuls les détails visibles doivent être conservés en mémoire. Nanite fonctionne dans sa propre passe de rendu qui contourne complètement les appels de dessin traditionnels. Les modes de visualisation peuvent être utilisés pour inspecter le pipeline Nanite.
Étant donné que Nanite repose sur la capacité de diffuser rapidement des données de maillage sur disque à la demande. Les disques statiques à semi-conducteurs (SSD) sont recommandés pour le stockage en cours d'exécution.
Pour quels types de maillage faut-il utiliser Nanite ?
Nanite doit généralement être activé dans la mesure du possible. Tout maillage statique pour lequel cette option est activée s'affiche généralement plus rapidement et occupe moins de mémoire et d'espace disque.
Un maillage est notamment un bon candidat pour Nanite si :
Ceux contenant de nombreux triangles ou des triangles qui seront très petits à l'écran
Ceux dont la scène contient plusieurs instances
Ceux qui jouent le rôle occlusif principal pour d’autres géométries Nanite
Ceux qui projettent des ombres à l'aide de textures d'ombre virtuelles
Un exemple d'exception à ces règles est une sphère de ciel : ses triangles seront grands à l'écran, elle n'occulte rien et il n'y en a qu'une seule dans la scène. Ces exceptions sont rares, et la perte de performances due à l'utilisation de Nanite est assez minime. Il est donc recommandé de ne pas trop s'inquiéter des endroits où ne pas activer Nanite si Nanite prend en charge le cas d'utilisation.
Certains cas d'utilisation ne sont pas pris en charge par Nanite actuellement. Consultez la section Fonctionnalités prises en charge de cette page pour plus d’informations.
Activer la prise en charge de Nanite sur les maillages
Voici les moments auxquels activer Nanite sur les géométries prises en charge et les méthodes pour y procéder :
La conversion de la géométrie en Nanite nécessite un certain temps de traitement pour chaque maillage. Sur les grands projets, l'utilisation d'un cache de données dérivées (DDC) partagé est particulièrement utile s'il y a beaucoup de ressources Nanite. Veuillez consulter la documentation du CDD partagé pour plus d’informations.
Importer un maillage
Lors de l’importation d’un maillage destiné à être utilisé avec Nanite, cochez la case Générer Nanite.
Si vous n'utilisez pas d'éclairage précalculé avec Lightmass, nous vous recommandons de désactiver la propriété Générer des Générer des UV de texture de lumière.
Lorsque cette option est activée, une géométrie très détaillée ajoute un temps significatif à l'importation et à la création des données de maillage statique. La propriété ajoute également un canal UV supplémentaire, qui comprend une quantité importante de données pour les maillages très denses. Si votre projet ne nécessite pas d'éclairage précalculé, il n'est pas nécessaire d'occasionner ce coût.
Activer Nanite sur des ressources
Si votre projet contient déjà du contenu pour lequel vous souhaitez activer Nanite, deux possibilités s'offrent à vous : activer les ressources par groupes à l'aide du navigateur de contenu ou activer séparément les ressources via leurs éditeurs.
Activer Nanite sur des groupes des maillages
Utilisez le navigateur de contenu pour sélectionner les lots de ressources de maillage squelettique ou statique pour lesquels vous souhaitez activer Nanite. Faites un clic droit et sélectionnez Nanite > Activer dans le menu contextuel.
Activer Nanite sur des maillages distincts
Ouvrez l'éditeur de tout maillage prenant en charge Nanite, comme les maillages statiques et les collections de géométrie (maillages de fracture reposant sur la physique Chaos) et activez Nanite via le panneau Détails.
Dans l’éditeur de maillage statique, localisez les paramètres Nanite et cochez la case Activer la prise en charge de Nanite.
Dans l'éditeur de collections de géométrie, localisez la section Nanite et cochez la case Activer Nanite.
Fonctionnalités de Nanite prises en charge
Cette section décrit la meilleure façon de travailler avec Nanite dans un projet Unreal Engine et précise ce qui est et n'est pas pris en charge, ainsi que les limitations possibles.
Géométrie
Nanite peut être activé sur des maillages statiques et des collections de géométries.
Les types de composants suivants sont utilisables avec les maillages sur lesquels Nanite est activé :
maillages statiques
maillages squelettiques
Maillage statique instancié
Spline de maillage
Maillage statique instancié hiérarchique
Collection de géométries
Outil de peintre de végétation
herbe du paysage
Nanite n'offre qu'une prise en charge limitée de la déformation des maillages rigides. Nanite prend en charge la translation, la rotation et le changement d'échelle non uniforme dynamiques de ces maillages, qu'ils soient dynamiques ou statiques. Cela implique de déplacer toute position d'un maillage Nanite de manière plus complexe que ce qui peut être exprimé par une seule multiplication matricielle 4x3 appliquée uniformément à tout le maillage.
La déformation est limitée par :
(Bêta) Décalage de position dans le monde (WPO) dans les matériaux.
les maillages Nanite qui utilisent le déplacement WPO sont divisés en plus petits clusters. Ces clusters ont chacun leurs propres limites et sont escamotés séparément sur le GPU. Limitez le WPO de manière à gérer le nombre de clusters escamotés dans le maillage Nanite.
La végétation utilisant le WPO est moins problématique, car elle contient de nombreux trous et ne peut pas vraiment s'occlure.
La déformation n'est pas prise en charge pour :
les cibles de morphose.
Le nombre maximal d'instances pouvant être présentes dans la scène est verrouillé à 16 millions d'instances, ce qui inclut toutes les instances diffusées en continu, et pas seulement celles activées pour être utilisées avec Nanite. Seules les instances diffusées en continu sont comptabilisées dans le total.
Les tangentes par vertex ne sont pas stockées à partir du maillage statique lorsqu'il est activé pour Nanite. Au lieu de cela, l'espace tangent est implicitement dérivé dans le nuanceur de pixel. Les données tangentes ne sont pas stockées afin de réduire la taille des données. Cette différence dans l'espace tangent en utilisant cette approche pourrait causer des discontinuités sur les bords. Ce problème ne s'est toutefois pas révélé significatif, et il est prévu de prendre en charge les tangentes de vertex dans une prochaine version.
Materials
Nanite prend en charge les matériaux dont le mode de fusion est défini sur Opaque et Masqué. Lorsqu'un type de matériau non pris en charge est détecté, un matériau par défaut est assigné au maillage compatible avec Nanite, et un avertissement donnant des précisions sur l'incident est consigné dans le journal de sortie.
Notes sur les fonctionnalités de matériau supplémentaires :
Les maillages compatibles avec Nanite peuvent recevoir des décalques projetées sur leurs surfaces, mais ils ne prennent pas en charge les décalques de maillage, qui nécessitent que les matériaux utilisent le mode de fusion Translucide.
La case à cocher Fils de fer n'est pas prise en charge.
Le nœud Vertex Interpolator et les UV personnalisés sont pris en charge, mais ils seront évalués trois fois par pixel.
Les nœuds d'expression Custom ou tous les nœuds qui les utilisent (comme la fonction de matériau
ParallaxOcclusionMapping) peuvent donner lieu à des artefacts avec Nanite. Cela est tout à fait normal dans la mesure où Nanite ne prend pas encore en charge les dérivées analytiques.
Rendu
Les fonctionnalités de rendu suivantes ne sont pas prises en charge actuellement :
Filtrage des objets en fonction de la vue utilisant :
Rayon d'écran minimal
Culling de distance
Rendu direct
Rendu stéréo pour la réalité virtuelle
Écran partagé
Anticrénelage multi-échantillons (MSAA)
Canaux d'éclairage
Ray tracing sur des maillages Nanite
Le maillage de rechange est utilisé pour les maillages compatibles avec Nanite par défaut. Diminuez la valeur du paramètre Erreur relative du maillage de rechange dans l’éditeur de maillage statique pour utiliser davantage de triangles du maillage source.
(Expérimental) La prise en charge initiale du ray-tracing natif des maillages Nanite est activée avec la variable de console
r.RayTracing.Nanite.Mode 1. Cela permet de conserver tous les détails tout en utilisant beaucoup moins de mémoire GPU que les maillages de rechange à erreur zéro.
Certains modes de visualisation ne prennent pas encore en charge l'affichage des maillages Nanite.
Soyez prudent avec certains modes de visualisation dans l'Éditeur de maillage statique lorsque vous visualisez une géométrie très détaillée. L'affichage des normales et des UV peut causer des problèmes de performances d'éditeur.
Supported Platforms
Nanite est actuellement pris en charge sur les consoles PlayStation 5, Xbox Series S|X et sur les PC équipés de cartes graphiques répondant à ces spécifications et utilisant les derniers pilotes DirectX 12 avec Shader Model 6 (SM6) :
NVIDIA : cartes de génération Maxwell ou plus récentes
AMD : cartes de génération GCN ou plus récentes
Toutes les nouvelles versions de Windows 10 (ultérieures à la version 1909.1350) et de Windows 11 prenant en charge le SDK DirectX 12 Agility sont prises en charge.
Windows 10 version 1909 : le numéro de révision doit être supérieur ou égal à 0,1350.
Windows 10 version 2004 et 20H2 : le numéro de révision doit être supérieur ou égal à 0,789.
DirectX 12 avec Shader Model 6.6 atomics, ou Vulkan (VK_KHR_shader_atomic_int64)
Apple Silicon M2 ou plus récente.
Linux avec une NVIDIA GeForce 2080 ou ultérieure.
Pilotes de carte graphique à jour
La PlayStation 4 et la Xbox One prennent également en charge Nanite, mais la prise en charge sur ces plateformes est actuellement considéré comme expérimental. Il n'est pas certain que les performances de Nanite sur ces plateformes avec un contenu de très haute fidélité répondent aux exigences d'un jeu livrable.
Pour plus d'informations sur les configurations matérielles et logicielles recommandées par Epic Games, consultez la rubrique Configurations matérielles et logicielles.
Maillage de rechange Nanite et paramètres de précision
Les maillages statiques et squelettiques intègrent des propriétés supplémentaires qui contrôlent la précision de la représentation Nanite et du maillage de rechange généré à partir du maillage à niveau de détail complet.
Ces paramètres se trouvent dans le panneau Détails de l'éditeur de maillage, dans la section Paramètres Nanite.
Parmi les paramètres Nanite figurent les propriétés suivantes :
| Propriété | Description |
|---|---|
Activer la prise en charge de Nanite | Cette option permet d’utiliser ce maillage avec Nanite et de générer un maillage de rechange dans les situations où Nanite ne peut être utilisé. |
Conserver la surface | Cette option permet aux maillages Nanite qui perdraient de la surface en raison de la simplification de redistribuer cette perte aux triangles restants en dilatant les arêtes de délimitation ouvertes. Cela est très utile pour la végétation dont les feuilles ont tendance à devenir des triangles et des quadrilatères que la simplification sépare. L'effet de ce paramètre est de mettre chaque feuille à l'échelle. Pour les rubans de géométrie, comme les brins d'herbe, il a pour effet de les épaissir. Ce paramètre est à activer uniquement sur tous les maillages de végétation. |
Tangentes explicites | Lorsque cette option est activée, les tangentes du modèle d'origine sont stockées et utilisées par ressource. Ce paramètre signifie que les tangentes sont stockées explicitement sur le disque au lieu d'être dérivées implicitement à l'exécution. Le paramètre Précision de tangente devient disponible pour un contrôle supplémentaire des tangentes de vertex. L'activation de ce paramètre augmente la capacité de stockage d'environ 10%, mais peut être préférable lorsque les tangentes implicites ne sont pas assez précises. |
UV de lerp | Interpoler les UV lors de la simplification. Cette option doit être activée dans la mesure du possible. Pour les coordonnées UV réelles, cela permet de calculer les UV optimaux les moins erronés pour les nouveaux vertex lors de la simplification, en supposant que les UV sont utilisés comme coordonnées de texture normale et qu'ils interpolent les faces des triangles. Cette option doit être désactivée si les données stockées dans les UV ne sont pas valides pour l'interpolation, par exemple, si les index sont stockés dans les UV. Appliquer un lerp sur un index n'est pas pertinent et pourrait perturber le shader qui tente de l'utiliser. Si cette option est désactivée, les erreurs provenant des UV ne sont plus prises en compte lorsque Nanite choisit le LOD de rendu, car il n'est en général pas possible de réfléchir aux erreurs dues aux attributs de vertex arbitraires non interpolables. |
Précision de la position | Choisissez la précision que ce maillage doit utiliser lors de la génération des positions des vertex d'un maillage Nanite. Auto détermine la précision appropriée en fonction de la taille du maillage. La précision peut être remplacée pour améliorer la précision ou optimiser l'empreinte sur le disque. |
Précision normale | Choisissez la précision que ce maillage doit utiliser lors de la génération des normales de vertex d'un maillage Nanite. Auto détermine la précision appropriée en fonction de la taille du maillage. La précision peut être remplacée pour améliorer la précision ou optimiser l'empreinte sur le disque. |
Résidence minimale (géométrie racine) | Cette option définit la taille en octets que ce maillage doit toujours garder en mémoire, le reste étant chargé de manière dynamique. Plus la valeur est élevée, plus la mémoire nécessaire est importante, mais pour certains maillages, cela peut limiter l'apparition de problèmes de rattachement (pop-in) du chargement dynamique. |
Conserver le pourcentage de triangles | Le pourcentage de triangles du maillage source à conserver. Réduisez ce pourcentage pour optimiser la taille sur le disque. |
Erreur relative d'ajustement | Cette option définit la quantité maximale d'erreur relative dont la suppression est autorisée pour le maillage Nanite. Tous les détails du maillage source dont l'impact visuel est inférieur à cette valeur d'erreur relative sont supprimés. L'erreur relative n'a pas d'unité de taille propre et dépend de la taille du maillage. Par défaut, Nanite stocke tous les triangles du maillage source d'origine. |
Cible de repli | Déterminer le système de ciblage à utiliser lors de la génération d'un maillage de rechange. Auto : créer automatiquement un maillage de rechange en fonction des paramètres du projet. Pourcentage de triangles du maillage de rechange : Définir le pourcentage de triangles conservés lors de la réduction du maillage source pour Nanite. Erreur relative du maillage de rechange : Réduire jusqu'à ce que l'erreur spécifiée soit atteinte en fonction de la taille du maillage. Tous les détails du maillage de rechange généré dont l'impact visuel est inférieur à cette valeur d'erreur relative sont supprimés. |
Nom du fichier d'importation source | Le chemin d’accès au fichier utilisé pour importer un maillage haute résolution à utiliser avec Nanite. La version haute résolution du maillage est utilisée à la place de LOD0 par les systèmes qui peuvent bénéficier d'une géométrie plus détaillée, comme Nanite et la modélisation de géométrie dans l'Unreal Engine. |
Canal UV de déplacement | Canal UV à utiliser lors de l'échantillonnage des mappages de déplacement. |
Mappages de déplacement | Ajouter et modifier des mappages de déplacement. |
Facteur de longueur d'arête maximale | Contrôler la distance maximale autorisée entre chaque vertex du maillage à l'écran. Utilisable pour éviter une simplification excessive des maillages destinés à être déformés (p. ex., une animation utilisant le décalage de position dans le monde et les maillages de spline). La valeur par défaut de 0 doit être conservée, sauf s'il est explicitement nécessaire de résoudre des problèmes de simplification excessive. |
Précision des vertex
Nanite quantifie les positions des sommets du maillage afin de maximiser la densité de la mémoire et de minimiser l'empreinte sur le disque. La taille de l'étape de quantification est une puissance de deux qui peut être sélectionnée pour répondre aux exigences des maillages individuels à l'aide de la propriété Précision de la position. Par défaut, Auto choisit la précision appropriée en fonction de la taille du maillage et de sa densité en triangles. Un remplacement manuel est possible en sélectionnant une taille de précision pour améliorer la précision ou optimiser l'empreinte sur le disque.
La quantinisation est une forme de compression avec perte. La compression avec perte est particulièrement difficile lorsqu'on travaille avec des morceaux de maillages modulaires ou d'autres maillages qui ont des bords partagés. surtout lorsque ces limites doivent être parfaitement alignées pour ne pas introduire de trous ou de fissures dans la géométrie.
Pour assurer la cohérence, la quantification se fait dans des coordonnées d'objet non normalisées centrées autour de l'origine du maillage. Cela permet de s'assurer que la quantification ne provoque jamais de fissures lorsque le maillage utilise le même paramètre de précision, et que la translation entre le centre du maillage est un multiple de cette précision.
Ajustement des données
Il arrive que vous deviez réduire la quantité de données stockées par Nanite pour optimiser la taille du disque. Nanite comprend des paramètres qui vous permettent d'ajuster les données de détail d'un maillage Nanite stocké à tout moment pendant la production, ce qui signifie que vous pouvez en toute sécurité adopter une qualité excessive au départ et l'ajuster en conséquence par la suite.
Pour réduire les données de détail, nous vous conseillons d'utiliser les propriétés Conserver le pourcentage de triangles et Erreur relative d'ajustement. Vous pouvez les considérer comme une option de préallègement avant le stockage sous forme de maillage Nanite. Dans le cas de Nanite, il n'est pas nécessaire que les détails soient uniformes sur l'ensemble du maillage. Les données de moindre importance sont supprimées, ce qui s'apparente davantage à une compression avec perte.
Utilisez Conserver le pourcentage de triangles pour définir le pourcentage de triangles du maillage source à conserver.
Utilisez Erreur relative d'ajustement pour définir la quantité maximale d'erreur relative autorisée lors de l'ajustement des données du maillage source. Tout triangle dont la suppression entraînerait une erreur relative inférieure à ce montant est supprimé. Ou encore, tous les détails dont l'impact visuel est inférieur à cette valeur sont rognés. L'erreur relative n'a pas d'unité de taille propre et dépend de la taille du maillage.
Les valeurs par défaut de ces deux propriétés sont telles que rien n'est ajusté par défaut, et Nanite stocke tous les triangles du maillage source d'origine.
Le découpage des données est important pour réduire la taille du disque (en d'autres termes, la taille du téléchargement), mais pas pour améliorer les performances. Voir la section Taille des données ci-dessous pour en savoir plus sur ce sujet.
Maillage de rechange
De nombreuses parties d'Unreal Engine ont besoin d'accéder au tampon de vertex traditionnel fourni par les maillages rendus de manière traditionnelle. Lorsque vous activez Nanite pour un Maillage statique, une représentation sommaire (appelée maillage de rechange) du maillage très détaillé est générée. Le maillage de rechange est utilisé lorsque le rendu Nanite n'est pas pris en charge. Il est également utilisé dans des situations où il ne serait pas idéal d'utiliser le maillage ultra-détaillé, comme lorsqu'une collision complexe est nécessaire, l'utilisation de textures de lumière pour l'éclairage précalculé est nécessaire, et pour les reflets par ray tracing matériel avec Lumen.
La propriété Pourcentage de triangles du maillage de rechange représente le pourcentage des triangles du maillage source d'origine qui sont utilisés pour générer le maillage de rechange. Vous pouvez spécifier le pourcentage de triangles à conserver entre 0 et 100 pour cent, les pourcentages élevés permettant de conserver davantage de détails du maillage d'origine.
Le paramètre Erreur relative du maillage de rechange définit la quantité maximale d'erreur relative qui est autorisée lors de la suppression de détails du maillage source. Tous les triangles qui, s'ils étaient retirés, entraîneraient une erreur relative inférieure à cette valeur sont supprimés, les détails ayant un impact visuel moindre étant les premiers à être éliminés. L'erreur relative n'a pas d'unité de taille propre et dépend de la taille du maillage.
Par exemple, si vous voulez exclure tout allègement de votre maillage, vous utiliserez un pourcentage de triangles de rechange de 100 et une erreur relative au maillage de rechange de 0.
Dans la comparaison ci-dessous, on voit le maillage Nanite hautement détaillé créé à partir du maillage source d'origine comparé aux paramètres par défaut d'un maillage de rechange Nanite généré.
Utilisez l'Erreur relative au maillage de rechange pour spécifier la quantité de détails d'origine conservés à partir du maillage source d'origine et le pourcentage de rechange pour définir la quantité utilisée de ces détails.
Dans la comparaison ci-dessous, le maillage de secours conserve 100 % du pourcentage de triangles de secours mais ajuste l'erreur relative de secours pour utiliser davantage de triangles du maillage source original. Lors de l'ajustement de ces valeurs, vous pouvez utiliser les détails Nanite pour les triangles Nanite dans le hublot comme indicateur lors de la modification de leurs valeurs.
Visualisation du maillage de rechange
Dans l'éditeur de maillage statique, vous pouvez basculer entre le maillage Nanite entièrement détaillé et le maillage de rechange Nanite à l’aide de l'option Maillage de rechange Nanite dans le menu déroulant Afficher des hublots. Vous pouvez également utiliser le raccourci clavier Ctrl + N pour basculer rapidement entre les deux options de visualisation.
Utiliser des LOD de maillage de rechange personnalisés pour les maillages compatibles avec Nanite
Le maillage de secours est utilisé pour les fonctionnalités du moteur, telles que les collisions complexes par poly, le ray tracing, l’éclairage prégénéré, etc. Il est également utilisé pour les plateformes qui ne prennent pas en charge Nanite. Lors de la génération du maillage de rechange, un maillage compatible avec Nanite utilise toujours le créneau LOD0 du maillage source pour générer automatiquement le maillage de rechange. Cependant, il est parfois souhaitable d'utiliser un maillage de rechange spécifié manuellement ou une série de LOD habituels, plutôt qu'un maillage généré automatiquement.
Ce niveau de contrôle vous permet d'utiliser Nanite dans un projet, mais aussi de contrôler directement la géométrie des reflets utilisant le ray tracing, ou sur les plateformes qui ne prennent pas en charge Nanite.
Suivez les étapes ci-dessous pour spécifier votre propre maillage de rechange personnalisé ou pour utiliser une série de LOD :
Définissez le Pourcentage de triangles du maillage de rechange sur 0 afin que le maillage de rechange soit aussi petit que possible, car il sera ignoré lors de l'utilisation de cette approche.
Ajoutez un ou plusieurs LOD au maillage à l’aide de cette procédure traditionnelle de configuration des LOD.
Utilisez la liste déroulante Importation de LOD pour Importer des LOD de niveau 1 depuis la section Paramètres de LOD.
Définissez le LOD minimum sur 1 dans la section Paramètres de LOD. Cela permet d'ignorer le maillage de rechange généré par Nanite.
La collision complexe constitue un cas particulier. Utilisez la propriété LOD pour la collision dans Paramètres généraux pour spécifier le LOD à utiliser pour la collision. N'importe quel LOD, y compris le LOD0, peut être utilisé pour la collision.
Il se peut que cette approche particulière ne permette pas de rendre les projets Nanite automatiquement compatibles avec les plateformes qui ne prennent pas en charge Nanite. Elle doit être testée et évaluée pour votre projet.
Nanite gère efficacement un très grand nombre d'instances, mais si Nanite est désactivé, il pourrait y avoir un nombre excessif d'appels à générer pour le pipeline de rendu traditionnel. Vous pouvez tester cela dans votre projet afin d'en connaître la faisabilité en utilisant r.Nanite 0 pour activer ou désactiver la prise en charge de Nanite.
Consultez la section Variables et commandes de console sur cette page pour plus d'informations.
Utiliser du contenu compatible avec Nanite
Dans la plupart des cas, Nanite s'adapte très bien à la résolution de l'écran. Il s'appuie pour cela sur deux techniques : un niveau de détail très fin et l'élimination des occlusions. En général, cela signifie que, quelle que soit la complexité géométrique des données sources dans la scène, le nombre de triangles que Nanite tente de générer à l'écran est cohérent et proportionnel au nombre de pixels.
Nanite suit le principe de conception selon lequel il est inutile de générer beaucoup plus de triangles qu'il n'y a de pixels.
Cependant, il existe des cas de contenu qui ne respectent pas les techniques utilisées par Nanite pour le changement d'échelle, mais cela ne signifie pas qu'elles ne doivent pas être utilisées du tout pour ce contenu ni que le rendu sera plus rapide que dans le pipeline de rendu habituel. Cela signifie seulement que pour ce type de contenu, la mise à l'échelle en pixels - et non la complexité de la scène - ne s'applique plus à eux. Utilisez les fonctionnalités de profilage d’Unreal Engine pour surveiller ces types de situations lorsqu'elles se produisent.
Géométrie agrégée
La géométrie des agrégats est une géométrie qui comporte de nombreuses parties disjointes qui deviennent un volume à distance, comme les cheveux, les feuilles des arbres et l'herbe. Ce type de géométrie brise le niveau de détail et les techniques d'élimination des occlusions de Nanite. Nanite est par nature une structure hiérarchique de niveau de détail qui repose sur la capacité à simplifier les petits triangles en triangles plus grands et à choisir le plus grossier lorsqu'elle détermine que la différence est plus petite que ce qui peut être perçu. Pour les surfaces continues, cela fonctionne bien, mais pas pour les géométries agrégées qui, de loin, ressemblent davantage à un nuage partiellement opaque qu'à une surface pleine. Nanite est donc plus susceptible de déterminer qu'il ne peut pas réduire la géométrie agrégée de manière aussi agressive que les surfaces pleines typiques, ce qui entraîne la génération de triangles plus nombreux pour le même nombre de pixels couverts.
Une autre optimisation qui permet d'agréger les ruptures de géométrie est la Suppression d’occlusion. Bien qu'elle soit très fine, sa granularité n'est pas par pixel. Une géométrie comportant des trous - et pire encore, des couches successives de géométries comportant des trous - entraîne un excès de suraffichage, car de nombreuses couches de profondeur doivent s'accumuler avant que cette zone de l'écran bloque tout ce qui se trouve derrière elle. Une façon d'y penser est de considérer une région de 8x8 pixels à l'écran et le nombre de couches de profondeur qui doivent être générées avant que chaque pixel soit rempli. Un excès de suraffichage signifie que pour le même nombre de pixels couverts, Nanite tente de générer plus de triangles, ce qui ralentit le rendu.
Le feuillage est le cas le plus évident de problèmes avec l'élimination des occlusions, mais même dans ce cas, cela ne signifie pas que Nanite ne devrait pas du tout être utilisé sur des maillages de type feuillage. Référez-vous à la section Utiliser Nanite pour la végétation ci-dessous pour plus d’informations. Il est conseillé d'expérimenter différents cas d'utilisation et de voir ce qui fonctionne bien pour vos projets. Utilisez les outils de profilage pour confirmer les performances de Nanite avec ces types de maillages.
Surfaces étroitement empilées
L'élimination de l'occlusion avec des maillages traditionnels rend les flux de travail de kitbashing presque impossibles à grande échelle en raison de limitations pratiques. La nature fine de l'élimination des occlusions avec Nanite permet d'utiliser ces types de flux de travail pendant le développement avec moins d'inquiétude. Comme l'explique la section Géométrie des agrégats ci-dessus, le surdimensionnement peut provenir du fait que les surfaces cachées sont très proches des surfaces visibles situées en dessous d'elles. Si une géométrie est enfouie bien en dessous de la surface visible, Nanite la détecte et l'élimine à peu de frais, de sorte qu'elle peut être considérée comme gratuite. Cependant, lorsqu'une géométrie empilée est proche de la surface la plus élevée, Nanite n'est pas en mesure de déterminer laquelle se trouve en haut ou en bas, ce qui fait que les deux sont générées simultanément.
Ce problème de culling particulier est le pire des scénarios, dans lequel Nanite ne sait pas quelle surface se trouve au-dessus de l'autre, et se contente donc de générer toutes les couches. Le degré d'imprécision varie selon la taille de l'écran et la distance. 10 centimètres entre des couches peuvent donc sembler satisfaisants à proximité de la surface, mais de plus loin, la différence de distance peut être inférieure à un pixel, ce qui entraîne un suraffichage.
Dans l'exemple ci-dessous, si la caméra est déplacée pour observer la zone où se tient le personnage, la visualisation du suraffichage Nanite montre comment ces surfaces empilées sont rendues. Les zones plus claires indiquent que le suraffichage s'aggrave dans ces zones plus que dans les autres.
La visualisation des superpositions est le moyen le plus efficace de trouver des problèmes de superpositions. Bien qu'il faille s'attendre à un certain degré de suraffichage, un excès entraîne une augmentation des coûts de culling et de rastérisation de Nanite, et le changement d'échelle de Nanite devient moins efficace par la même occasion, indépendamment de la complexité de la scène.
Normales à facettes et à arêtes dures
Un problème auquel il faut faire attention est l'importation de maillages très détaillés qui ont des normales à facettes, ce qui signifie que la normale entre deux polygones différents n'a pas été lissée. Ce problème est courant et facile à ignorer et il faut faire attention à éviter ce problème particulier car un faible partage des sommets dans un maillage peut devenir considérablement plus coûteux à la fois en termes de performance de rendu et de taille des données. Idéalement, le nombre de sommets d'un maillage devrait être inférieur au nombre de triangles qu'il comporte. Si le rapport est de 2:1 ou plus, il y a probablement un problème, surtout si cela se traduit par un nombre élevé de triangles. Un rapport de 3:1 signifie que le maillage est entièrement à facettes, chaque triangle ayant ses propres trois sommets, dont aucun n'est partagé avec un autre triangle. Le plus souvent, cela est dû au fait que les normales ne sont pas les mêmes parce qu'elles ne sont pas lissées.
Dans cette optique, plus de sommets signifie plus de données à stocker. Cela signifie aussi plus de travail de transformation de vertex, et les rapports supérieurs à 2:1 entraînent des lenteurs dans le rendu. L'utilisation intentionnelle dans le modelage de surfaces dures ne devrait pas poser de problèmes, et il n'y a aucune raison de ne pas les utiliser. Cependant, les maillages accidentels très denses à 100% de facettes sont beaucoup plus coûteux que prévu. Une autre chose à laquelle prêter attention est l'importation de normales sur des surfaces denses de type organique générées dans d'autres paquets CCN dont les seuils de normales durs peuvent être raisonnables sur des maillages à plus faible quantité de polygones, mais qui peuvent être à l'origine de dépenses inutiles avec Nanite.
Par exemple, dans les deux maillages ci-dessous, le maillage de gauche a des normales à facettes tandis que celui de droite a des normales lissées. En les comparant à l'aide de la visualisation des triangles Nanite, on constate des différences notables dans le nombre de triangles utilisés par Nanite pour les dessiner. Le modèle à facettes de gauche génère beaucoup plus de triangles que le modèle lissé de droite.
Maillages compatibles avec Nanite avec des normales à facettes (à gauche) et lissées (à droite) | Visualisation des triangles Nanite des maillages compatibles avec Nanite avec des normales à facettes (à gauche) et lissées (à droite) |
Cliquez sur l'image pour l'afficher à sa taille réelle. | Cliquez sur l'image pour l'afficher à sa taille réelle. |
Maillage squelettique Nanite
Cette fonctionnalité de l'outil Nanite est encore au stade expérimental.
Les maillages squelettiques Nanite prennent en charge :
une nouvelle API de maillage squelettique qui facilite leur rendu,
Un seul appel à générer pour un maillage entier.
Occultation à partir de textures d'ombre virtuelle.
Aucun LOD de géométrie n'est pris en charge. Les maillages squelettiques Nanite utilisent des LOD d'animation.
Instanciation avec les banques d'animation.
Utiliser Nanite pour la végétation
L'utilisation de Nanite pour la végétation est en phase bêta et fait l'objet de recherches et d'un développement actifs. Cette section explique comment utiliser Nanite pour la géométrie de la végétation.
Pour les ressources telles que les arbres avec les paramètres Nanite par défaut, vous pouvez constater que les canopées ont tendance à s'amincir avec la distance. Ces cas sont une forme particulière de géométrie agrégée où chaque partie disjointe (une feuille ou un brin d'herbe) a des arêtes ouvertes à sa limite. L’activation de l’option Preserve Area (Conserver la surface) permet d’éviter cet amincissement lorsque Nanite est activé. Lorsque Nanite simplifie la géométrie à distance en réduisant le nombre de triangles, il doit éventuellement commencer à supprimer complètement certains de ces éléments disjoints. Si Nanite ne dispose pas de plus d'informations, le résultat aura l'air aminci parce qu'il y a eu une perte de surface importante. Préserver la surface redistribuera cette surface perdue aux triangles restants en dilatant les bords ouverts des frontières. La dilatation pour les formes symétriques comme les feuilles a le même effet que leur mise à l'échelle. Elle a pour effet d'épaissir les objets non symétriques, comme les rubans et les brins d'herbe.
Nous vous recommandons d'utiliser l'option Preserve Area pour tous les maillages de végétation, mais pas pour les maillages qui ne sont pas destinés à être utilisés comme végétation de scène.
La visualisation du cluster Nanite permet de mieux voir comment le paramètre Preserve Area redistribue la perte de surface.
Vous trouverez ci-dessous quelques recommandations pour l'utilisation et la création d'éléments de feuillage en tenant compte de Nanite. Nous sommes toujours en train d'expérimenter et d'apprendre nous-mêmes quelles sont les meilleures approches. Jusqu'à présent, nous avons vu que la procédure de création de végétation à l'aide de l'outil Nanite était différente, mais en vous appuyant sur ses points forts, vous pouvez obtenir des résultats plus rapides et de meilleure qualité.
Utilisez l'option Conserver la surface (activée dans l'éditeur de maillage statique).
Utilisez la géométrie au lieu de cartes masquées.
Les matériaux masqués sont relativement coûteux par rapport aux matériaux opaques. Vous obtiendrez probablement des résultats plus rapides si vous ne les utilisez pas du tout.
L’approche traditionnelle par carte (où de nombreux éléments sont représentés par une seule carte) peut s’avérer plus lente avec Nanite que sans. Activer Nanite sur une végétation basée sur des cartes n'implique cependant pas systématiquement une amélioration des performances.
Les pixels masqués sont presque aussi coûteux que les pixels générés.
La végétation à géométrie s'est avérée plus rapide avec Nanite qu'avec les approches par carte, qu'il s'agisse de cartes Nanite ou de cartes non Nanite. Elle est par ailleurs plus esthétique.
Le pack Megascans: Grass sur Fab propose de bons exemples de test. Il offre à la fois une géométrie masquée et un nombre élevé de polygones où chaque élément est indépendant, ainsi que des cartes masquées à faible nombre de polygones où de nombreux éléments sont représentés par une seule carte.
Lors de l'utilisation du décalage de position dans le monde (WPO), plus le nombre de vertex est élevé, plus le coût augmente. La logique du WPO doit être limitée et surveillée.
Les problèmes expliqués dans la section Géométrie agrégée de cette page sont toujours valables. Les forêts denses (voir les exemples ci-dessus) présentent un rendu beaucoup plus lent que la même scène dont tous les maillages sont remplacés par des formes pleines comptant le même nombre de triangles.
Utiliser le déplacement maximum du décalage de position dans le monde avec Nanite
Dans vos matériaux et instances de matériau, vous pouvez utiliser le paramètre Déplacement maximal du décalage de position dans le monde pour définir une limite supérieure à la quantité de décalage admissible pour le WPO. Ce paramètre peut s'avérer particulièrement utile pour les maillages Nanite, car ils sont divisés en plus petits clusters. Ces clusters ont chacun leurs propres limites et sont escamotés séparément sur le processeur graphique. Limiter le WPO est un moyen efficace de gérer cette situation.
Le paramètre Déplacement maximal du décalage de position dans le monde se trouve dans la catégorie Détails > Décalage de position dans le monde ou dans la section Remplacements des propriétés de matériau d’une instance de matériau.
Pour plus d’informations, consultez la rubrique Propriétés du matériau.
Mappage de déplacement statique Nanite
Cette fonctionnalité de l'outil Nanite est encore au stade expérimental.
L'éditeur de maillage statique comprend une option permettant d'ajouter des détails aux maillages compatibles avec Nanite via un outil de tessellation adaptatif hors ligne. Cet outil génère un maillage Nanite optimisé à l'aide de mappages de déplacement précalculés. Cette approche axée sur les textures est non destructive et vous permet de contrôler le degré de tessellation et de déplacement par le biais de paramètres scalaires.
Dans le panneau Détails, sous Paramètres Nanite, procédez comme suit :
Définissez l’erreur relative d’ajustement sur une valeur différente de 0 pour contrôler le degré de tessellation.
La valeur par défaut est de 0,04, mais il est préférable de la conserver au-dessus de 0,02. Cette valeur cible un niveau d'erreur lors de la tessellation du maillage. Une valeur trop faible utilise un grand nombre de triangles et entraîne des temps de création trop longs.
Ajouter des mappages de déplacement.
Développez l'élément Index et ajoutez une texture à utiliser pour le déplacement.
Si votre maillage compte plusieurs créneaux de matériau, chaque index de mappage de déplacement est mappé sur le créneau de matériau correspondant. Par exemple, l'emplacement de matériau 0 serait mappé sur l'index 0 des mappages de déplacement, l'emplacement 1 sur l'index 1, et ainsi de suite.
Définissez une magnitude pour contrôler l’ampleur du déplacement.
Cliquez sur Appliquer les modifications.
Tessellation Nanite
Cette fonctionnalité de l'outil Nanite est encore au stade expérimental.
La tessellation Nanite est un déplacement programmable dynamique qui permet de modifier les maillages Nanite à l'exécution à l'aide d'un mappage de déplacement ou d'un matériau procédural. Contrairement au décalage de position dans le monde, qui ne fonctionne qu'avec les vertex du maillage d'origine, le déplacement Nanite tesselle le maillage en triangles supplémentaires au moment de l'exécution pour se conformer aux détails du mappage de déplacement. Seul le degré de détail des triangles requis pour la densité de pixels actuelle est généré.
La tessellation Nanite présente les avantages suivants :
Utiliser des maillages sources comprenant moins de détails dans le pipeline de création.
Déplacement animé et basé sur les matériaux.
Créer des paysages Nanite détaillés.
Cliquez sur l'image pour l'afficher à sa taille réelle.
Pour activer la tessellation Nanite, vous devez définir les variables de console suivantes dans le fichier ConsoleVariables.ini ou dans les fichiers .ini de configuration de votre projet :
// This is read-only and must be set in the config file for the project.
r.Nanite.AllowTessellation=1
// This can be dynamically toggled at runtime.
r.Nanite.Tessellation=1Une fois ces variables définies, vous pouvez configurer la tessellation à l'aide de l'éditeur de matériau en procédant comme suit :
Sélectionnez le nœud principal du matériau.
Dans le panneau Détails, dans les paramètres Nanite, cochez la case Activer la tessellation.
Connectez un échantillon de texture à l'entrée Déplacement du nœud de matériau principal.
La plage de valeurs de l'entrée Déplacement est 0-1.
Deux paramètres sont à configurer pour utiliser la tessellation dans un matériau :
Magnitude : il s'agit de la hauteur du déplacement, mesurée de la valeur minimale à la valeur maximale, mappée dans la plage 0-1 de la broche Displacement. Ce paramètre définit également les limites utilisées pour l'escamotage. Par conséquent, définissez-le uniquement lorsque cela est nécessaire.
Cette valeur a un impact significatif sur les performances et peut avoir d'autres effets indésirables. Pour en savoir plus, consultez la section "Bon à savoir", ci-dessous.
Centre : Cette option détermine la valeur de déplacement qui correspond à une absence de changement par rapport au maillage de base. Par exemple, si le gris moyen est le centre et que vous souhaitez un déplacement égal à l'intérieur et à l'extérieur du maillage, utilisez la valeur 0.5. Pour un déplacement vers l'extérieur uniquement, définissez ce paramètre sur 0.
De plus, dans un matériau, vous pouvez optimiser la tessellation Nanite en activant l'option Displacement Fade (Transition de déplacement) dans le panneau Détails. Cette option comporte deux paramètres :
Start Fade Size (Pixels) (Valeur de transition de départ, en pixels) : Il s’agit de la valeur du déplacement maximal, en pixels à l'écran, au moment où la transition de sortie du déplacement commence. Cette valeur doit être supérieure à la valeur de End Fade Size (Valeur de transition de fin).
End Fade Size (Pixels) (Valeur de transition de fin, en pixels) : Il s’agit de la valeur du déplacement maximal, en pixels à l'écran, au moment où la transition de sortie doit s’achever et le déplacement désactivé. Cette valeur doit être inférieure à la valeur de Start Fade Size (Valeur de transition de départ).
Bon à savoir :
Cette option ne fonctionne qu'avec les maillages Nanite. La tessellation et le déplacement sont ignorés sur les maillages non Nanite ou dans les cas où Nanite n'est pas pris en charge.
Le déplacement ne modifie pas l'occultation (contrairement aux outils de rendu hors ligne). Vous devez fournir une texture de normales correspondante ou obtenir une normale à partir des dérivées de déplacement. Par souci de qualité et de compression, nous vous recommandons d'ajouter une texture de normales.
Déplacement scalaire uniquement. Le déplacement vectoriel n'est pas pris en charge actuellement.
Le déplacement s'effectue le long de la normale de vertex interpolée non normalisée. Il n'est pas encore possible de contrôler la direction du déplacement dans le shader. Il s'effectue toujours le long de la normale.
Le déplacement a lieu dans l'espace local et avant tout type de changement d'échelle d'objet. Autrement dit, la magnitude de déplacement spécifiée dans le matériau est exprimée en unités d'espace d'objet avant le changement d'échelle du maillage. Il s'agit généralement de l'approche souhaitée, mais pas toujours. Vous pouvez par exemple souhaiter disposer d'un quadrillage sur un cube que vous avez redimensionné pour le convertir en mur. Par la suite, nous envisageons d'ajouter une option pour l'espace du monde afin de résoudre ces cas.
La tessellation et le déplacement fonctionnent également sur les paysages, à condition que Nanite ait été activé pour eux. Malheureusement, une échelle significative s'applique automatiquement aux maillages générés par les paysages. Veillez donc à utiliser une magnitude bien plus faible pour les matériaux de paysage, de l'ordre de 64 fois plus petite. Ce problème sera probablement résolu à l'avenir grâce à l'option mentionnée au point précédent.
La valeur du paramètre Magnitude doit être aussi faible que possible. Essayez plutôt d'utiliser toute la plage 0-1 de la sortie Displacement. Veillez à ne pas régler pas la magnitude sur 100 et à ne pas réduire la valeur que vous reliez à la sortie Displacement, pour compenser. La raison en est que la valeur de magnitude sert à délimiter les patchs pour l'escamotage. Une valeur de magnitude élevée peut avoir un impact significatif sur les performances, notamment avec les textures d'ombre virtuelle.
Il n'existe actuellement aucune solution pour un déplacement sans fissure, comme le proposait l'Unreal Engine 4 avec la tessellation matérielle. Autrement dit, les jointures UV, les normales d'arête vive ou tout attribut de vertex ayant une incidence sur le déplacement qui n'est pas lissé peuvent produire des fissures.
La tessellation peut être combinée avec le décalage de position dans le monde. Le WPO s'applique alors aux vertex du maillage de base avant la tessellation. Comme toujours, le déplacement s'applique aux vertex de triangles découpés après la tessellation.
La tessellation n'est pas compatible avec le décalage de profondeur de pixel (PDO). Si la tessellation est activée, le PDO est ignoré.
Il est possible de combiner la tessellation au masque d'opacité, mais, pour des raisons de performances, le masquage s'effectue en fonction du taux de triangles découpés et non par pixel. Cette combinaison fonctionne dans la plupart des cas, mais elle est déconseillée avec le tramage (dithering), qui doit s'effectuer par pixel.
Il est possible que les artefacts de compression de texture soient visibles dans les mappages de déplacement et entraînent un effet d'escalier. Le paramètre de compression de texture Alpha, qui utilise BC4, fonctionne correctement dans de nombreux cas. Un alpha stocké dans une texture RVBA par défaut/DXT5/BC3 doit donner des résultats semblables. La décompression peut parfois être nécessaire, mais la virgule flottante est probablement superflue. L'empaquetage des canaux, notamment l'empaquetage de hauteur avec des normales, quel que soit le format compressé, produira probablement des artefacts. Cela peut s'avérer contraire aux expériences antérieures où les textures de hauteur étaient utilisées à d'autres fins.
Le déplacement est relatif aux triangles plats du maillage de base. Cela signifie qu'il ne part pas d'une surface incurvée, comme les triangles PN ou les surfaces de sous-division Catmull-Clark. La tessellation ne lisse pas intrinsèquement la surface.
Splines Nanite
Les maillages de spline servent à déformer des maillages le long de la forme d'une spline, par exemple des routes ou des chemins dans un paysage. Les maillages compatibles avec Nanite prennent en charge les splines par défaut et peuvent être créés en tant que splines de paysage et splines de blueprint.
Exemple de scène avec un maillage Nanite au premier plan et une spline Nanite. Cette scène montre la visualisation des triangles Nanite éclairés.
Les maillages de spline Nanite peuvent générer des problèmes d'affichage. Ainsi, lorsque vous créez un maillage de spline avec un maillage statique Nanite, la résolution du maillage de spline peut diminuer lorsque la caméra s'éloigne de lui. Cela est dû au fait que Nanite ne prend pas en compte la déformation des maillages de spline lors de la génération de leur niveau de détail (LOD) inférieur. Les simplifications invisibles à la même distance lorsqu'elles ne sont pas déformées peuvent donc devenir évidentes si elles sont étirées le long d'une courbe de spline.
Vous pouvez atténuer ce problème de déformation grâce au paramètre Facteur de longueur d'arête maximale, disponible dans l'éditeur de maillage statique, sous Paramètres Nanite, dans le panneau Détails. Ce paramètre atténue ce problème en forçant Nanite à conserver suffisamment de détails pour maintenir la distance souhaitée entre les vertex du maillage à l'écran, ce qui empêche le rendu du maillage en dessous d'un certain seuil de densité de vertex.
Le facteur de longueur d'arête maximale par défaut est 0. Cela indique que la longueur de l'arête ne sera pas prise en compte pour ce maillage. Les valeurs supérieures à 0 représentent la distance souhaitée entre deux vertex connectés dans l'espace écran. Plus précisément, cette distance est représentée par un multiple de la plus petite arête de triangle Nanite souhaitée (configurée par r.Nanite.MaxPixelsPerEdge).
Mettre à niveau vers les splines Nanite à partir d'une version antérieure du moteur
Dans les projets créés avec l'Unreal Engine 5.3 et les versions antérieures, les composants de maillage de spline qui utilisaient des maillages statiques Nanite rendaient au préalable les maillages de rechange générés à partir du maillage Nanite en tant que maillages statiques ordinaires. Le rendu des splines avec Nanite étant désormais activé par défaut dans l'Unreal Engine 5.4, ces maillages sont désormais rendus en tant que Nanite, ce qui peut entraîner des différences visuelles.
Pour conserver le comportement précédent, qui consiste à rendre le maillage de rechange de Nanite comme un maillage de spline, vous pouvez définir r.SplineMesh.RenderNanite sur 0.
Flux de travail hybrides de contenu Nanite et non Nanite
Dans les sections suivantes, nous décrivons les flux de travail que vous pouvez utiliser dans vos projets Nanite qui doivent également prendre en charge les fonctionnalités et les plateformes non Nanite, sans dupliquer les ressources.
Importer un maillage haute résolution pour Nanite
Vous pouvez importer un maillage haute résolution qui vous servira de représentation Nanite pour tout maillage statique non Nanite existant via le navigateur de contenu ou l’ éditeur de maillage statique.
Dans le navigateur de contenu, utilisez le menu contextuel du clic droit sur une ressource de maillage statique pour sélectionner Niveau de détail > Haute résolution > Importer en haute résolution, puis atteignez le fichier que vous souhaitez importer.
Vous pouvez également utiliser l'éditeur de maillage statique pour importer un maillage haute résolution à l’aide des paramètres Nanite dans le panneau Détails. Cliquez sur Importer et atteignez le fichier que vous souhaitez importer.
Grâce à ce flux de travail, le maillage statique préexistant et sa chaîne de niveaux de détail (LOD) deviennent le maillage de rechange, plutôt que de laisser le processus d'importation générer automatiquement un maillage de rechange à partir de la géométrie Nanite.
Ce flux de travail prend en compte le paramètre Désactiver Nanite sur les acteurs de maillage statique de vos scènes. Il est expliqué plus en détail dans la section Options des composants de maillage statique ci-dessous.
Flux de travail relatifs aux matériaux
Il existe deux façons d'améliorer vos flux de travail Nanite et non Nanite avec des matériaux : en utilisant un nœud dans le graphique de matériau pour séparer les chemins logiques ou en utilisant un matériau de remplacement servant uniquement au rendu avec Nanite.
Nœud Nanite Pass Switch
Le nœud Nanite Pass Switch permet de définir un comportement spécialisé dans un graphique de matériau lors du rendu avec Nanite.
Utilisez l'entrée Default lors du rendu dans des passes non Nanite pour gérer le matériau normalement. Utilisez l'entrée Nanite pour toute logique de matériau que vous souhaitez simplifier ou rendre spécifiquement dans les passes Nanite. Par exemple, dans les cas où un matériau utilise une fonctionnalité non prise en charge par Nanite, vous pouvez conserver la même logique pour l'entrée Default et utiliser une logique plus conviviale pour l'entrée Nanite.
Matériau de remplacement Nanite
Le créneau Matériau de remplacement Nanite est disponible sur les matériaux et les instances de matériau. Lorsque vous définissez un matériau de substitution, tous les maillages activés par Nanite auxquels le matériau ou l'instance de matériau est attribué utiliseront le matériau de remplacement Nanite référencé à la place. En d'autres termes, vous pouvez créer des matériaux propres aux flux de travail Nanite plutôt que de gérer la logique directement dans le graphique de matériau à l'aide du nœud Nanite Pass Switch.
Dans les instances de matériau, le créneau Matériau de remplacement Nanite est défini par défaut sur Aucun de sorte que la définition du remplacement dans un matériau parent n'entraîne pas son héritage automatique dans les instances enfants de ce matériau.
Dans l'exemple ci-dessous, Nanite est activé dans le ressource de maillage statique de la statue et une instance de matériau lui est appliquée. Le créneau Matériau de remplacement Nanite de l'instance de matériau a été défini avec des changements de couleur simples à des fins de démonstration. L'acteur de maillage statique à gauche affiche le matériau de substitution Nanite puisque le maillage est rendu avec Nanite. L'acteur de maillage statique de droite affiche le même matériau jusqu'à ce que l'option Désactiver Nanite soit définie sur l'acteur, ce qui désactive le matériau de remplacement Nanite pour afficher le matériau de base non Nanite de l'instance de matériau.
Option de composant de maillage statique : Désactiver Nanite
Vous pouvez déterminer quand les maillages statiques compatibles avec Nanite doivent utiliser leur représentation Nanite à l’aide du paramètre Désactiver Nanite sur les acteurs de scène individuels. Autrement dit, vous pouvez mélanger les acteurs Nanite et non Nanite qui utilisent la même ressource de maillage statique.
L'exemple ci-dessous illustre une ressource de maillage statique Nanite unique : la représentation de maillage Nanite à gauche et l'option Ne pas autoriser Nanite activée à droite.
Paysage
Vous pouvez activer Nanite sur les acteurs de paysage. Les maillages de paysage Nanite sont recréés à l'arrière-plan afin de ne pas perturber le flux de travail de l'utilisateur lorsqu'il se trouve dans l'éditeur. Le maillage de paysage Nanite n'améliore pas la résolution du paysage, mais permet à l'utilisateur de tirer parti des fonctionnalités d'exécution de Nanite, telles que l'escamotage par le processeur graphique, le chargement dynamique automatique de la géométrie et les LOD. Il dynamise généralement les performances d'exécution, en particulier pour les fonctionnalités exigeantes comme VSM.
Pour savoir comment activer et utiliser Nanite dans vos paysages, consultez la documentation Utiliser Nanite dans les paysages.
Performances du contenu type
À titre de comparaison, les temps d’exécution GPU suivants ont été extraits de la démonstration technique de l'Unreal Engine 5 Lumen in the Land of Nanite sur une PlayStation 5 :
Résolution moyenne de rendu de 1 400 p temporellement suréchantillonnée à 4K.
Environ 2,5 millisecondes (ms) pour escamoter et rastériser tous les maillages Nanite (ce qui représentait quasiment l'intégralité des éléments dans cette démonstration).
Presque toute la géométrie utilisée était un maillage Nanite.
Le coût en CPU est pratiquement nul, le traitement étant entièrement délégué au GPU
Environ 2 ms pour évaluer les matériaux de tous les maillages Nanite
Faible coût en CPU, avec 1 appel à générer par matériau présent dans la scène.
Si l'on considère l'ensemble de ces temps de processeur graphique, on obtient environ 4,5 ms pour ce qui équivaudrait à la passe préliminaire de profondeur d'Unreal Engine 4 plus la passe de base. Nanite est donc bien adapté aux projets de jeux visant 60 IPS.
Des chiffres comme ceux-là devraient être attendus d'un contenu qui ne souffre pas des pièges de performance mentionnés dans les sections précédentes. Un nombre d'instances très élevé et un grand nombre de matériaux uniques peuvent également entraîner une augmentation des coûts. C'est un domaine de développement Nanite sur lequel nous travaillons activement.
Taille des données
En raison des micro-détails que Nanite est capable d'atteindre, on pourrait supposer que cela signifie une augmentation importante des données géométriques, ce qui se traduit par des tailles de paquets de jeu et des téléchargements plus importants pour les joueurs. Ce n'est heureusement pas le cas ! En fait, le format de maillage de Nanite est nettement plus petit que le format de maillage statique standard en raison du codage de maillage spécial qu'utilise Nanite.
Par exemple, en utilisant l'échantillon d'Unreal Engine 5 Valley of the Ancients, les maillages Nanite ont une moyenne de 14,4 octets par triangle d'entrée. Autrement dit, un maillage Nanite d'environ un million de triangles occupe approximativement 13,8 mégaoctets (Mo) sur le disque.
Comparons un maillage classique à petit nombre de polygones et sa texture de normales à un maillage Nanite à grand nombre de polygones :
Maillage à faible nombre de polygones
Taille du paquet compressé du maillage statique : 1,34 Mo | Maillage Nanite
Taille du paquet compressé du maillage statique : 19,64 Mo |
La taille du paquet compressé ne correspond cependant pas à la taille totale de la ressource. Nous devons également tenir compte de textures uniques utilisées seulement par ce maillage. Les textures propres à de nombreux matériaux utilisés par les maillages sont composées de différentes textures (normale, couleur de base, métallique, spéculaire, rugosité et masque).
Cette ressource particulière n'utilise que deux textures (Couleur de base et Normal) et n'est donc pas aussi coûteuse en espace disque qu'une ressource comportant de nombreuses autres textures uniques. Par exemple, notez que la taille du maillage Nanite comptant environ 1,5 million de triangles est plus petite (à 19,64 Mo) qu'une texture de normales de 4k.
| Texture Type | Taille de la texture | Taille sur le disque |
|---|---|---|
BaseColor | 4k x 4k | 8,2 Mo |
Normale | 4k x 4k | 21,85 Mo |
La taille totale du paquet compressé pour ce maillage et ses textures est la suivante :
* Maillage à faible nombre de polygones : 31,04 Mo
Maillage à grand nombre de polygones : 49,69 Mo
Comme le maillage de Nanite est déjà très détaillé, nous pouvons essayer de remplacer la carte normale unique par une normale de détail de carrés qui est partagée avec d'autres ressources. Bien que cela entraîne une perte de qualité dans ce cas, cette perte est assez faible et sans doute beaucoup plus faible que la différence de qualité entre les versions à petit nombre de polygones et à grand nombre de polygones. Un maillage Nanite de 1,5 million de triangles peut donc à la fois être plus esthétique et plus petit qu'un maillage à petit nombre de polygones avec une texture de normales de 4k.
Taille totale du paquet compressé du maillage et des textures compatibles avec Nanite : 27,83 Mo
Vous pouvez expérimenter de nombreux cas de figure avec la résolution de texture et les textures de normales détaillées, mais cette comparaison vise à démontrer que la taille des données des maillages Nanite n'est pas si différente de celle des données que les infographistes connaissent déjà.
Enfin, nous pouvons comparer la compression Nanite au format de maillage statique standard utilisant le grand nombre de polygones, tous deux étant identiques au LOD0.
Maillage statique à grand nombre de polygones
Taille du paquet compressé du maillage statique : 148,95 Mo | Maillage Nanite
Taille du paquet compressé du maillage statique : 19,64 Mo |
Si l'on compare la compression Nanite antérieure d'une taille de 19,64 Mo, elle est 7,6 fois plus petite que la compression standard du maillage statique avec 4 LOD.
La compression Nanite et la taille des données sont les principaux domaines qui seront améliorés dans les prochaines versions de l'Unreal Engine.
Conseils généraux sur la taille des données
Les systèmes Nanite et de texturage virtuel, associés à des disques SSD rapides, ont permis de réduire les budgets d'exécution de la géométrie et des textures. Le principal défi est désormais de fournir ces données à l'utilisateur.
La taille des données sur le disque est un facteur important lorsqu'on examine la manière dont le contenu est diffusé - sur des supports physiques ou téléchargé depuis Internet - et la technologie de compression a ses limites. La bande passante Internet, la taille des supports optiques et des disques durs de l'utilisateur final n'ont pas évolué au même rythme que la bande passante et la latence d'accès des disques durs, que la puissance de calcul des processeurs graphiques et que des technologies logicielles telles que Nanite. Transmettre ces données aux utilisateurs n'est donc pas une mince affaire.
Le rendu efficace de maillages très détaillés est moins problématique avec Nanite, mais le stockage des données correspondantes sur le disque est désormais le point clé à surveiller.
Modes de visualisation
Nanite comprend un certain nombre de modes de visualisation pour inspecter ses données dans la scène en cours.
Dans le hublot du niveau, sous le menu déroulant Modes d'affichage, survolez Visualisation Nanite et choisissez l’une des options disponibles.
La visualisation Vue d'ensemble affiche la scène rendue au centre de l'image avec certaines visualisations Nanite autour de l'écran, pour référence.
Les modes de visualisation Nanite suivants sont disponibles :
| Visualisation Nanite | Description |
|---|---|
Masque | Visualisation qui marque la géométrie Nanite (en vert) et la géométrie non Nanite (en rouge). |
Triangles | Afficher tous les triangles des maillages Nanite dans la scène actuelle. |
Correctifs | Afficher tous les correctifs des maillages Nanite de la scène en cours. |
Clusters | Afficher des représentations colorées de tous les groupements de triangles en cours de rendu dans la vue de scène actuelle. |
Primitives | Visualisation qui applique la même couleur aux composants pour toutes les instances d'un maillage statique d'instance (ISM). |
Instances | Visualisation qui applique une couleur différente à chaque instance de la scène. |
Suraffichage | Indiquer le degré de suraffichage qui se produit pour la géométrie de la scène. Tous les pixels évalués, y compris les pixels masqués, sont ajoutés à la vue en suraffichage. Les objets plus petits qui sont étroitement empilés les uns sur les autres créent davantage de suraffichage que les objets plus grands. |
UV de texture de lumière | Visualisation qui affiche les coordonnées UV des surfaces des maillages Nanite. |
Évaluer le WPO | Appliquer une couleur aux géométries compatibles avec Nanite qui utilisent le décalage de position dans le monde (vert) par rapport à celles qui ne l’utilisent pas (rouge). |
Programmable par pixels | |
Tessellation | Visualisation des maillages Nanite utilisant la tessellation et du degré de tessellation sur les maillages tessellés uniquement. |
Bacs de rastérisation | Afficher les groupes qui représentent des lots de géométrie. |
Bacs d'occultation |
Nanite comprend un mode de visualisation Avancé qui active des options de visualisation supplémentaires dans le menu Visualisation Nanite. Ces visualisations sont utiles pour les programmeurs qui déboguent ou profilent divers aspects de bas niveau de Nanite.
Activez ce mode de visualisation avancé avec la variable de console r.Nanite.Visualize.Advanced 1.
Variables et commandes de console
Les statistiques et variables de console suivantes sont disponibles à des fins de débogage et de configuration de Nanite.
Le rendu Nanite peut être activé et désactivé globalement au moment de l'exécution à l’aide de la variable de console r.Nanite 0. Désactiver Nanite est un bon moyen d'émuler les plateformes où cet outil n'est pas pris en charge.
Modes de rendu Nanite de repli
Nanite fournit des modes de rendu de maillage de rechange dans les cas où Nanite est désactivé ou non pris en charge par une plateforme. Vous pouvez contrôler le mode utilisé avec la variable de console r.Nanite.ProxyRenderMode.
0 est le mode par défaut. Il est configuré pour effectuer le rendu des maillages de rechange ou des LOD de l'espace écran, s'ils sont définis. Cela inclut la reconnaissance du LOD minimum dans les propriétés de l'éditeur de maillage statique (décrites dans la section Maillage de rechange ci-dessus).
1 désactive tous les rendus des maillages compatibles avec Nanite.
2 fonctionne de la même manière que le mode 1, mais permet à la visualisation Afficher > Maillage de rechange Nanite dans l'éditeur de maillage statique d'afficher un maillage de rechange Nanite.
Les modes de rendu de secours 1 et 2 sont utiles pour les scènes qui comportent beaucoup plus d'instances qu'il n'est possible de prendre en charge sans Nanite. Ils permettent d'ouvrir la scène dans l'éditeur sur des plateformes ne prenant pas en charge Nanite.
Dans le projet d'exemple Valley of the Ancients de l'Unreal Engine 5, la désactivation de Nanite entraînerait des dizaines de milliers d'appels à générer ordinaires, ce qui rendrait difficile l'ouverture de la texture sur une plateforme non compatible.
Commande Nanite Stats
La commande NaniteStats permet d'ajouter une superposition de statistiques d'élimination Nanite dans le coin supérieur droit du hublot.
Les arguments de commande sont utilisés pour spécifier les statistiques que Nanite affiche à l'écran. Si aucun argument n'est fourni, la vue principale est utilisée.
Utilisez NaniteStats List pour afficher toutes les vues disponibles dans la sortie de débogage :
Principal
Textures d'ombre virtuelles
Vous pouvez également consulter d'autres statistiques pour ShadowAtlas et CubemapShadows lorsqu'elles sont disponibles. Sélectionnez une vue en saisissant la commande suivie du nom de la liste de statistiques que vous souhaitez visualiser. Par exemple, saisissez NaniteStats VirtualShadowMaps.
Pour les vues qui utilisent le culling d'occlusion en deux passes, les statistiques sont divisées en deux parties distinctes pour les passes principale et postérieure.
Redimensionner la taille du pool de chargement dynamique Nanite
Contrôlez la quantité de mémoire dédiée au stockage des données de chargement dynamique Nanite avec la variable de console r.Nanite.Streaming.StreamingPoolSize. L'utilisation de pools plus importants réduit les tâches d'E/S et de décompression lors des déplacements dans la scène, mais au prix d'une empreinte mémoire plus importante.
Si le pool n'est pas assez grand pour contenir toutes les données nécessaires à une vue, le thrashing du cache, empêchant la stabilisation du chargement dynamique, même pour une vue statique, peut se produire.
Pour visualiser les données de chargement dynamique Nanite, vous pouvez utiliser l'indicateur d'affichage de la géométrie de chargement dynamique, Afficher > Nanite > Géométrie de chargement dynamique. Si ce paramètre est désactivé, les maillages Nanite ne sont rendus qu'au niveau de qualité toujours résident en mémoire.
Définir le nombre maximum de clusters en une seule passe
Vous pouvez spécifier le nombre maximum de clusters candidats et visibles utilisés en une seule passe avec les variables de console r.Nanite.MaxCandidateClusters et r.Nanite.MaxVisibleClusters. Leurs valeurs sont utilisées pour le dimensionnement des tampons intermédiaires et leurs valeurs par défaut ont été choisies pour fonctionner dans les scénarios de rendu courants.
Il n'existe aucun mécanisme permettant de redimensionner dynamiquement l'un ou l'autre de ces tampons, ou de réduire automatiquement la qualité en cas de dépassement, ce qui peut entraîner des artefacts de rendu dus au fait qu'ils sont trop petits pour la complexité de la scène, et se manifestent généralement par une géométrie manquante ou clignotante. Lorsque ces types d'artefacts se produisent, utilisez NaniteStats pour déterminer des limites prudentes pour les clusters candidats et visibles. Plus précisément, examinez les statistiques de ClustersSW et ClustersHW. Le coût de mémoire d'un cluster candidat est actuellement de 12 octets et celui d'un cluster visible de 16 octets.
Il est impossible de modifier cette variable de console à l'exécution. Vous devez la spécifier dans un fichier de configuration (.ini).