Les fractals dans Elderlore
J’ai prévu de faire un usage massif des fractals dans Elderlore. Ils sont utilisés dans la version actuelle pour générer l’altitude de chaque case et peupler les terres de forêts.
A terme, ils seront utilisés pour construire les chaines de montagne…
Création des Terres :
En m’inspirant de l’algorithme décrit ici, j’ai implémenté l’algorithme de Diamant-Carré dans la fonction Creation_Plasma du module el_fractals.py d’Elderlore. Il nécessite trois paramètres en entrée, et produit en sortie une table d’altitude.
Ces paramètres en entrée sont les suivants :
- la taille de la table générée, sous forme de 2^t + 1; cette forme permet d’avoir toujours une case centrale, comme décrit dans l’artcile mentionné ci-dessus.
- le chaos du fractal, de 0.5 (paysage très découpé, beaucoup d’iles) à 1.2 (quelques grandes terres, côtes au contours réguliers);
- et le tableau de valeurs pseudo-aléatoires servant à sa construction. En fournissant une chaine de caractères comme graine de hasard, on associe au monde généré un nom unique.
L’algorithme fourni en sortie un tableau d’altitude, monde.alt, qu’on échantillonne ensuite de 0 à 100 afin de déterminer la nature de chaque case qui le compose :
- mer profonde de 0 à 30,
- mer moyenne de 30 à 50,
- bord de mer de 50 à 60,
- rivage de 60 à 70,
- plaine de 70 à 80,
- colline de 80 à 90,
- et montagne de 90 à 100.
En étudiant les cases voisines de chaque case, on construit ensuite la surface du monde dans la fonction Creation_Carte.
Création des Forêts :
Les forêts sont également générées avec l’algorithme de Diamant-Carré, selon le principe suivant :
- le chaos fourni est de l’ordre de 0.2, pour simuler des forêts disseminées de manière naturelle;
- une case forêt ne peut exister que sur une case de terre, et si aucune des 4 cases voisines n’est une case de mer.
Création des Montagnes :
L’algorithme de Diamant-Carré n’est ici pas adéquate pour générer des chaines de montagnes; il est necessaire d’employer une nouvelle méthode, et les fractals à base de cellules de Voroni sont une piste interressante.
Une implémentation en Python existe, que j’étudie actuellement.
Et ensuite ?
Je pense employer les fractals dans d’autres parties du jeu, comme la génération des villes.
Les automates céllulaires constituent une autre voie de recherche pour la création de certaines zones sous-terraines, dont j’aurais surement l’occasion de reparler prochainement
.
Aller plus loin :
D’autres méthodes existent pour générer des mondes aléatoires, dont une grande partie ont été mise en oeuvre par James Robinson dans son logiciel Landscape Studio. J’en profite pour lui envoyer toute ma gratitude pour les algorithmes et les liens qu’il m’a envoyés LOL .
L’un de ces liens est vraiment incontournable si vous cherchez à aller plus loin dans le domaine des « procedural landscape »: le site de Carl Burke. Une véritale mine d’informations, même s’il faut un peu fouiller pour trouver ce qu’on cherche.
Pour finir, James Robinson m’a également mentionné un bouquin qui approfondi le sujet, ‘Texturing and Modeling: A Procedural Approach’ par Perlin, Musgrave, Ebert et Peachey.
Related posts:
English
Très sympa ce projet
, depuis le temps que je dis que je devrais faire un roguelike scifi, genre injustement mis de côté au profit du fantasy ;-(
Merci pour les liens divers sur le thème, je vais piocher un peu
Nice! (readed thru google language tools…)
Have you seen this article of mine? http://www.santiagoz.com/articles/mundosVirtuales.php a bit outdated, but shows some uses of plasma + CA, also, I use an additional ‘rainfall’ map instead of your forest one
Heck, I feel like retaking my main roguelike instead of fiddling with arcadish ones (like CvRL and MetroidRL
)
Hi Slash, your article is very interesting, I need to read it more precisely to be sure to understand everything.
One thing: when you change the world map from fig 3 to fig 4, wouldn’t it be more simple to generate the world with a higher chaos parameter ? Thus you could obtain a world like in fig 4 in one shot.
I like the idea of a rainfall map; actually I studied it, but as I don’t have any graphic tiles for tropical trees, I didn’t care to implement it; and instead made a forest map.
Is your world generating code available ? I would definitively like to read it
.