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
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.
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.
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).
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.
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.
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.
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.