Comment puis-je identifier des régions caractéristiques dans un monde généré de manière procédurale?

26

Je construis une île. J'utilise la solution classique de l'altitude: avec une fonction de construction de collines, en évitant les coins de la carte, je fais de l'altitude. Ensuite, le bruit perlin me donne quelques variables climatiques pour gérer les biomes. Maintenant, je suis confronté à deux défis qui sont en quelque sorte connectés:

  • Dans Dwarf Fortress, l'un des aspects intéressants de la génération du monde est la façon dont le jeu semble "connaître" les zones et leur donner des noms, bien que ce ne soient pas des formes rectangulaires. J'aimerais pouvoir "reconnaître" mes forêts, mes rivières, mes collines ... une idée du type d'algorithme que je pourrais utiliser pour scanner ma carte et interpréter ses zones? Et comment stockeriez-vous cela? J'utilise un graphe C ++ de base composé d'un vecteur de vecteur d '"objet tuiles".

  • Cette île doit être divisée en zones politiques, pas seulement en régions purement naturelles. Je pourrais utiliser des montagnes et des rivières pour faire des "frontières naturelles", mais ma carte générée par la procédure ne garantit pas que j'aurai de belles "enclaves" qui formeraient un royaume; Je pouvais me retrouver avec un gigantesque espace politique "en forme de ruban" entouré de micro-royaumes. Une autre possibilité serait de rechercher des zones appropriées pour une ville ou un château. Ensuite, "développez" un espace politique autour de lui. Mais là encore, j'aimerais avoir des algorithmes bien connus avant d'essayer de concevoir les miens.

Cette question pourrait être interprétée comme un peu trop vague, donc une façon de la reformuler serait: comment partitionner (sans modifier!) Un monde généré de manière procédurale en zones adaptées au gameplay? Merci d'avance pour votre aide.

Raveline
la source
Merci pour la correction, et désolé pour la mauvaise qualité de mon anglais :)
Raveline
Votre anglais est excellent, c'est juste que le "titre" est de préférence formulé comme une question sur les sites StackExchange.
dlras2

Réponses:

21

Amitp suggère d'utiliser des bassins versants pour définir diverses régions, comme expliqué dans son article sur la génération de cartes polygonales . Les bassins versants sont mieux visibles en générant une carte à l'aide de sa démo . L'avantage d'utiliser des bassins versants pour aider à subdiviser les continents est qu'il fournit des limites perpendiculaires au rivage, tandis que les montagnes fournissent généralement des limites parallèles.

Si je subdivisais des régions géographiques, j'utiliserais une combinaison de montagnes, de bassins versants et de détection de bord sur les divers biomes de ma carte.

Je soulignerai également que les régions politiques couvrent généralement de nombreuses régions géographiques. Je générer des régions géographiques d' abord, puis attribuer à chaque région une note d'opportunité (est - ce une côte? Est - il d' or? Une bonne terre agricole?) Et le coût de Voyage (terrain de raide? Bois lourds ?.) Ensuite , en utilisant votre algorithme de pathing préféré , générer un carte thermique des déplacements entre les régions désirables. Celles-ci finiront par être vos routes, et vous pourrez construire vos frontières politiques à partir de là. Ces frontières comporteront généralement de nombreuses routes et moins de routes entre elles.

dlras2
la source
1
Merci de votre aide. Je connaissais déjà la solution d'Amit, et bien que je la trouve assez élégante, je ne connais pas assez les mathématiques derrière (je devrais les étudier, ce que je ferai tôt ou tard, mais pas maintenant!). Penser en termes de bassin versant pourrait certainement m'aider et peaufiner l'algorithme de génération de rivière ne devrait pas être trop difficile. J'adore votre solution pour construire des routes et des frontières politiques, je dois réfléchir à la façon dont je vais la mettre en œuvre, mais l'idée est géniale!
Raveline
@Raveline - Si vous utilisez la génération des frontières politiques, commentez ici et faites le moi savoir! J'adorerais voir comment ça se passe.
dlras2
13

Pour ajouter à la réponse de Dan Rasmussen :

L'une des principales raisons pour lesquelles je suis passé de Perlin Noise ( ce projet ) à l'utilisation de polygones ( ce projet ) est que les polygones fournissent une belle structure pour attribuer de plus grandes zones (régions politiques, forêts, déserts, zones nommées, limites, etc.). Commencer par la structure puis générer la carte est similaire au rendu polygonal - quelque chose qui est relativement facile. Commencer par la carte puis déduire la structure est similaire à la vision par ordinateur - quelque chose qui est relativement difficile, mais possible. Je veux à la fois la structure et la carte, j'ai donc décidé d'opter pour la méthode relativement facile de construire une carte au-dessus de la structure (nœuds et bords).

Même alors, j'ai trouvé que je voulais des structures plus grandes que ce que j'avais généré. Les bassins versants étaient une tentative de construire ces structures plus grandes, mais je dois essayer plus d'approches de regroupement des polygones. Je n'ai pas trouvé quelque chose dont je suis satisfait.

Je ne sais pas comment Dwarf Fortress le fait. Étant donné à quel point ces gars sont brillants, je ne serais pas surpris s'ils avaient un algorithme sophistiqué de «vision par ordinateur».

amitp
la source
Je comprends le raisonnement, mais je ne suis pas sûr que votre chemin soit aussi simple ... Comme mon projet est assez humble, je vais essayer de patcher quelque chose de pas trop sophistiqué, mais sans polygones, car cela signifierait étudier beaucoup plus les algorithmes implicite. (PS: votre site Web est une source d'inspiration incroyable et j'adore ça!)
Raveline
3
l'article sur la génération de cartes polygonales était superbe.
Raine
3

Pour votre première question, ma meilleure hypothèse serait d'utiliser un algorithme de détection des bords pour trouver les limites de vos régions naturelles (forêt, collines, ...). Il existe de nombreux algorithmes pour ce type de problème.

Pour la deuxième question, vous pouvez utiliser votre propre idée pour faire apparaître un château (généralement au sommet d'une colline pour une bonne défense et près de l'eau douce), puis utiliser un algorithme voronoi pour avoir des régions autour de chaque château. Vous pouvez utiliser le bruit ou vos limites de biomes pour rendre les limites plus réalistes.

XGouchet
la source