Algorithmes pluviométrie + création de rivière en terrain généré procéduralement

52

Je suis récemment devenu fasciné par les choses qui peuvent être faites avec un terrain procédural et j'ai commencé à expérimenter un peu la construction du monde. J'aimerais pouvoir créer des mondes qui ressemblent beaucoup à une forteresse naine avec des biomes créés à partir de cartes différentes.

La première étape a donc été faite. À l’aide de l’algorithme du carré de diamant, j’ai créé de belles cartes de hauteur. La prochaine étape est que je voudrais ajouter quelques caractéristiques de l'eau et les avoir générées de façon assez réaliste avec des précipitations. J'ai lu quelques approches différentes, telles que commencer aux points hauts de la carte et "descendre" au point le plus bas voisin, se regrouper / s'éroder au fur et à mesure que l'on descend jusqu'au niveau de la mer.

Y at-il des algorithmes documentés avec cela ou sont-ils plus spontanés?

Aimeriez tous les conseils / pensées.

Picorer
la source
J'ai implémenté des fragments de l'algorithme décrit dans cet article .
chaosTechnician

Réponses:

39

Amit Patel, un utilisateur de ce site, a créé une merveilleuse ressource d'informations sur la génération de monde aléatoire qui vous sera certainement utile.

De plus, il y a d'excellentes questions / réponses sur la génération de procédures sur ce site.

Génération de routes / rivières sur une grille en 2D

Génération du monde procédural orienté sur les fonctionnalités de jeu

Comment puis-je générer des lacs et des rivières au hasard dans mon jeu?

Génération de carte aléatoire

MichaelHouse
la source
35

À l'époque où j'ai expérimenté ce genre de chose (fin des années 90), j'ai lu des papiers et des livres pour en savoir plus sur le débit d'eau, mais je n'ai pas gardé de trace de ceux que j'avais consultés. J'ai fini par faire mon propre truc parce que je voulais gérer l'érosion. Je voulais que les rivières produisent des canyons et des plaines inondables. Je voulais que les réservoirs de barrage se remplissent de sédiments. Je voulais que les rivières produisent des effets comme des lacs sinueux et sinueux. Je voulais des canaux pour l'irrigation et la dérivation de l'eau. Je voulais que les inondations endommagent les fermes et les maisons dans les plaines inondables.

J'ai gardé quelques notes (liens) dans la section Géographie de cette page . Il y a un article de Jos Stam à lire absolument. Malheureusement, je n'ai jamais organisé les notes. De plus, malheureusement, le jeu était pour OS / 2, donc je ne peux pas vous donner facilement un exécutable exécutable pour jouer. Et aussi, malheureusement, mon code est terrible, mais si vous voulez y jeter un coup d’œil, voyez water.cpp dans le code source (zip).

Choses avec lesquelles j'ai joué dans ma simulation (pas toutes réalistes):

  • Les zones proches des rivières ont un sol humide; les zones éloignées des rivières ont un sol sec. L'humidité a affecté la végétation. La végétation ralentit le débit d'eau.
  • La pluie crée de l'eau partout et à tout moment. Il coule ensuite en descente. Ensuite, il s’évapore et est absorbé par le sol. La pluie creuse les canaux de la rivière.
  • Les sources créent de l'eau tout le temps, mais seulement dans quelques endroits. Les sources maintiennent les canaux de la rivière remplis. Je n'ai pas simulé de couches rocheuses ni d'écoulement d'eau souterraine; Je viens de placer des ressorts au hasard sur des montagnes.
  • L'eau qui coule a de l'élan. Si je me souviens bien, c'était important pour faire des rivières sinueuses.
  • L'eau en mouvement rapide ramasse les sédiments; L'eau en mouvement lent dépose des sédiments devant elle. Cela sculpte les vallées fluviales.
  • Lors de la création de la carte initiale, j'ai accéléré l'écoulement de l'eau et l'érosion; pendant le jeu, il fonctionnait à vitesse normale.

Dans l’ensemble, j’ai eu l’impression que tout cela était assez amusant à jouer, mais il a fallu beaucoup d’heuristique et de peaufinage pour que cela fonctionne. Je ne suis jamais arrivé à un point où je pourrais dire que la création d'une rivière semblait naturelle et inévitable sans modifications. C'était tellement amusant (à la fois en tant que programmeur et en tant que joueur) que j'ai passé des années dessus et que je n'ai jamais terminé le reste de la partie. :)

amitp
la source
12
Parlez simplement son nom et il arrivera.
MichaelHouse
3
@ Byte56 Il est comme le candlejack de stackexcha ....
DampeS8N
2
Vous m'avez inspiré pour écrire une modification basée sur votre article sur la grille hexagonale et maintenant, vous m'inspirez encore!
Adam Arold