Wie kann ich zufällige Karten erstellen, die sich wie Age of Empires II-Zufallskarten anfühlen?

18

Ich mag die Art und Weise, wie Age of Empires II zufällige Karten erstellt (gute Auswahl, anständige Biome-Übergänge, Karten, die sich zufällig anfühlten, ohne chaotisch zu wirken), aber ich kämpfe darum, den Stil zu replizieren. Ich habe versucht, z. B. Perlin-Rauschen zu verwenden, aber alles ist entweder zu homogen, oder wenn nicht, ist der Perlin-Wert -> Terrain-Heuristiken zu empfindlich und zerbrechlich, um eine Vielzahl von Welttypen zu erstellen.

Ich erinnere mich an den AoE2-Kartentyp "The Unknown", der "100.000 mögliche Karten" ankündigte und die Verwendung von Startnummern vorschlug, aber ich bin nicht sicher, wie ich Startnummern verwenden soll, um die Sorte zu erzeugen, die ich gesehen habe.

Mit welchen Algorithmen und Heuristiken könnte ich zufällige Karten erstellen, die sich wie AoE2-Zufallskarten anfühlen?

Bearbeiten, um genauer zu sein:

Wenn ich weiter über mein Problem nachdenke und studiere, was mir an der zufälligen Karten-Engine von AoE2 gefällt, glaube ich, dass mein größtes Problem darin besteht, die Verteilung von Wasser und Pflanzenleben auf der Karte zu verwalten . Ich sehe jetzt, dass ich das auch mit "Biome-Übergängen, die Sinn machen" in Verbindung gebracht habe, aber das ist ein anderes Problem (obwohl ich erwarte, dass meine fortgesetzte Verwendung von Perlin-Rauschen es schwierig machen wird, es zu lösen).

Ich habe mehrere zufällige AoE2-Karten hinzugefügt, die hervorheben, was mir an ihrer Mapping-Engine gefällt, die meine eigenen Bemühungen nicht reproduzieren können. Alle Screenshots stammen vom zufälligen Kartentyp "Custom" -> "The Unknown". Ich habe das Spiel nicht angewiesen, bestimmte Regionen wie Archipele zu verwenden.

Weiter unten sind Bilder von meiner eigenen Map Engine. Jedes Pixel entspricht einer AoE2-Kartenkachel.

Eine Komplikation für mein Projekt ist, dass die Karten viele, viele Male größer sein sollen als AoE2-Karten. Welche Engine auch immer ich verwende, muss in der Lage sein, die gesamte Bandbreite der Biome in jeder Karte zu erstellen, und nicht nur einen schmalen Satz von Biomen pro Karte, wie dies bei AoE2 der Fall ist.

Age of Empires II-Karten

Binnenseen

Hier ist ein Beispiel, das Binnenseen und einige flussaussehende Dinge zeigt. Mir gefällt, dass die Karte eine große Menge Wasser enthält, aber das Wasser ist immer noch etwas konzentriert - es gibt große Landstriche, die für den Aufbau Ihres Reiches zur Verfügung stehen. Sie müssen nicht das ganze Spiel damit verbringen, Ihre Stadt am Wasser zu planen.

Verbundene Inseln

Hier ist ein ähnliches Beispiel, in dem das Spiel intelligent genug war, um Inseln mit überquerten Sümpfen zu verbinden. Ich kann mir nicht vorstellen, wie ein auf Rauschen basierender Algorithmus den Sumpf dort erschaffen würde, und nur diese Orte. Beachten Sie auch, wie das Spiel das Land so geschaffen hat, dass jeder Spieler seinen eigenen privaten, großen Landstreifen hat, mit dem alle beginnen. Es wurden keine zufälligen Landstriche erstellt, und es wurde nach bestem Wissen ermittelt, welches Land für jeden Spieler am wenigsten schrecklich wäre, um anzufangen.

Inseln

Ich mag, dass diese Karte auch viel Wasser verbraucht, aber nicht viele Binnenseen enthält. Vergleichen Sie es mit dem ersten Bild. Mir gefällt die Art und Weise, wie AoE2 mit denselben Bausteinen völlig unterschiedliche Geografien erstellt. Mein Versuch, Perlin-Lärm zu nutzen, ist hier gescheitert. Entweder bekomme ich riesige Ozeane, die die Landmasse in den Schatten stellen, oder das Land der 10.000 Seen. Ich fand es auch schwierig, beide Inseln und verbundene Kontinente zu bekommen (denken Sie an Nord- / Südamerika).

Trocken, üppig Trockene Wüste

Vergleichen Sie dieses Bild mit dem darüber. Sie zeigen, dass die Trockenheit einer Karte nicht vom Wasserstand abhängt. Das erste Bild zeigt eine Karte, die fast wasserfrei ist und dennoch Wälder und Gras enthält. Das zweite Bild hat eine moderate Menge an Wasser, ist jedoch eine Wüste. Ich mag, dass das möglich ist (denken Sie daran, dass Sie sowohl New Mexico als auch die Sahara und Costa Rica in Ihrer Welt haben).

Meine eigenen Karten

Ich habe an vielen Stellen gelesen, dass eine gute Möglichkeit zum Erstellen von Karten darin besteht, mehrere Perlin-Rauschpegel zu überlagern, die jeweils eine andere Datendimension darstellen. Ich folgte den gängigen Empfehlungen in Bezug auf Höhe und Feuchtigkeit und wählte hier Geländetypen aus der Whittaker-Tabelle aus .

Ich nahm zwei Perlin-Karten, quantisierte die Werte von jeder in Ganzzahlen über eine einfache if perlin_val < x { i=some_int } else if perlin_val < y..., dann kartierte ich die (Höhe, Feuchtigkeit) Ganzzahlpaare auf eine Tabelle von Geländetypen (z. B. [1,0] -> tropische Wüste, [1,1 ] -> Grünland). Ozeane wurden in dieses System einbezogen - Höhe = 0 definierter Ozean.

g1_erfolg

Es gibt gute Abwechslung und in vielerlei Hinsicht fühlt es sich wie eine echte Welt an, aber es gibt ein paar Probleme:

  • Erstens gibt es kein Muster für die Tiefen des Ozeans. Sie erwarten seichtes Wasser in Ufernähe und tiefes Wasser weiter draußen, es gibt keinen Reim oder Grund, wo es ist

  • Zweitens konzentriert sich das gesamte Wasser in den Ozeanen. Es gibt keine Seen oder Flüsse, weil der Perlin-Lärm mitten auf einem Kontinent nicht plötzlich auf einen niedrigeren Wert absinkt.

  • Es ist sehr, sehr schwierig, ein Gleichgewicht zwischen den Mengen der einzelnen Biome herzustellen. Ich schreibe dies zu:

    • Das Perlin-Rauschen folgt einer Normalverteilung, daher ist es schwierig zu schätzen, wie die Wahrscheinlichkeit der einzelnen Dimensionszuordnungen angepasst werden soll

    • Der Versuch, mehrere Dimensionen auszugleichen, ist schwierig - vielleicht möchte ich mehr (2,3), damit ich die Wahrscheinlichkeit erhöhe, (n, 3) zu bekommen. Nun, jetzt habe ich zu viel (3,3) und alles sieht falsch aus.

    • Wenn ich das Rauschen so weit hineinzoomte, dass glatte Daten erhalten wurden, konnte ich keine vollständige Stichprobe der Perlin-Werte erhalten. Also würde ich meine Verteilungen für die Karte vor mir optimieren, eine neue zufällige Karte laden und ganz andere Ergebnisse erzielen.

x-Wasser trennen

Ich habe versucht, das Problem mit Flüssen / Seen zu beheben, indem ich Wasser aus einem dritten Satz von Perlin-Werten gemacht habe. Eine binäre Wasser / Land-Entscheidung, dann wende alle oben genannten Dinge auf das Land an. Dies erleichtert die Kontrolle der Wasserverteilung drastisch (immer noch nicht perfekt, aber besser), bringt jedoch das Problem mit sich, dass es viele Biome-Übergänge gibt, die keinen Sinn ergeben. Zum Beispiel unerklärliche Wüstengebiete inmitten üppiger Wiesen, Schnee am Strand usw. Aus den oben genannten Gründen ist es auch immer noch schwierig, den Anteil der Landbiome zu kontrollieren.

Eindimensionales Versagen

Angesichts der obigen Probleme habe ich einen einfacheren Algorithmus ausprobiert, der das Perlin-Rauschen nur auf eine Dimension abbildet. Ich habe jetzt eine Reihe von Geländetypen, die von 0 = tiefes Meer -> 1 = flaches Meer -> 2 = Strand ... -> N = Schnee eskalieren. Während dies zu Inseln und Kontinenten führt und es viel einfacher macht, den Anteil jedes Geländes auszugleichen, sind die Geländetypen viel zu gruppiert. Jede Landmasse sieht aus wie eine Höhenkarte, in der Regel ohne über die Oberfläche verstreute Geländetypen. Jede Landmasse hat ungefähr die gleichen Merkmale, immer in der gleichen Reihenfolge und immer in der gleichen ringförmigen Form.

spiffytech
quelle
Ich bin mir nicht sicher, ob jemand, der nicht zum ursprünglichen Entwicklerteam gehört, Ihre Frage wirklich beantworten kann, aber ich würde vorschlagen, dass der Startwert viel niedriger ist als erwartet. Der Startwert generiert mit ziemlicher Sicherheit unterschiedliche Karten pro Basiskartentyp, und es ist höchstwahrscheinlich, dass er 100.000 erreicht, wenn alle in einer beliebigen Kombination enthalten sind.
Magus
Diese Frage scheint nicht zum Thema zu gehören, da Details zur Implementierung eines bestimmten bereits vorhandenen Spiels abgefragt werden, anstatt ein Spiel zu erstellen.
Trevor Powell
@ Trevor Powell Nachdem ich die Richtlinien für themenbezogene Fragen für diese Site gelesen habe, habe ich die Frage umformuliert.
Spiffytech
Sie haben diese Änderung ungefähr zehn Sekunden nach meinem Kommentar veröffentlicht. Das ist Service! ;)
Trevor Powell
1
-1 Ich denke immer noch zu breit. Sie müssen genau wissen, was "Karten, die sich anfühlen" bedeutet. Zur Beantwortung dieser Frage sind spezielle Beispiele für das, worüber Sie sprechen, erforderlich. Prozedurale Generierung ist künstlerischer, als die Leute oft denken. Kunstschöpfung und Wahrnehmung ist ein subjektives Thema. Wählen Sie eine bestimmte Sache, auf die Sie sich konzentrieren möchten, und fragen Sie nur danach. Der Umfang dieser Frage ist derzeit sehr breit.
MichaelHouse

Antworten:

9

Schauen Sie sich Amit Patels hervorragenden Artikel an, der meiner Meinung nach eine fundamentale Ressource für die prozedurale Generierung von Terrain darstellt ...

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

Das Wichtigste, was er tut, ist die Verwendung von Graphen zur Modellierung seines Geländes und nicht die Darstellung von Störgeräuschen (Perlin et al.). Ich werde seine Illustrationen nicht einbetten, sondern den Artikel lesen, und ich denke, Sie werden es hilfreich finden, wenn Sie über einen anderen Ansatz nachdenken.

Wenn Sie ein Spiel vom Typ CIV / AOE erstellen, ist die Platzierung der Ressourcen wichtig. Es kann nicht sein, dass Schlüsselressourcen zu selten sind oder dass hochwertige Ressourcen zu häufig sind. Wenn Sie davon ausgehen, dass jedes Polygon eine Zone mit einem bestimmten Merkmal ist (siehe Abbildungen des Artikels, dies ist sinnvoller), könnte ich jedem Polygon Ressourcen zuweisen, die auf einem Algorithmus Ihrer Wahl basieren. Sie können ziemlich klug werden, indem Sie die Ressourcen in einem Polygon von den Nachbarn statistisch voreingenommen machen, sodass ein Wald neben einer Wüste selten ist, ein Wald neben einer Wiese jedoch beispielsweise häufiger.

Tim Holt
quelle
2
Amits Leitfaden produziert Gelände, das für Age of Empires zu realistisch ist. :)
Seth Battin
Hehe ja, stimmt. Aber das Grundkonzept der Verwendung von Zellen unterschiedlicher Größe (wobei jede einen bestimmten Geländetyp darstellt) würde meiner Meinung nach gut funktionieren. Entfernen Sie die Idee der Geländehöhe aus der Gleichung.
Tim Holt
Ich habe den Artikel von Amit durchgesehen, aber er ist im Hinblick auf eine einzelne Insel zu eng optimiert. Eine einfache Funktion des Abstandes von der Küste zur Höhe würde bei mehreren Inseln oder größeren Kontinenten zu unangenehmen Ergebnissen führen, und seine Wasserverteilungsmethode nimmt einen markanten Höhepunkt in der Landschaft an, der schließlich zum Ozean fließt. Wenn ich die Geländehöhe aus Amits Schema entfernen würde, wäre ich mir nicht sicher, wie ich seine Idee der Biomverteilung an mein Projekt anpassen soll.
Spiffytech
5

Ich erstelle zufällige Kartenskripte für Age of Empires 2 . Mein letzter ist für die HD-Version.

Wenn Sie wissen möchten, wie Sie Maps für Age of Empires 2 erstellen, finden Sie in diesem Handbuch eine hervorragende Anleitung zu RMS (Random Map Scripting) .

Age of Empires verwendet ein Expertensystem, mit dem Skripte Routinen für die Generierungsregeln schreiben können, von denen Sie viel lernen können. Ich stelle mir für Regionen einfach vor, dass Bereiche ausgeblendet und entsprechend unterschiedliche Skripte / Routinen auf die ausgeblendeten Bereiche angewendet werden. Sie können die Generierungsregeln vorhandener Kartenskripte einfach anzeigen, indem Sie sie in einem Texteditor öffnen. Ich schreibe meine in Notepad

Sturm Andy
quelle