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.