Comment puis-je générer des cartes aléatoires qui ressemblent à des cartes aléatoires d'Age of Empires II?


18

J'aime la façon dont Age of Empires II génère des cartes aléatoires (bonne variété, transitions décentes du biome, les cartes semblent aléatoires sans se sentir chaotiques), mais j'ai du mal à reproduire le style. J'ai essayé d'utiliser, par exemple, le bruit Perlin, mais tout sort soit trop homogène, ou sinon, la valeur Perlin -> l'heuristique du terrain est trop sensible et fragile pour créer une variété de types de monde.

Je me souviens que le type de carte AoE2 "The Unknown" annonçait "100 000 cartes possibles", suggérant une certaine utilisation des numéros de graines, mais je ne sais pas comment utiliser les numéros de graines pour produire la variété que j'ai vue.

Quels algorithmes et heuristiques pourrais-je utiliser pour produire des cartes aléatoires qui ressemblent à des cartes aléatoires AoE2?

Modifier pour être plus précis:

En réfléchissant davantage à mon problème et en étudiant ce que j'aime du moteur de carte aléatoire d'AoE2, je pense que mon plus gros problème est de gérer la distribution de l'eau et de la flore sur la carte . Je vois maintenant que j'ai aussi lié cela dans mon esprit avec des "transitions de biomes qui ont du sens", mais c'est un problème différent (bien que je m'attends à ce que mon utilisation continue du bruit Perlin rende la résolution difficile).

J'ai ajouté plusieurs cartes aléatoires AoE2 qui mettent en évidence ce que j'aime dans leur moteur de cartographie, que mes propres efforts ne parviennent pas à reproduire. Toutes les captures d'écran sont tirées d'un type de carte aléatoire, "Personnalisé" -> "L'inconnu". Je n'ai pas demandé au jeu d'utiliser des géographies spécifiques comme les archipels.

Vous trouverez ci-dessous des images de mon propre moteur de carte. Chaque pixel correspond à une tuile de carte AoE2.

Une complication pour mon projet est que je souhaite que les cartes soient beaucoup, beaucoup plus grandes que les cartes AoE2. Ainsi, quel que soit le moteur que j'utilise, il doit être capable de créer la gamme complète de biomes dans chaque carte, et non un ensemble restreint de biomes par carte, comme les utilisations AoE2.

Cartes Age of Empires II

Lacs intérieurs

Voici un exemple qui présente des lacs intérieurs et une sorte de choses qui ressemblent à des rivières. J'aime la façon dont la carte comprend une grande quantité d'eau dispersée, mais cette eau est encore quelque peu concentrée - il y a de grandes étendues de terre qui sont disponibles pour construire votre empire. Vous n'avez pas à passer tout le match à planifier votre ville autour de l'eau.

Îles connectées

Voici un exemple similaire où le jeu était suffisamment intelligent pour connecter des îles avec des marais traversables. Je ne peux pas imaginer comment un algorithme basé sur le bruit pourrait créer le marais là-bas, et seulement ces endroits. Notez également comment le jeu a créé le terrain de telle sorte que chaque joueur dispose de sa propre bande de terrain privée pour commencer. Cela n'a pas créé de parcelles de terrain aléatoires, puis essayez de deviner lequel serait le moins terrible pour chaque joueur.

îles

J'aime que cette carte utilise également beaucoup l'eau, mais qu'elle n'inclut pas de nombreux lacs intérieurs. Comparez-la avec la première image. J'aime la façon dont AoE2 crée des géographies entièrement différentes en utilisant les mêmes blocs de construction. Ma tentative d'utiliser le bruit Perlin a échoué ici - soit je reçois d'énormes océans tentaculaires qui éclipsent la masse terrestre, soit le pays des 10 000 lacs. J'ai également eu du mal à obtenir les îles et les continents connectés (pensez à l'Amérique du Nord / Sud).

Sec, luxuriant Désert sec

Contrastez cette image avec celle du dessus. Ils montrent que l'aridité d'une carte ne dépend pas du niveau de l'eau. La première image présente une carte presque dépourvue d'eau, mais contenant des forêts et de l'herbe. La deuxième image a une quantité modérée d'eau, mais est un désert. J'aime que cela soit possible (pensez à avoir à la fois le Nouveau-Mexique ou le Sahara et le Costa Rica dans votre monde).

Mes propres cartes

J'ai lu dans un tas d'endroits qu'un bon moyen de créer des cartes est de superposer plusieurs niveaux de bruit Perlin, chacun représentant une dimension différente des données. En suivant les recommandations populaires, je suis allé avec l'altitude et l'humidité, en sélectionnant les types de terrain de la table Whittaker ici .

J'ai pris deux cartes Perlin, quantifié les valeurs de chacune en nombres entiers via un simple if perlin_val < x { i=some_int } else if perlin_val < y..., puis mappé les paires entières (altitude, humidité) à une table des types de terrain (par exemple, [1,0] -> désert tropical, [1,1 ] -> prairies). Les océans étaient inclus dans ce système - altitude = 0 océan défini.

g1_success

Il y a une bonne variation, et à bien des égards, cela ressemble à un monde réel, mais il y a quelques problèmes:

  • Tout d'abord, il n'y a pas de modèle aux profondeurs de l'océan. Vous vous attendriez à des eaux peu profondes près du rivage et des eaux profondes plus loin, il n'y a pas de rime ou de raison pour savoir où

  • Deuxièmement, toute l'eau est concentrée dans les océans; il n'y a pas de lacs ou de rivières, car le bruit de Perlin ne descend pas soudainement à une valeur inférieure au milieu d'un continent.

  • Créer un équilibre entre les quantités de chaque biome est très, très difficile. J'attribue cela à:

    • Le bruit de Perlin suit une distribution normale, il est donc difficile d'estimer comment ajuster la probabilité de chaque mappage de dimension

    • Il est difficile d'essayer d'équilibrer plusieurs dimensions - peut-être que je veux plus (2,3), donc j'ai plus de chances d'obtenir (n, 3). Eh bien, maintenant j'en ai trop (3,3) et tout semble faux.

    • Lorsque j'ai zoomé suffisamment sur le bruit pour obtenir des données fluides, je n'obtenais pas un échantillon très complet des valeurs de Perlin. Donc, je modifierais mes distributions pour la carte devant moi, rechargerais une nouvelle carte aléatoire et obtiendrais des résultats très différents.

x-eau-séparée

J'ai essayé de résoudre le problème des rivières / lacs en faisant de l'eau à partir d'un troisième ensemble de valeurs Perlin. Une décision binaire eau / terre, puis appliquez toutes les choses ci-dessus à la terre. Cela facilite considérablement le contrôle de la distribution de l'eau (toujours pas parfait, mais mieux), mais pose le problème qu'il y a beaucoup de transitions de biomes qui n'ont pas de sens. Par exemple, des parcelles inexplicables de désert au milieu de prairies luxuriantes, de neige sur la plage, etc. Il est également difficile de contrôler les proportions des biomes terrestres, pour les raisons mentionnées ci-dessus.

Défaillance unidimensionnelle

En regardant les problèmes ci-dessus, j'ai essayé un algorithme plus simple qui ne mappait le bruit Perlin qu'à une seule dimension. J'ai maintenant un éventail de types de terrains qui vont de 0 = océan profond -> 1 = océan peu profond -> 2 = plage ... -> N = neige. Bien que cela donne des îles et des continents et facilite beaucoup plus l'équilibre de la proportion de chaque terrain, les types de terrain sont beaucoup trop groupés. Chaque masse terrestre ressemble à une carte d'élévation, généralement sans types de terrain dispersés sur sa surface. Chaque masse terrestre a approximativement les mêmes caractéristiques, toujours dans le même ordre et toujours dans la même forme annulaire.


Je ne suis pas sûr que quiconque ne faisant pas partie de l'équipe de développement d'origine puisse vraiment répondre à votre question, mais je dirais que le nombre de graines est bien inférieur à ce que vous attendez. La graine génère presque certainement différentes cartes par type de carte de base, et les inclure toutes dans n'importe quelle combinaison est probablement ce qui lui permet d'atteindre 100 000.
Magus

Cette question semble être hors sujet car elle demande des détails d'implémentation sur un jeu déjà existant spécifique, plutôt que sur la création d'un jeu.
Trevor Powell

@TrevorPowell Après avoir examiné les directives pour les questions sur le sujet de ce site, j'ai reformulé la question.
spiffytech

Vous avez publié cette modification environ dix secondes après mon commentaire. Voilà le service! ;)
Trevor Powell

1
-1 Encore trop large je pense. Vous devez être précis sur la signification de «cartes qui ressemblent à». Des exemples spécifiques de ce dont vous parlez sont nécessaires pour répondre à cette question. La génération procédurale est plus artistique que les gens ne le pensent souvent. La création et la perception de l'art est un sujet subjectif. Choisissez une chose spécifique sur laquelle vous souhaitez vous concentrer et ne posez que des questions à ce sujet. La portée de cette question est actuellement très large.
MichaelHouse

Réponses:


9

Consultez l'excellent article d'Amit Patel qui, à mon avis, est une sorte de ressource par excellence pour la génération procédurale de terrain ...

http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/

La chose clé qu'il fait est d'utiliser la structure graphique pour modéliser son terrain, pas des cartes de bruit droites (Perlin et al). Je ne vais pas intégrer ses illustrations, mais lisez l'article, et je pense que vous trouverez utile de vous faire réfléchir à une approche différente.

Si vous créez un jeu de type CIV / AOE, le placement des ressources sera important. Vous ne pouvez pas avoir des ressources clés trop rares ou des ressources de grande valeur trop courantes. Si vous supposez que chaque polygone est une zone avec une caractéristique donnée (voir les illustrations de l'article, cela aura plus de sens), je pourrais voir affecter des ressources à chaque polygone en fonction d'un algorithme de votre choix. Vous pouvez devenir assez intelligent en faisant en sorte que les ressources d'un polygone soient statistiquement biaisées par les voisins afin qu'une forêt à côté d'un désert soit rare, mais une forêt à côté de prairies plus commune par exemple.


2
Le guide d'Amit produit un terrain trop réaliste pour Age of Empires. :)
Seth Battin

Hehe oui, c'est vrai. Mais le concept de base d'utiliser des cellules de tailles différentes (où chacune est un type de terrain spécifique) fonctionnerait bien comme une approche, je pense. Supprimez l'idée de la hauteur du terrain de l'équation.
Tim Holt

J'ai examiné l'article d'Amit, mais il est optimisé trop étroitement autour d'une île unique. Faire de l'élévation une simple fonction de la distance du rivage produirait des résultats délicats avec plusieurs îles ou des continents plus grands, et sa méthode de distribution de l'eau suppose un pic proéminent dans le paysage qui finit par se déverser dans l'océan. Si je devais supprimer la hauteur du terrain du schéma d'Amit, je ne sais pas comment adapter son idée de distribution de biomes à mon projet.
spiffytech

5

Je crée des scripts de carte aléatoires pour Age of Empires 2 . Mon plus récent est pour la version HD.

Si vous cherchez à comprendre comment créer des cartes pour Age of Empires 2, voici cet excellent guide RMS (Random Map Scripting) .

Age of Empires utilise un système expert, permettant aux scripts d'écrire des routines pour les règles de génération, dont vous pouvez apprendre beaucoup. En ce qui concerne les régions, j'imagine qu'il s'agirait simplement de masquer des zones et d'appliquer différents scripts / routines aux zones masquées en conséquence. Vous pouvez facilement voir les règles de génération des scripts de carte existants en les ouvrant dans un éditeur de texte. J'écris le mien dans le bloc-notes

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.