Le framework de génération procédurale de contenu (PCG) est une trousse à outils permettant de créer vos propres outils et contenus procéduraux dans l'Unreal Engine. Ce framework contient plusieurs modes de PCG qui facilitent la création de mondes plus vastes via la génération procédurale de contenu. Les modes de génération divisent le domaine de génération d'un composant de PCG en une grille, chaque cellule contenant son propre composant de PCG local.
Sur une grande grille, vous pouvez générer de grands maillages bien visibles, par exemple des arbres ou des rochers. Sur une petite grille, vous pouvez créer des détails plus petits comme de l'herbe, des fleurs et des pierres. Cette approche offre un contrôle plus précis sur l'exécution des outils de PCG et permet d'optimiser les performances des outils qui couvrent une grande partie de l'espace.
Il existe quatre modes de PCG :
Génération non partitionnée (par défaut)
Utiliser la génération partitionnée
Par défaut, tous les maillages générés par un composant de PCG sont contenus dans le domaine du composant, notamment un volume, ou liés à une spline. Ce mode fonctionne pour les ressources de PCG de plus petite taille, mais peut entraîner des problèmes de performances pour les ressources qui couvrent une zone plus vaste. La génération partitionnée génère les maillages qui en résultent sur une grille définie par l'utilisateur. Les données sont réparties entre chaque cellule, ce qui facilite le chargement dynamique avec d'autres systèmes tels que World Partition et l'instanciation de niveau.
Activer le partitionnement dans le graphique
Pour activer/désactiver la génération partitionnée sur un composant de PCG :
Sélectionnez la ressource de PCG dans votre niveau.
Cliquez sur la case à cocher en regard de Est partitionné dans le panneau Détails.
Configurer la taille de la grille de partition
La taille de la grille de partition est définie par l'option Taille de grille de partition sur PCGWorldActor :
Pour configurer la taille de la grille :
Sélectionnez PCGWorldActor dans l'organiseur.
Modifiez la valeur de l'option Taille de grille de partition.
Sélectionnez chaque ressource de PCG dans votre niveau et cliquez sur Nettoyer dans le panneau Détails.
Cliquez sur le bouton Générer pour regénérer le résultat.
Utiliser la génération hiérarchique
La génération hiérarchique prend en charge la génération de maillages par le biais de la PCG à plusieurs niveaux. Ce type de génération remplace le paramètre Taille de grille de partition utilisé dans la génération partitionnée à l'aide du nœud Grid Size et vous permet d'ajuster précisément votre génération de maillages.
Le nœud Grid Size permet de personnaliser la taille de la grille de génération pour toutes les données générées en aval de ce nœud. Il doit être placé avant tout nœud d'échantillonneur.
Activer la génération hiérarchique dans le graphique
Pour activer la génération hiérarchique dans votre graphique PCG :
Ouvrez votre graphique PCG et cliquez sur les paramètres du graphique.
Cliquez sur la case en regard de l'option Utiliser la génération hiérarchique.
Ouvrez le menu déroulant Taille de grille HiGen - Par défaut et sélectionnez une valeur.
Enregistrez votre graphique PCG.
Pour utiliser la génération hiérarchique, vos composants de PCG doivent être partitionnés. Assurez-vous que l'option Génération partitionnée est activée dans votre niveau avant d'utiliser cette fonctionnalité.
Configurer les paramètres de taille de grille
Utilisez le nœud Grid Size pour personnaliser la génération de vos maillages dans le graphique PCG :
Recherchez et ajoutez le nœud Grid Size avant le nœud d'échantillonneur dans chaque branche de votre graphique PCG où vous souhaitez remplacer la taille par défaut de la grille de génération hiérarchique.
Cliquez sur le nœud Grid Size et définissez le paramètre Taille de grille HiGen.
Enregistrez le graphique.
Générez à nouveau le résultat dans votre niveau.
Utilisez la taille de votre maillage pour déterminer la taille de grille appropriée dans le graphique. Les grands maillages sont souvent moins nombreux que les petits maillages et doivent être placés sur une grille de plus grande taille pour faciliter le chargement dynamique. Les petits maillages sont plus nombreux et doivent être placés sur une grille de plus petite de taille.
La génération hiérarchique utilise les instructions d'exécution suivantes :
Les nœuds qui ne suivent pas un nœud Grid Size dans votre graphique PCG génèrent des données en utilisant la valeur définie dans le paramètre Taille de grille HiGen - Par défaut.
Les données générées sur une grille de taille plus grande sont disponibles en tant que données mises en cache durant l'exécution d'une grille plus petite. Elles sont répercutées dans un graphique en passant d'une grille de grande taille à une grille de plus petite taille, mais pas d'une grille de petite taille à une grille de plus grande taille.
Si un nœud dispose de plusieurs entrées utilisant des données provenant de plusieurs tailles de grille, la sortie est générée avec la plus petite taille de grille.
Utiliser la taille de grille sans limites
Dans l'exemple ci-dessous, un nœud Mesh Sampler échantillonne un maillage de rocher sur un volume de PCG :
L'échantillonneur échantillonne le contenu du volume en fonction du paramètre Taille de grille HiGen - Par défaut, puis exécute l'opération gourmande en performances à quatre reprises, une pour chaque cellule de grille dans le volume. Avec cette configuration de graphique, les performances se dégradent à mesure que la taille du volume augmente.
Dans ce cas, il est recommandé d'utiliser la taille de grille sans limites. L'option Sans limites supprime les restrictions de grille pour le composant de PCG et exécute les nœuds une fois avec cette de taille de grille. Il est alors possible d'appliquer des restrictions de grille à l'aide du nœud Grid Size.
Les tailles de grille des sous-graphiques PCG sont désactivées. Ces sous-graphiques utilisent la taille de grille de leurs données d'entrée ou de leur graphique parent.
Il est possible de générer des données de points en double lors du transfert de données d'une grille plus grande vers une grille plus petite. C'est notamment le cas lorsque les données générées pour une grille de plus grande taille sont répliquées dans chaque cellule d'une grille de plus petite taille, ce qui a un impact significatif sur les performances. Vous pouvez éliminer les données en double en utilisant le nœud Cull Points Outside Actor Bounds afin de supprimer les points des données de point qui se trouvent en dehors de la plus petite cellule de la grille.
Utiliser la génération à exécution
La génération à l'exécution est un mode de génération propre aux composants de PCG qui génère des données et les nettoie dynamiquement à proximité des sources de génération PCG. Ce mode est disponible dans l'éditeur, dans Play in Editor (PIE) et dans les builds autonomes.
Utilisée en combinaison avec la génération hiérarchique, la génération à l'exécution permet de diffuser efficacement les niveaux de détail plus élevés uniquement là où cela est nécessaire.
Sources de génération
Les sources de génération représentent des points dans le monde qui permettent aux composants générés à l'exécution de générer des maillages à proximité.
À l'instar de World Partition, la PCG utilise les sources de chargement dynamique suivantes :
Sources du hublot de l'éditeur : sources associées au hublot de l'éditeur actif ou ciblé lorsque l'option Traiter le hublot de l'éditeur comme source de génération est activée pour l'acteur PCGWorldActor.
Sources du joueur : sources associées aux contrôleurs de joueur dans le niveau.
Sources de chargement dynamique de World Partition : sources associées à n'importe quel élément qui fait office de fournisseur de source de chargement dynamique à partir du système World Partition (PlayerController, WorldPartitionStreamingSourceComponent, etc.).
Composants de source de génération PCG : sources utilisées comme source de génération générique pouvant être associée à n'importe quel acteur.
Le paramètre Rayons de génération du graphique PCG détermine la plage de valeurs à laquelle les sources de génération affectent les composants de PCG. Il est défini pour chaque taille de grille partitionnée. Lorsqu'un composant de PCG généré à l'exécution se trouve dans ce rayon, il est programmé pour la génération. Lorsqu'un composant ne se trouve plus dans ce rayon (sa valeur a été modifiée via le paramètre Multiplicateur du rayon de nettoyage), il est nettoyé.
Il est également possible de remplacer les rayons de génération sur chaque composant de PCG du niveau à l'aide du panneau Détails en activant le paramètre Remplacer les rayons de génération.
Le rayon de génération de base s'applique aux composants non partitionnés ; en revanche, le niveau de grille Sans limites s'applique aux composants de génération hiérarchique partitionnés.
Il est recommandé d'éviter les petites tailles de grille dont le rayon de génération est supérieur aux grandes tailles de grille. La taille de chaque rayon de génération doit augmenter par rapport au rayon précédent.
Stratégies de planification
Les stratégies de planification permettent de définir des règles pratiques concernant l'ordre dans lequel les composants générés à l'exécution sont planifiés pour être générés. La stratégie de planification par défaut utilise la distance et la direction de vue pour classer par ordre de priorité les composants qui se trouvent devant ou à proximité d'une source de génération.
Les stratégies de planification sont définies pour chaque composant et se trouvent dans le panneau Détails des composants de PCG.
Dans l'Unreal Engine 5.5, l'ajout du paramètre Taille de grille HiGen - Exponentielle a considérablement augmenté l'importance relative de pondération de la direction dans la stratégie de planification. Si votre contenu a été créé avant la version 5.5, il est possible que vous deviez définir des valeurs de pondération de la direction inférieures.
Utiliser l'escamotage de champ de vision
Si vous sélectionnez Utiliser l'escamotage de champ de vision dans le panneau Détails d'une ressource de PCG, cette ressource vérifie si ce composant est visible en fonction d'un champ de vision donné, avant de générer un composant. Par exemple, si la caméra du joueur constitue le champ de vision, la ressource escamote ou décide de ne pas générer un composant qui ne serait pas visible du point de vue de la caméra du joueur.
Utilisez les contrôles Générer un modificateur de limites et Nettoyer modificateur de limites pour générer ou nettoyer les composants à une certaine distance avant qu'ils n'entrent dans le champ de vision. Cela permet d'éviter que les composants n'apparaissent subitement lorsque la caméra est pointée sur eux. Le modificateur de nettoyage est toujours supérieur ou égal au modificateur de génération.
Activer la génération à l'exécution
Pour activer la génération à l'exécution dans votre graphique PCG :
Dans le panneau Détails de votre ressource de PCG, définissez le paramètre Déclencheur de génération sur Générer à l'exécution.
Pour tester la génération à l'exécution dans le hublot :
Sélectionnez PCGWorldActor dans l'organiseur.
Veillez à cocher la case Traiter le hublot de l'éditeur comme source de génération.
Les maillages doivent être générés dans un rayon autour de la vue de la caméra dans le hublot.
Configurer la génération à l'exécution
Les rayons de génération sont définis pour chaque niveau de taille de la grille dans les paramètres du graphique PCG ou peuvent être configurés dans le panneau Détails d'un composant de PCG pour répondre aux besoins du niveau.
Pour configurer les rayons de génération :
Ouvrez les paramètres Graphique PCG et développez Génération à l'exécution > Rayons de génération.
Ajustez le rayon de génération pour chaque taille de grille. L'option Rayon de génération est appliquée à la taille de grille par défaut ou lorsque vous utilisez l'option Sans limites.
Ajustez le paramètre Multiplicateur du rayon de nettoyage. Ce multiplicateur s'applique au rayon de génération pour déterminer le rayon à partir duquel les maillages sont supprimés du niveau.
Enregistrez le graphique.
La ressource de PCG ne génère désormais que des maillages dans un rayon autour de la visionneuse.
Débogage et remplacements à l'exécution
Plusieurs commandes de console sont utiles pour déboguer la génération à l'exécution pendant l'exécution.
| Commande de console | Description |
|---|---|
pcg.RuntimeGeneration.Enable | Cette commande permet d'activer ou de désactiver la génération à l'exécution. |
pcg.RuntimeGeneration.EnableDebugging | Cette commande permet d'activer la journalisation détaillée du planificateur de génération à l'exécution afin de connaître son comportement exact. |
pcg.RuntimeGeneration.EnablePooling | Cette commande permet d'activer ou de désactiver le regroupement des acteurs de partition générés à d'exécution afin d'éviter les allocations constantes. Cette option est activée par défaut. |
pcg.RuntimeGeneration.BasePoolSize | Cette commande permet définit le nombre initial d'acteurs de partition générés à l'exécution dans le pool. Elle est définie sur |
pcg.RuntimeGeneration.FramesBetweenGraphSchedules | Cette commande permet de définir le nombre de ticks que le planificateur de génération à l'exécution doit attendre entre les composants de planification pour la génération. Cette commande est utile lors du débogage de votre stratégie de planification en vue d'observer l'ordre exact dans lequel les composants sont planifiés. Elle est par défaut définie sur 0, ce qui permet de planifier toutes les générations dans un seul tick. |
pcg.RuntimeGeneration.NumGeneratingComponents | Ce contrôle définit le nombre de composants de PCG générés en parallèle. Il permet de limiter l'utilisation du processeur par la PCG et de contrôler le temps d'affichage de certains composants. La définition d'une valeur inférieure a un impact visible sur la pondération de direction et de distance, car lorsque la génération de composant a lieu en parallèle, l'exécution n'est pas garantie. Ce contrôle est par défaut défini sur |
pcg.FrameTime | Cette commande alloue le temps (en millisecondes) nécessaire à la PCG pour s'exécuter par image. Elle est par défaut définie sur |
pcg.EditorFrameTime | Cette commande alloue le temps (en millisecondes) nécessaire à la PCG pour s'exécuter par image lors de l'exécution dans l'éditeur (non en mode PIE). Elle est par défaut définie sur |
Visualiser la taille de la grille dans le graphique PCG
Utilisez l'arborescence Objet de débogage pour visualiser la taille de la grille utilisée par chaque nœud dans le graphique PCG.
Pour visualiser la taille de la grille dans le graphique PCG :
Sélectionnez un composant de PCG local dans la liste de l'arborescence Objets de débogage située en bas à gauche. Le nom de chaque composant contient la taille de la grille. Par exemple,
PCGPartitionActor_12800_1_5_0/PCGComponent_1/NewPCGGraphfait partie de la grille de 12 800 cm.Cliquez sur la flèche en regard du nom du composant et sélectionnez le composant.
Dans l'exemple ci-dessus, un composant générant des maillages d'arbres est sélectionné (1). Les nœuds qui génèrent les maillages rocheux (2) et les maillages d'herbe (3) sont grisés, indiquant que ces nœuds génèrent des arbres sur une grille de taille plus petite et s'exécuteront après les nœuds d'arbres. Chaque nœud affiche la taille de sa grille (en mètres) dans le coin supérieur droit.