La génération procédurale dans les jeux vidéos
dans la rubrique Dev
←
/ #25
/ rss
/ →
Derrière le concept de génération procédurale repose l'idée de générer le contenu du jeu, ses données propres, de manière pseudo-aléatoire, à partir de règles simples. Tirant sa source dans la théorie du chaos, son objectif dans les jeux vidéos est d'offrir une rejouabilité importante.
A conditions initiales identiques, un ensemble de règles données fourniront toujours le même résultat, aussi complexe soit-il. Il suffit simplement de s'assurer que ces règles soient déterministes, c'est-à-dire qu'elles ne contiennent aucun hasard.
Ainsi dans Lands of Elderlore, seules les règles de création du monde sont codées dans plusieurs algorithmes successifs. En fournissant en entrée le nom du monde à générer, on a la garantie de toujours générer le même monde. On peut dire cela d'une autre façon: le monde tout entier est compressé dans son nom.
Le concept n'est pas nouveau, puisque Elite, sorti en 1984, en usait déjà de façon immodéré en faisant tenir plusieurs galaxies peuplées de millions d'étoiles dans seulement 20 ko !
Gamasutra, dans Algorithms for an Infinite Universe, aborde également ce sujet.
Les générateurs de village
J'ai prévu d'implémenter un jour ou l'autre des villages dans Lands of Elderlore. Ils devront être tous différents, de préférence aléatoirement en fonction du type de terrain alentours (rivières, routes, forêts, mer, montagne, ...).
Voici différents essais qui ont été faits sur ce sujet.
- Introversion blog: Subversion: Subversion, le prochain jeu des créateurs indépendants de Darwinia et de Defcon, fera un usage massif de génération procédurale. Ils montrent dans leur blog un prototype de création de ville assez époustouflant, dont une video bluffante.
- Real-time procedural generation of `pseudo infinite' cities: dommage, payant
- Procedural Modelling of Cities: le Saint Graal ! Inclus les différences de terrain et la génération de routes
- Procedural City Detailing: une thèse sur le sujet
- Building and City notes : un regroupement de liens et de docs intéressants sur la création automatique de villes
- A random town generation algorithm par Kostatus et intégré dans Syrlandis town generation demo.
- PCity - Procedural Modeling and Rendering of Cities: un projet GPL de création de ville 3D sur Sourceforge
- Random Town Name Generator: un générateur de noms
- Blog: à creuser, contient des pistes de réflexion pertinentes.
Les générateurs de population
Pour peupler ces villages de villageois, plusieurs solutions existent. On cherchera ici encore les règles les plus simples qui produiront les résultats les plus riches.
De nombreux générateurs existent déjà :
- Dungeons & Dragons Dungeon Generator : un générateur de village uniquement en texte
- The Domesday Book: Un générateur de royaume, qui s'inspire de cet excellent papier: La démographie médiévale facile.
- Town generator: très complet, executable windows
Les algorithmes fractals sont le plus souvent utilisés pour générer un tableau d'altitude; c'est d'ailleurs comme cela que sont initialisés les mondes d'Elderlore. Ce sont en fait des tableaux de valeurs, échantillonnés de 0 à 100.
Imaginons maintenant que chaque case ne représente pas une portion du monde, mais simplement un individu. La valeur de la case pourra alors représenter son rang social, de 0 (le serf le plus miséreux) à 100 (le roi). Chaque case a 8 cases voisines, qui pourraient être les relations de notre individu. Le chaos du fractal déterminera dans quelles proportions un individu donné sera susceptible d'avoir des rapports sociaux avec d'autres individus de rang social différent.
Cette technique présente quelques inconvénients :
- Tout d'abord un individu donné ne pourra connaitre que 8 autres individus, ce qui peut sembler mince. On peut contourner ce problème en considérant ses voisins à deux cases de distance, voire même plus, le nombre de cases entre les deux individus étant une bonne mesure de leur affinité respective. Ou encore considérer que l'individu à deux cases est le voisin à une case de son propre voisin, et c'est bien connu, les amis de mes amis sont mes amis...
- le fractal est un carré de côté 2^n + 1, ce qui peut être restrictif sur le nombre d'individus créés, forcément sous la forme (2^n+1)^2, c'est-à-dire 9 (n=1), 25 (n=2), 81 (n=3), 289 (n=4), 1089 (n=5), 4225 (n=6), 16441 (n=7), et ainsi de suite. D'un autre côté, cela peut être un moyen simple pour quantifier les zones urbaines selon leur taille:
- 9 individus dans une maison ou un ensemble de maisons (ici tout le monde se connait directement puisque chaque case a toutes les autres cases comme voisine directe)
- 25 individus dans un hameau
- 81 individus dans un bourg
- 289 individus dans un village
- 1089 individus dans un ville moyenne
- 4225 individus dans un grande ville
- 16441 individus dans une capitale
- le cercle familiale n'est pas pris en compte. Si on considère un mari et sa femme sur deux cases mitoyennes, il faudrait que les enfants soient sur les cases immédiatement autour (il y a 5 cases autour de la mère et 5 aussi autour du père, soit 10 en tout, et 4 à proximité des deux à la fois). Sans parler des grands-parents...
Système de quêtes automatique
Avoir des quêtes à proposer au joueur, c'est bien. Si en plus elles présentent un intérêt supérieur à juste "aller livrer cette pizza au roi" ou "Arthur a oublié ses chausses, allez les chercher", c'est mieux. Mais ce qui serait formidable, ce serait de pouvoir générer ces quêtes à la volée, de manière pseudo-aléatoire. Tout en les intégrant dans le monde généré, avec sa population, ses donjons et ses villes... Vaste sujet, qui m'occupera sans doute pendant pas mal de temps.
En attendant, quelques liens utiles :
- Random RPG: un site génial avec plein d'idées pour générer des énigmes, des quêtes, ... de manière plus ou moins automatique
- La Grande Liste des Intrigues de Jeu de Rôle: un tableau très complet des intrigues de jeux de rôle.









Commentaires
1. Le mardi 30 janvier 2007 à 14:29, par Vian
2. Le mardi 30 janvier 2007 à 23:11, par Slash
3. Le mercredi 31 janvier 2007 à 13:23, par Altefcat
4. Le jeudi 1 février 2007 à 16:09, par Elks
5. Le jeudi 1 février 2007 à 18:26, par Altefcat
6. Le jeudi 1 février 2007 à 22:10, par Slash
Ajouter un commentaire