Passer au contenu principal
Un meshlet est simplement un sous-bloc d’un maillage, soit un nombre fixe de primitives et de sommets. Un maillage peut être entièrement défini par un ensemble de meshlets, chacun étant constitué d’un ensemble unique de primitives du maillage. Nous dirons qu’un maillage converti en structure de meshlets est meshlétisé. Le nombre fixe de primitives et de sommets utilisé pour construire le maillage meshlétisé est le même pour toute la liste de meshlets et définit la taille maximale de chaque meshlet. Idéalement, chaque meshlet s’approche le plus possible de cette taille, mais ne la remplit pas nécessairement. La mémoire tampon d’index traditionnelle est remplacée par trois nouvelles structures de données : une liste de meshlets, une liste d’index de sommets uniques et une liste de primitives. Figure 1. Rendu d’un maillage meshlétisé coloré par meshlet (un dragon). Notez que les meshlets sont constitués de primitives présentant une cohérence spatiale raisonnable. Dragon L’exemple de code suivant est une implémentation C++ d’une structure de meshlet d’exécution. Ces données décrivent entièrement un maillage pouvant être rendu.
Cette structure de meshlet présente plusieurs avantages pour le rendu avec les nuanceurs de maillage. Chaque meshlet a une taille maximale fixe, ce qui est idéal pour associer un groupe de threads de taille fixe à un seul meshlet et offre une correspondance intuitive entre thread et sommet/primitive. Le nombre de sommets et de primitives est connu à l’avance, ce qui élimine la nécessité de les calculer dans le code du nuanceur. Les index de sommets sont déjà dédoublonnés, ce qui élimine les transformations et exportations de sommets redondantes. Les index de primitives sont localisés dans la liste de sommets du meshlet. Les meshlets offrent également une granularité supplémentaire pour l’élimination grâce à des informations spatiales et d’orientation. L’exemple de code précédent montre les relations entre les nouvelles mémoires tampons de meshlets. La liste de meshlets est une liste plate de la structure « meshlet » d’exécution, qui contient au minimum un décalage et un nombre dans les listes d’index de sommets uniques et de primitives. La liste d’index de sommets uniques est une liste dédoublonnée d’index dans la mémoire tampon de données de sommets. La liste de primitives définit les primitives du maillage et est constituée d’index dans la liste d’index de sommets uniques, localisés par rapport au décalage de sommets du meshlet. Figure 2. Diagramme illustrant la relation entre les mémoires tampons de meshlets. Diagramme illustrant la relation entre les mémoires tampons de meshlets

Conversion en meshlets

La meshlétisation d’un maillage avec mémoire tampon d’index traditionnelle ne nécessite aucune modification du flux de travail des artistes : il s’agit d’une étape de post-traitement procédurale après la création du modèle. La mémoire tampon d’index traditionnelle peut également être régénérée rapidement à l’exécution, ce qui évite d’avoir à livrer à la fois des mémoires tampons d’index traditionnelles et des mémoires tampons de meshlets. La meshlétisation peut être coûteuse en calcul; nous vous recommandons donc de l’effectuer au préalable hors ligne. Un exemple de projet de convertisseur de meshlets, comprenant une bibliothèque C++ et un outil en ligne de commande, est fourni par ATG pour effectuer cette conversion, avec nos autres exemples, sur la page XBOX Developer Downloads. Cet outil ne modifie pas les données de sommets elles-mêmes; nous vous recommandons donc d’exécuter un optimiseur de cache de sommets, comme l’algorithme de Forsyth, sur les données du maillage avant la meshlétisation. Les optimiseurs ont tendance à créer des maillages plus cohérents spatialement que ce qu’on peut attendre en général des outils de création de contenu. Des heuristiques supplémentaires pourraient être ajoutées pour équilibrer la réutilisation des sommets avec des propriétés d’élimination avantageuses de la structure de maillage résultante.

Rendu avec des meshlets

La structure du meshlet rend le rendu très simple avec les nuanceurs de maillage. Déclarez la taille du groupe de threads comme étant la taille maximale d’un meshlet et répartissez un groupe de threads pour chaque meshlet du maillage. Chaque thread est responsable du traitement et de l’exportation d’un sommet et d’une primitive. L’exemple suivant montre un code simple de nuanceur de maillage qui effectue le rendu d’un maillage meshlétisé. D’abord, le meshlet du groupe de threads est chargé et le nombre de sorties peut être déclaré immédiatement. Enfin, PrimitiveCount threads sont responsables du chargement et de l’écriture des données d’index de primitives, et VertexCount threads chargent l’index de sommet utilisé pour accéder aux données de sommets, puis les ombrent et les écrivent dans le tableau de sortie. L’exemple complet se trouve sur la page XBOX Developer Downloads. L’exemple de code suivant est un exemple d’implémentation d’un nuanceur de maillage qui effectue le rendu d’un meshlet.

Voir aussi

Vue d’ensemble du pipeline de nuanceurs de maillage Vue d’ensemble de l’API des nuanceurs de maillage Utilisation des nuanceurs de maillage Élimination des meshlets
Dernière modification le 6 octobre 2026