I. Introduction▲
Aaron Chapin (développeur chez Goodgame Studios) a donné une conférence lors du Unite Europe 2016 sur la génération procédurale de contenu.
II. Vidéo▲
Unite Europe 2016 - Génération procédurale de contenu
III. Résumé▲
Aaron Chapin donne un aperçu de ce qu'est la génération procédurale de contenu et comment la mettre en place. Même si la conférence a eu lieu au cours du Unite Europe en 2016, celle-ci peut être abordée par n'importe quel créateur de jeux vidéo et n'est donc pas limitée aux utilisateurs du moteur de jeux vidéo Unity.
III-A. Définition▲
La génération procédurale de contenu est le fait de créer une ressource (texture, niveau…) à l'aide d'un algorithme utilisant un processus aléatoire ou pseudo aléatoire. Ainsi, le contenu généré peut offrir une infinité de parties différentes.
III-B. Qu'est-ce que l'on peut générer de manière procédurale ?▲
À l'aide de la génération procédurale, vous pouvez générer :
- des planètes ;
- des donjons ;
- des armes (Bordelands) ;
- de la musique ;
- des puzzles ;
- des religions ;
- des ennemis ;
- des animations ;
- des mondes (Dwarf fortress).
En conclusion, il est possible de tout générer de manière procédurale.
III-C. Quelles sont les techniques utilisées pour la génération procédurale ?▲
Chaque ressource demande une technique appropriée pour générer un résultat intéressant. Généralement, les développeurs utilisent :
- les diagrammes de Voronoi ;
- les chaînes de Markov ;
- les grammaires ;
- les algorithmes génétiques ;
- les valeurs aléatoires (bruit) ;
- les automates cellulaires ;
- les stratégies de recherche traditionnelles.
L'important est de déterminer les entrées du système et les résultats.
III-D. Intérêt du public et des développeurs▲
Que ce soit pour les joueurs ou les développeurs, la génération procédurale est intéressante. Du point de vue des joueurs, un tel monde offre une partie unique à chaque joueur, qu'il peut potentiellement partager (grâce à la graine), mais surtout, à partir de laquelle il peut raconter sa propre histoire à ses amis. De plus, cela augmente le temps de jeu et l'intérêt que le joueur aura dans sa partie.
Pour les créateurs, les designers peuvent gagner du temps en demandant à la machine de générer le monde correctement. Le jeu sera aussi plus intéressant à regarder à travers les Let's Play.
III-E. Implémentations▲
III-E-1. Fallout 4▲
L'implémentation est importante. En effet, il est possible que la génération procédurale de contenu apporte une routine lorsque celle-ci est mal exécutée (Fallout 4). Les quêtes générées automatiquement étant trop similaires, le joueur s'en lasse.
III-E-2. Génération de voitures (modèle 3D)▲
Pour générer une voiture (qui est un modèle 3D), il est nécessaire de générer les sommets, les normales et les coordonnées de textures. Ensuite, les règles de la programmation 3D s'appliquent (suivre l'ordre des sommets pour l'orientation des faces, déterminer les coordonnées de texture pour telle ou telle face).
III-E-3. À la création du jeu▲
Il n'est pas nécessaire d'utiliser la génération procédurale uniquement au cours de la partie. Il est possible de créer des outils pour les artistes ou les designers afin de générer automatiquement une partie de leur travail, qu'ils pourront modifier pour correspondre aux besoins du jeu. Ainsi, vous gagnerez du temps de production.
Finalement, il suffit de rajouter le contenu dans le jeu, tel que vous le feriez avec une ressource créée manuellement.
III-E-3-a. Ajouter des fonctionnalités à Unity▲
Unity permet d'étendre l'éditeur à travers les scripts. Pour cela, deux mots-clés peuvent être intéressants :
[CustomEditor(
typeof
(MyClass))]
public
class
MyClassEditor :
Editor {
public
override
void
OnInspectorGUI
(
)
{
et
public
class
CustomEditorWindow :
EditorWindow {
[MenuItem(
"Unite 2016/ProcGen"
)]
public
static
void
ShowWindow
(
)
{
EditorWindow.
GetWindow
(
typeof
(
CustomEditorWindow));
}
void
OnGUI
(
)
{
GUILayout.
Label
(
"Whoo Unite!"
) ;
}
III-E-4. Génération de terrain▲
Un terrain est aussi un modèle 3D. Il est aussi possible d'utiliser le système de terrain de Unity. Les techniques intéressantes pour cela sont les diagrammes de Voronoi, Lloyd Relaxation et la triangulation de Delaunay. Ensuite, vous pouvez changer la hauteur de chaque cellule pour créer votre relief. Pour une rivière, vous pouvez utiliser un algorithme de calcul des flux d'eau. Et finalement, pour les biomes vous pouvez utiliser le diagramme de Whittaker. Un peu de bruit pour augmenter l'aspect érodé et le tour est joué.
III-E-5. Génération de niveau▲
Lors de la génération d'un niveau, il faut veiller à ce que le joueur puisse atteindre la sortie. Vous pouvez utiliser une bibliothèque de segments (grammaire) que vous allez coller les uns à la suite des autres (Spellunky, Binding of Isaac, XCom 2).
Sinon, vous pouvez utiliser un explorateur aléatoire (Nuclear Throne), ou une subdivision récursive (labyrinthe). Chaque sous-portion sera creusée pour créer une entrée et une sortie, connectées aux portions précédentes et suivantes.
III-E-6. Circuit▲
Pour créer un circuit (une boucle), vous pouvez placer des blocs se recouvrant les uns sur les autres et dessiner votre circuit en faisant la boucle autour de ces blocs.
III-F. Outils▲
Certains outils pour les jeux vidéo utilisent la génération procédurale :
- SpeedTree (génération d'arbres) ;
- Sceelix (génération de scènes 3D) ;
- Voxel Farm (génération de monde).
IV. Liens▲
V. Commenter▲
Vous pouvez commenter et donner vos avis dans la discussion associée sur le forum.