En quoi consiste le plug-in Geometry Script ?
Geometry Script est un plug-in d'Unreal Engine contenant un ensemble de bibliothèques de fonctions capables de générer et de modifier la géométrie du maillage via Blueprints (BP) et Python. Pour afficher toutes les fonctions disponibles, consultez la rubrique Référence du plug-in Geometry Script.
Les UFunctions et les nœuds Blueprint du plug-in Geometry Script fonctionnent sur des objets UDynamicMesh, qui sont des objets créés à l'aide de la structure de données de maillage triangulaire C++ FDynamicMesh3. Il s'agit de la même structure de données utilisée par le plug-in Geometry Processing et le mode Modélisation de l'éditeur.
Vous pouvez utiliser le plug-in Geometry Script dans les widgets d'utilitaire de l'éditeur et les actions de ressource pour créer des outils d'analyse, de traitement et de modification de maillage personnalisés. Vous pouvez également l'utiliser dans les blueprints d'acteur pour créer des objets procéduraux et mettre en œuvre des requêtes géométriques complexes.
Vous pouvez utiliser le plug-in Geometry Script dans divers scénarios :
- Tests et analyses de qualité des importateurs de maillage tiers.
- Analyse des UV du maillage pour identifier les ressources qui gaspillent l'espace de texture.
- Fusion scénarisée des ressources de maillage pour les flux de travail de production.
- Acteurs de maillage procédural tels que les outils de conception de niveau utilisés dans Lyra Sample Game.
Activer le plug-in
Pour utiliser Geometry Script, vous devez activer le plug-in associé.
Pour activer le plug-in ou vous assurer qu'il est activé :
-
Dans la barre de menus, sélectionnez Modifier > Plug-ins.
-
Dans la barre de recherche, saisissez « geometry script ».
- Activez le plug-in Geometry Script et sélectionnez Oui dans la boîte de dialogue contextuelle.
- Redémarrez le moteur.
Objets de maillage dynamique
Geometry Script fonctionne sur plusieurs nouveaux types d'objets :
UDynamicMeshUDynamicMeshComponentADynamicMeshActor
Similaires à l'architecture de maillage statique, de composant de maillage statique et d'acteur de maillage statique, ces classes ne font pas spécifiquement partie du plug-in Geometry Script. Elles sont situées dans le module Geometry Framework du moteur et peuvent être utilisées séparément du plug-in Geometry Script.
Maillage dynamique
Le composant principal qui active le plug-in Geometry Script est l'objet UDynamicMesh. Cet UObject est un conteneur pour une structure de données de maillage non liée à un composant spécifique. Cela diffère des approches précédentes d'Unreal Engine telles que UProceduralMeshComponent, dans la mesure où la géométrie du maillage peut être créée et manipulée sans représentation explicite de la scène.
Par exemple, un UDynamicMesh peut être initialisé sur la base d'un UStaticMesh, modifié, puis stocké dans la ressource. Associés aux widgets utilitaires de l'éditeur pour fournir l'interface utilisateur, les techniciens peuvent créer des outils d'édition de maillage personnalisés spécialement conçus dans Blueprint ou des opérations de requête et d'édition de maillage de script via Python.
Vous pouvez également convertir différents types de géométrie d'acteur vers et depuis UDynamicMesh, tels que les volumes de jeu.
Composant de maillage dynamique
Outre UDynamicMesh, UDynamicMeshComponent a été promu au rang de composant « réel » (non transitoire, sérialisable). Ce composant est similaire à un UProceduralMeshComponent ; cependant, il est précalculé par un UDynamicMesh, que vous pouvez manipuler via le plug-in Geometry Script.
UDynamicMeshComponent a été développé au cours des dernières années dans le cadre de la trousse à outils de modélisation de maillage, fournissant des aperçus en temps réel de l'édition de maillage. Semblable à UProceduralMeshComponent, il prend en charge les mises à jour de la géométrie du maillage, la mise à jour des attributs de vertex ainsi que la création et la modification de l'ensemble de la topologie du maillage. Vous pouvez effectuer ces mises à jour dans l'éditeur et au moment de l'exécution.
Bien que le ray-tracing soit pris en charge, Nanite et Lumen ne le sont pas.
Acteur de maillage dynamique
ADynamicMeshActor est similaire à AStaticMeshActor dans la mesure où il s'agit essentiellement d'un conteneur pour un composant UDynamicMeshComponent. Cependant, les acteurs de maillage dynamique fournissent un support spécifique pour les blueprints d'acteur qui souhaitent implémenter une génération de maillage procédural basée sur un UDynamicMesh.
Avec les acteurs de maillage dynamiques, les outils du plug-in Geometry Script et du mode Modélisation peuvent créer et modifier l'un ou l'autre type d'acteur de maillage, outre les volumes.
Acteur de maillage dynamique généré
AGeneratedDynamicMeshActor est une sous-classe de ADynamicMeshActor qui fournit un support supplémentaire pour l'implémentation d'acteurs de maillage procéduraux basés sur Blueprint. Plus précisément, cette classe offre la fonction On Rebuild Generated Mesh, que vous pouvez mettre en œuvre dans les sous-classes BP pour générer un maillage au lieu de le faire dans le script de construction. Cette fonction offre de meilleures performances interactives dans l'éditeur et permet de mieux gérer la génération d'une géométrie procédurale à grande échelle à l'avenir.
Event On Rebuild Generated Mesh existe uniquement dans les plans d'acteur dérivés de la classe GeneratedDynamicMeshActor. De plus, la fonction Generated Dynamic Mesh Actor est actuellement réservée à l'éditeur.
Principales différences entre UStaticMesh et UDynamicMesh
Contrairement à UStaticMesh, UDynamicMesh n'est pas une ressource. UDynamicMeshComponent possède son propre UDynamicMesh au lieu d'être partagé entre plusieurs composants comme un UStaticMesh.
Cette différence signifie, par exemple, que le rendu instancié n'est pas disponible.
Un maillage dynamique est stocké dans un niveau uniquement plutôt que dans un fichier de ressources distinct. La duplication d'un UDynamicMeshComponent crée une copie du maillage (générant ainsi un nouveau maillage au lieu d'une instance). Le transfert entre les niveaux ou les projets doit être effectué par copier-coller.
À bien des égards, UDynamicMeshComponent se comporte comme des objets de maillage dans un outil de création de contenu numérique (CCN), tel qu'Autodesk 3ds Max, Autodesk Maya ou Blender. Cette gestion introduit des problèmes potentiels avec des maillages volumineux augmentant considérablement la taille du fichier de niveau. Cependant, avec un fichier par acteur, les données de maillage sont stockées avec le fichier d'acteur OFPA plutôt qu'avec le niveau (le maillage est toujours volumineux, mais il se trouve dans un fichier distinct).
Modèle de fonction
La plupart des fonctions du plug-in Geometry Script suivent un motif standard similaire au nœud Apply Mesh Plane Cut illustré ci-dessous.
Le premier argument, Maillage cible, est le maillage UDynamicMesh modifié par l'opération. En général, les opérations du plug-in Geometry Script modifient le maillage d'entrée au lieu de créer un nouveau maillage afin d'éviter de créer plusieurs objets de maillage temporaires. L'entrée UDynamicMesh est toujours renvoyée en sortie, également appelée Maillage cible (même nom == même objet). Cette configuration permet d'enchaîner facilement plusieurs opérations en séquence.
Les nœuds du plug-in Geometry Script disposent de nombreux paramètres et réglages. Nous vous décrivons ici les options les plus fréquemment utilisées en tant qu'arguments, mais vous trouverez des options supplémentaires dans une structure Options propre à l'opération. La manière la plus courante de créer la structure d'options appropriée est de faire glisser la broche Options vide. De plus, vous pouvez faire un clic droit sur la broche Options et utiliser l'élément de menu contextuel Diviser la broche de structure pour développer directement la structure Options dans le nœud, comme indiqué ci-dessous.
La plupart des nœuds disposent également d'une broche Déboguer fournissant un support de débogage géométrique pour les générateurs de maillage. Celle-ci n'est pas utilisée activement, mais constitue un espace réservé pour des fonctionnalités futures.
Utiliser des pools UDynamicMesh
Il est fréquent de créer des maillages temporaires à l'intérieur d'un générateur de maillage, par exemple en utilisant un maillage de primitive à soustraire du maillage principal. Pour ce faire, un UDynamicMesh temporaire est nécessaire. Bien que vous puissiez en créer un à l'aide de la fonction Construire un objet à partir de la classe, vous devez collecter le maillage après utilisation. Cependant, si vous prévoyez d'exécuter le générateur fréquemment, la réutilisation du maillage entre les exécutions est plus efficace.
À cet effet, l'acteur de maillage dynamique dispose d'un support intégré à l'aide d'un UDynamicMeshPool. Vous pouvez utiliser cette configuration en appelant Allouer le maillage de calcul pour obtenir un maillage temporaire, puis le libérer avant la fin du chemin d'exécution du blueprint. Chaque maillage temporaire peut être explicitement libéré à l'aide de Libérer le maillage de calcul, ou en appelant Libérer tous les maillages de calcul, qui renvoie tous les maillages temporaires actuellement alloués à partir du pool.
Dans un widget d'utilitaire de l'éditeur, il n'existe aucune instance de pool de maillages dynamiques par défaut à partir de laquelle allouer des maillages. Vous pouvez néanmoins utiliser Créer un pool de maillage dynamique pour en créer une (par exemple, en tant que variable dans le widget d'utilitaire de l'éditeur ou le blueprint d'utilitaire).
Créer un maillage procédural
Comme indiqué, l'un des cas d'utilisation du plug-in Geometry Script consiste à créer des maillages procéduraux à l'aide de blueprints d'acteur. Dans l'exemple ci-dessous, nous utilisons une sous-classe de blueprint de Acteur de maillage dynamique généré. La fonction Event On Rebuild Generated Mesh remplit le UDynamicMesh d'un UDynamicMeshComponent. Le UDynamicMesh est transmis à une fonction du plug-in Geometry Script appelée Append Box, qui crée un maillage sur la base des variables d'entrée.
Le script crée un maillage de primitive de boîte paramétrique avec des paramètres que les créateurs peuvent ajuster dans l'éditeur avec seulement quelques nœuds BP. En ajoutant des nœuds supplémentaires, vous pouvez créer des générateurs de maillage de plus en plus complexes directement dans les blueprints. Pour développer ce script et en savoir plus sur le plug-in Geometry Script, consultez la rubrique Utiliser le plug-in Geometry Script via des blueprints.

Remarques supplémentaires
Pour vérifier l'existence d'une fonction spécifique, consultez la documentation Référence du plug-in Geometry Script.
Certaines fonctions (telles que Apply PolyGroup Catmull Clark SubD) sont propres à l'éditeur. Ce paramètre signifie que vous ne pouvez utiliser ces fonctions que dans les acteurs/actions/widgets d'utilitaire de l'éditeur ou les sous-classes de BP de l'acteur de maillage dynamique généré.
La majorité des fonctions du plug-in Geometry Script fonctionnent uniquement avec les objets UDynmicMesh. Certaines fonctions permettent de convertir les représentations de maillage internes d'un maillage statique, d'un maillage squelettique ou d'un acteur de volume en un objet UDynamicMesh, d'autres servent à les reconvertir. Il n'existe aucune fonction pour les autres types de géométrie, tels que le paysage, les caches ou collections de géométrie, les structures capillaires et les vêtements.
Actuellement, UDynamicMeshComponent ne prend pas en charge les fonctionnalités suivantes :
- Nanite
- Lumen
- Champ de distance de maillage
- LOD
- Rendu instancié
Les blueprints d'acteur et les blueprints d'utilitaire de l'éditeur sont toujours exécutés sur le thread de jeu. Par conséquent, les fonctions du plug-in Geometry Script qui sont appelées s'exécutent également sur le thread de jeu. Certaines fonctions du plug-in Geometry Script exécutent en interne une partie de leur travail sur les threads de tâches, par exemple les appels C++ à ParallelFor, Async ou UE::Tasks::Launch(). Cependant, cela ne se produit que dans le contexte d'une fonction unique, et la fonction n'est pas rétablie tant que tout ce travail parallèle n'est pas terminé.