Le framework de génération procédurale de contenu (PCG) est une trousse à outils qui vous permet de créer vos propres contenus et outils procéduraux dans l'Unreal Engine. Le PCG confère aux artistes techniques, concepteurs et programmeurs la possibilité de créer du contenu et des outils rapides et itératifs plus ou moins complexes, qu'il s'agisse d'utilitaires de ressources (génération de biome, bâtiments) ou de mondes entiers.
Concepts et termes importants
Points : positions dans l'espace 3D générées par le graphique PCG et souvent utilisées pour faire apparaître des maillages. Les points contiennent des informations sur leurs transformations, leurs limites, leur couleur, leur densité, leur pente et leur valeur de départ. Des attributs définis par l'utilisateur peuvent leur être attribués.
Point Density : valeur utilisée par divers nœuds de graphique. Dans la vue de débogage, elle est représentée par un dégradé sur chaque point et représente la probabilité que le point existe à cette position. Une densité de 0 correspond au noir, et une densité de 1 correspond au blanc.
Configuration requise
Le framework de génération procédurale de contenu nécessite que le plug-in du framework de génération procédurale de contenu soit activé dans votre projet. Pour plus d'informations sur l'activation des plug-ins, consultez la page Travailler avec des plug-ins.
Le plug-in Geometry Script Interop du framework de génération procédurale de contenu est nécessaire pour échantillonner des points sur les maillages statiques.
Graphique de nœuds procédural
Le graphique de nœuds procédural est l'élément central du framework de génération procédurale de contenu.
Dans un format similaire à celui de l'Éditeur de matériau, les données spatiales sont transmises dans le graphique à partir d'un composant PCG de votre niveau et sont utilisées pour générer des points. Les points sont filtrés et modifiés par une série de nœuds, la sortie étant mise à jour en temps réel. Les points qui en résultent peuvent être utilisés pour faire apparaître diverses ressources.
Créer la ressource de graphique PCG
Pour créer une ressource graphique PCG, suivez les étapes ci-dessous :
Faites un clic droit dans le tiroir à contenu ou le navigateur de contenu, puis accédez à Créer une ressource avancée > PCG et sélectionnez Graphique PCG.
Choisissez le nom de la nouvelle ressource et appuyez sur Entrée.
Modèles de graphiques PCG
Après avoir créé un graphique PCG, vous pouvez marquer le graphique comme modèle, puis le sélectionner dans le menu contextuel pour en créer de nouveaux. Comme pour les modèles Niagara, vous pouvez accélérer votre flux de travail à l'aide d'un modèle de graphique PCG plutôt que de partir d'un graphique vierge.
Définir un graphique PCG comme modèle
Pour définir un modèle de graphique PCG, ouvrez le graphique et suivez les étapes suivantes :
Dans la barre d'outils, cliquez sur le bouton Paramètres du graphique pour définir les paramètres du graphique dans le panneau Détails.
Accédez à la section Informations de ressource du panneau Détails et activez la propriété Est un modèle.
Votre graphique est maintenant défini en tant que graphique de modèle.
Créer un nouveau graphique à l'aide d'un modèle
Lorsque vous créez un nouveau graphique, après avoir choisi le nom et l'emplacement de la ressource, vous pouvez sélectionner un modèle de graphique dans la fenêtre Créer un graphique à partir d'un modèle. Sélectionnez le modèle de graphique souhaité, puis cliquez sur le bouton Initialiser à partir du modèle pour créer un nouveau graphique à partir de ce modèle.
Pour désactiver l'invite de modèle lors de la création de graphiques PCG, accédez à la barre de menus et sélectionnez Édition > Préférences de l'éditeur. Ensuite, utilisez la barre de recherche ou accédez à la section Éditeur PCG des propriétés et désactivez la propriété Afficher le sélecteur de modèles sur le nouveau graphique.
Lorsque cette propriété est désactivée, la fenêtre Créer un graphique à partir d'un modèle ne s'affiche pas lorsque vous créez des graphiques PCG.
Modification du graphique PCG
Grâce à l'éditeur de graphiques PCG, vous pouvez configurer et modifier vos ressources de graphique PCG. La navigation dans l'éditeur est similaire à celle de l'éditeur de blueprints ou de l'Éditeur de matériau. Il contient aussi des outils et des panneaux spécifiques au PCG.
| Number | Description |
|---|---|
1 | Barre d'outils |
2 | Palette de nœuds |
3 | Hublot |
4 | Panneau Details |
5 | Arborescence de débogage |
6 | Liste des attributs |
Comme dans les blueprints, vous pouvez ajouter des nœuds au graphique en les faisant glisser dans le hublot depuis la palette de nœuds ou en utilisant le menu contextuel.
Les modifications apportées à un graphique PCG sont mises à jour en temps réel dans le hublot de l'éditeur lorsque le graphique est assigné à un composant PCG et a été utilisé pour générer du contenu.
Nœuds de PCG
Le graphique PCG est constitué d'une série de nœuds PCG, chacun exécutant une opération qui contribue au résultat final.
Ces nœuds sont divisés dans les catégories suivantes :
| Catégorie | Description |
|---|---|
Blueprint | Contient les nœuds relatifs aux blueprints. Cela inclut le nœud commun qui permet d'exécuter les blueprints d'utilisateurs dérivés de PCGBlueprintElement. |
Flux de contrôle | Contient des nœuds qui permettent de contrôler l'enchaînement de la logique dans le graphique. |
Debug | Contient des nœuds qui facilitent le débogage. |
Densité | Contient des nœuds qui affectent la densité de points. |
Filtre | Contient des nœuds qui filtrent les données selon des critères ou par point. |
Générique | Contient des nœuds qui affectent les données, mais pas les données spatiales. |
Génération hiérarchique | Contient des nœuds qui permettent de contrôler le mode de génération hiérarchique. |
Entrée Sortie | Contient des nœuds pour le chargement d'Alembic et d'autres données externes. |
IO | Contient des nœuds qui contrôlent les interactions avec des données externes. |
Métadonnées | Contient les nœuds qui interagissent avec les attributs, que ce soit sur des points ou sur des ensembles d'attributs. |
Paramètre | Contient des nœuds qui contrôlent la récupération de paramètres à partir d'acteurs ou de variables de blueprints. |
Point Ops | Contient les nœuds qui affectent les points et leurs propriétés. |
Échantillonneur | Contient les nœuds qui génèrent des points à partir d'une source de données spatiales comme les volumes, les surfaces et les maillages. |
Spatial | Contient des nœuds qui créent des relations spatiales entre des données, modifient leurs données spatiales internes ou récupèrent des données. |
Générateur | Regroupe des nœuds qui créent des données ou placent des acteurs à des emplacements de points donnés. |
Sous-graphique | Contient les nœuds qui traitent des sous-graphiques. |
Comme dans les blueprints, vous pouvez ajouter des commentaires et des nœuds de redirection pour améliorer la lisibilité de votre graphique.
Personnalisation de l'édition de graphique
L'édition des graphiques PCG peut être personnalisée grâce à un ensemble de paramètres accessibles depuis le panneau Paramètres de graphique.
Avec ces propriétés, vous pouvez personnaliser le comportement et le flux de travail de votre graphique PCG pour une expérience plus soignée. Ces paramètres peuvent ensuite être utilisés pour créer des modèles de graphique PCG qui permettent d'adapter le flux de travail de graphique PCG à votre projet.
Filtrage de nœud
Les paramètres de filtre de nœud permettent de filtrer les sélections de nœud par catégorie. Le filtre se fait sur une base d'inclusion ou d'exclusion. Pour filtrer les nœuds dans le menu contextuel de sélection, activez la propriété Filtrer les nœuds par catégorie, puis ajoutez un index à la propriété Catégories filtrées à l'aide du bouton Ajouter (+). Après avoir ajouté un index, vous pouvez taper le nom de la catégorie dans le champ de texte, ou utiliser le menu déroulant pour sélectionner une catégorie de nœud.
Modifier les filtres met à jour la sélection disponible dans la palette de nœud et également dans le menu contextuel.
Filtrage de graphique
En plus de filtrer les nœuds disponibles pour le graphique, vous pouvez aussi filtrer les sous-graphiques disponibles. Comme pour le filtrage de nœuds, activez d'abord la propriété filtre sous-graphe, puis ajoutez (+) un nouvel index et sélectionnez le sous-graphe que vous souhaitez rendre sélectionnable dans le graphique.
Attributs et métadonnées
Les attributs sont similaires aux variables. Ils stockent des données définies par leur nom et leur type. Il existe deux types d'attributs :
Attributs statiques : attributs fixes et toujours présents. Ils commencent par un
$, comme$Position.Attributs dynamiques : attributs créés lors de l'exécution et stockés dans les métadonnées des données du graphique.
Domaines de métadonnées
Lorsque vous utilisez des attributs dans des graphiques PCG, vous devez prendre en compte le domaine dans lequel se trouvent les métadonnées. Le domaine contrôle le type d'informations que vous pouvez enregistrer et la façon dont vous pouvez les utiliser et les manipuler ultérieurement. Pour chaque point de métadonnée, il faut savoir quel domaine est pris en charge et quel est le domaine par défaut. Les domaines sont précédés du préfixe @ lors de leur sélection.
La vue de liste d'attributs comporte un champ permettant de changer de domaine.
Les graphes de PCG permettent de travailler dans trois domaines. Premièrement, vous pouvez utiliser le domaine Data pour les attributs définis pour les données elles-mêmes. Le domaine Data est limité aux valeurs uniques. Vous ne pouvez donc pas stocker plusieurs valeurs comme des ensembles d'attributs. Le domaine Data peut être géré comme les autres domaines. Vous pouvez le créer, lui ajouter des attributs, ou le manipuler à l'aide d'opérations sur les métadonnées, si vous préfixez l'attribut avec @Data. Par exemple, l'attribut MyAttr dans le domaine des données serait @Data.MyAttr. Le domaine Data est le domaine par défaut pour toutes les autres données spatiales. Le domaine @Data est le domaine par défaut. Lorsqu'aucun domaine n'est spécifié.
Le deuxième domaine est le domaine Points, avec le préfixe @Points.
Le troisième domaine est le domaine Elements, qui est utilisé pour les ensembles d'attributs et utilise le préfixe @Elements.
Sélecteur d'attribut
Certains nœuds de graphique PCG peuvent être utilisés pour fournir une interopérabilité entre les attributs statiques et les attributs dynamiques via le sélecteur d'attribut.
Le sélecteur d'attributs vous fournit une liste d'attributs utilisables avec le nœud sélectionné. Le sélecteur d'attributs utilise les règles de nommage suivantes :
Les noms commençant par un $ sont des attributs statiques, tandis que ceux sans ce symbole sont des attributs dynamiques.
@Lastreprésente le dernier attribut dynamique qui a été manipulé par le nœud précédent.
Par exemple, le nœud Math permet d'effectuer des opérations mathématiques sur des attributs statiques et dynamiques :
Cliquez sur l'image pour l'afficher à sa taille réelle.
Le champ de nom du sélecteur d'attributs peut également être utilisé pour extraire les données des composants :
Dans l'image ci-dessus, $Position.ZYX fournit l'inverse des composants de $Position. Ci-dessous, vous trouverez les composants manipulables de cette manière et leurs types :
| Composant | Type |
|---|---|
Vecteurs | |
X, Y, Z, W, x, y, z, w | Double. Ne peut pas être utilisé avec l'éclairage RGBA. |
R, G, B, A, r, g, b, a | Double. Ne peut pas être utilisé avec XYZW. |
Longueur, taille | Double. Retourne la longueur du vecteur. |
Transformations | |
Emplacement, Position | Vector3 |
Scale, Scale3D | Vector3 |
Rotation | Quaternion |
Rotateurs | |
Tangage, lacet, roulis | Double |
Avant, Droite, Haut | Vector3 |
Quaternions | |
Prise en charge de l'extracteur de vecteurs | Vecteur |
Prise en charge de l'extracteur de rotateurs | Rotateur |
Remplacements de paramètres C++
Certains paramètres sont marqués comme PCG_Overridable dans les métadonnées de propriété C++. Pour les nœuds de blueprints, les variables qui sont visibles et modifiables par instance peuvent être remplacées.
Une fois remplacées, les broches sont automatiquement ajoutées au nœud en tant que broches avancées. Il existe deux types de broches :
Remplacement global : accepte un nombre illimité d'attributs et remplace tous les paramètres pour chaque attribut qui correspond exactement au nom du paramètre.
Remplacement unique : accepte un certain nombre d'attributs et remplace le paramètre spécifique si un attribut est trouvé avec une correspondance exacte avec le nom du paramètre, ou n'importe quel nom s'il n'y a qu'un seul attribut.
Les types d'attributs doivent correspondre, mais certains types peuvent être convertis.
Pour connaître le nom ou le type exact, consultez l'infobulle sur la broche de remplacement :
Puisque les domaines sont spécifiques à chaque donnée, l'API C++ de UPCGData dispose de fonctions pour savoir quels domaines sont pris en charge et pour convertir en va-et-vient entre FPCGMetadataDomainID, qui est la classe interne qui permet de spécifier un domaine de métadonnées, et FPCGAttributePropertySelector, qui est la classe exposée pour sélectionner des attributs et des propriétés. Chaque FPCGMetadataDomain est doté de son propre ensemble d'attributs et d'entrées. Ils sont indépendants les uns des autres. Les accès au domaine sont mis à jour pour accéder au bon domaine à l'aide de FPCGAttributePropertySelector.
Exemple de métadonnées Spline
Les sections suivantes fournissent des exemples de configurations de flux de travail pratiques de métadonnées de PCG.
Attributs de spline
Les attributs vous permettent de manipuler directement les propriétés des points de contrôle. Vous pouvez accéder à la liste des propriétés d'attributs suivante en cliquant sur Ajouter (+) > Spline > Points de contrôle.
| Nom | Description | Type |
|---|---|---|
$Position | Composant de localisation de la transformation du point de contrôle (dans le référentiel mondial) | Vecteur |
$Rotation | Composant de rotation de la transformation du point de contrôle (dans le référentiel mondial) | Quaternion/ Rotateur |
$Scale | Composant d'échelle de la transformation du point de contrôle (dans le référentiel mondial) | Vecteur |
$Transform | Transformation mondiale du point de contrôle | Transform |
$ArriveTangent | Arriver à la tangente au point de contrôle | Vecteur |
$LeaveTangent | Laisser la tangente au point de contrôle | Vecteur |
$InterpType | Type d'interpolation au point de contrôle de la position (identique à celui défini sur le point de contrôle de spline) | ESplinePointType |
$LocalPosition | Vecteur | |
$LocalRotation | Composant de rotation de la transformation du point de contrôle (dans le référentiel de spline) | Quaternion/ Rotateur |
$LocalScale | Composant d'échelle de la transformation du point de contrôle (dans le référentiel de spline) | Vecteur |
$LocalTransfom | Transformation locale du point de contrôle | Transform |
Données de spline
Vous pouvez aussi manipuler directement les propriétés des données. Vous pouvez accéder à la liste de propriétés de données suivante en sélectionnant Ajouter (+) > Spline > Global.
| Nom | Description | Type |
|---|---|---|
@Data.$SplineTransform | Transformation de la spline | FTransform |
@Data.$IsClosed | Si la spline est fermée ou non (lecture seule) | bool |
Métadonnées de spline
En plus des propriétés des point de contrôle, vous pouvez ajouter des attributs aux données de la spline, liées aux points de contrôle. Ces métadonnées sont interpolées lorsque l'on échantillonne la spline. Ce type de métadonnées se comporte de la même manière que les métadonnées de l'ensemble des points ou des attributs.
Comme pour les points, vous pouvez utiliser Ajouter un attribut pour créer un nouvel attribut, ou utiliser les opérations sur les métadonnées et spécifier une cible de sortie donnée pour écrire dans cet attribut.
Par ailleurs, les métadonnées sur les points de contrôle sont la valeur par défaut pour les métadonnées de spline, mais vous pouvez aussi être explicite avec @ControlPoints.
Paramètres de graphique
À l'instar des paramètres de l'Éditeur de matériau, les paramètres de graphique PCG sont des valeurs remplaçables créées par l'utilisateur. Ils permettent de créer des graphiques personnalisables pour toutes sortes de situations. Pour créer un nouveau paramètre :
Ouvrez les paramètres de graphique PCG.
Cliquez sur le bouton + à côté de Paramètres. Cette action crée un nouveau paramètre.
Cliquez sur la flèche vers le bas à côté du nouveau paramètre. Renommez-le et sélectionnez le type.
Pour modifier la valeur d'un paramètre dans un graphique PCG :
Modifiez la valeur dans les paramètres de graphique ou dans le panneau Détails d'une ressource PCG.
Pour modifier la valeur d'un paramètre sur une instance de graphique PCG :
Ouvrez la ressource dans le navigateur de contenu et modifiez la valeur, ou faites-le depuis le panneau Détails d'une ressource PCG.
Instances de graphique
Les instances de graphique PCG fonctionnent de la même manière que les instances de matériau et utilisent des paramètres de graphique pour vous aider à réutiliser vos graphiques existants en tant qu'instances ou sous-graphiques PCG :
Pour créer une instance de graphique PCG :
Sélectionnez une ressource PCG dans votre niveau.
Sélectionnez le composant PCG dans le panneau Détails.
Cliquez sur le bouton Enregistrer l'instance pour créer une nouvelle instance.
Nommez votre nouvelle instance de graphique et appuyez sur Entrée.
Composant PCG
Le graphe de nœud procédural peut échantillon votre niveau via le composant PCG. Ce composant contient une instance de votre graphique de nœuds procédural et gère la génération du contenu procédural, aussi bien dans l'éditeur qu'au moment de l'exécution. Les composants PCG sont ajoutés en tant que composant à un acteur ou utilisés dans le cadre du volume PCG, un volume de base qui permet de configurer rapidement du contenu procédural.
Pour connecter un graphique PCG à votre composant PCG, suivez les étapes ci-dessous :
Dans le hublot de l'éditeur ou l'organiseur, sélectionnez le volume PCG ou la classe de blueprint que vous souhaitez connecter.
Dans le panneau Détails, cliquez sur le composant PCG.
Cliquez sur le menu déroulant Graphique et sélectionnez le graphique de nœud PCG que vous souhaitez utiliser.
Cliquez sur le bouton Générer pour afficher votre résultat.
Prise en charge de World Partition
Lorsque des ressources PCG sont assignées à une couche de données World Partition et à une couche HLOD, le graphique PCG génère les acteurs et les assigne à la même couche de données et à la même couche HLOD.
Pour plus d'informations sur l'utilisation de PCG avec World Partition, consultez la page Utiliser PCG avec World Partition.
Débogage du PCG
Le débogage est un élément fondamental du flux de travail PCG.
Chaque nœud dispose de diverses options de débogage que vous pouvez utiliser pour visualiser les données de point à chaque étape du graphique PCG :
Rendu de débogage
Activer/désactiver le nœud
Inspecter
Activez le rendu de débogage pour chaque nœud en cochant la case Déboguer dans le panneau Détails du nœud ou en appuyant sur la touche D.
Activez ou désactivez chaque nœud en cochant la case Activé dans le panneau Détails du nœud ou en appuyant sur la touche E.
Vous pouvez également afficher tous les points générés par un nœud dans la liste d'attributs en inspectant le nœud.
Sélectionnez votre composant PCG dans l'arborescence de débogage.
Faites un clic droit sur le nœud que vous souhaitez inspecter.
Sélectionnez Inspecter. Vous pouvez également appuyer sur la touche A.
Créer un volume de forêt simple
Les outils de génération procédurale sont notamment utilisés pour la génération de biome dans un environnement de monde ouvert.
Pour créer un générateur de biome forestier de base, procédez comme suit.
Cet échantillon utilise des matériaux et des maillages statiques issus de la collection Megascans Trees: European Hornbeam téléchargée à l'aide de Fab.
Créer le niveau
Créer un nouveau projet dans l'Unreal Engine.
Créez un nouveau niveau à l'aide du modèle de niveau De base. Enregistrez votre niveau.
Supprimez le maillage statique du sol et ajoutez un nouveau paysage dans le niveau à l'aide du mode Paysage.
Utilisez les outils de sculpture pour ajouter de la diversité à votre paysage.
Créer le volume PCG
Retournez en mode Sélection et activez la fenêtre Placer des acteurs, si elle n'est pas actuellement visible.
Utilisez le champ Rechercher des classes pour trouver le volume PCG et en ajouter un à votre niveau.
Mettez à l'échelle les dimensions du volume PCG sur X=8,0, Y=8,0, Z=8,0
Créer la ressource de graphique PCG
Faites un clic droit dans le tiroir à contenu ou le navigateur de contenu, puis accédez à Créer une ressource avancée > PCG et sélectionnez Graphique PCG.
Nommez la nouvelle ressource PCG_ForestGen et appuyez sur Entrée.
Double-cliquez sur PCG_ForestGen pour ouvrir l'éditeur de graphique PCG.
Connectez le composant PCG
Dans le hublot de l'éditeur ou l'organiseur, sélectionnez le volume PCG.
Dans le panneau Détails, cliquez sur le composant PCG.
Cliquez sur le menu déroulant Graphique et sélectionnez PCG_ForestGen dans la liste.
Créer les points
Dans la fenêtre de l'éditeur de graphiques PCG, ajoutez un nœud Get Landscape Data au graphique.
Cliquez sur la sortie de ce nœud, faites-la glisser et ajoutez un nœud Surface Sampler.
Sélectionnez Échantillonneur de surface et appuyez sur la touche D pour activer/désactiver le rendu de débogage.
De retour dans la fenêtre de l'éditeur, sélectionnez le volume PCG et cliquez sur le bouton Générer dans le panneau Détails.
Vous pouvez maintenant voir les points générés dans le hublot de l'éditeur. Les points suivent la forme du paysage.
Ajouter une variation
Dans l'éditeur de graphiques PCG, sélectionnez Échantillonneur de surface.
Ajoutez plus de points en ajustant les propriétés Points par mètre carré, Étendue des points et Relâchement dans le panneau Détails.
Définissez l'option Points par mètre carré sur 0,15 pour ajouter plus de points à l'espace.
La propriété Étendue des points contrôle la taille des limites de chaque point. Définissez les valeurs de X, Y et Z sur 50.
La propriété Relâchement détermine à quel point les points générés suivent la forme de la grille. Laissez la valeur de Relâchement sur 1,0.
Ensuite, ajoutez un nœud Transform Points. Ce nœud permet d'ajouter des modifications supplémentaires de mouvement, de rotation et d'échelle à vos points dans une plage définie. Reliez la broche Sortie du nœud Surface Sampler à la broche Entrée du nœud Transform Points.
Désactivez le rendu de débogage sur le nœud Surface Sampler et activez-le sur le nœud Transform Points.
Pour ajouter de la variation à la rotation, définissez la valeur Z de la rotation maximale sur 360. Cela donne à tous les points une rotation aléatoire entre 0 et 360 degrés.
Le graphique PCG génère des points d'apparition et les fait pivoter pour les adapter à la direction normale du Paysage. Désactivez cette rotation supplémentaire en cochant la case Rotation absolue.
Pour ajouter de la variation de taille, définissez les valeurs Minium de l'échelle de X, Y et Z sur 0,5. Définissez les valeurs Maximum de l'échelle de X, Y et Z sur 1,2.
Le résultat final est un ensemble de points avec une bonne quantité de variations.
Faire apparaître les maillages statiques
Dans l'éditeur de graphiques PCG, ajoutez un nœud Static Mesh Spawner au hublot du graphique. Connectez la broche Sortie du nœud Transform Points à la broche Entrée du générateur de maillage statique.
Sélectionnez le générateur de maillage statique.
Dans le panneau Détails, trouvez l'option Entrées du maillage et cliquez sur le bouton + pour ajouter un maillage statique à faire apparaître.
Cliquez sur la flèche vers le bas à côté de Entrées de maillage pour ouvrir la matrice.
Cliquez sur la flèche vers le bas à côté de Index [0].
Cliquez sur la flèche vers le bas à côté de Descripteur.
Cliquez sur le menu déroulant de Maillage statique et sélectionnez l'arbre que vous souhaitez faire apparaître. Cet exemple utilise SM_EuropeHornbeam_Forest_01.
Vous pouvez ajouter des maillages statiques supplémentaires et équilibrer la variété en utilisant la propriété Pondération pour chaque entrée de maillage dans la matrice. L'Unreal Engine ajoute la valeur de poids de toutes les entrées de maillage statique et divise ce nombre par chaque pondération pour déterminer la probabilité d'apparition de chaque entrée.