Geländegenerierung für fliesenbasierte 2D-Platformer

15

Momentan arbeite ich an einem kachelbasierten 2D-Plattformer, der Terraria in gewisser Weise ähnelt, obwohl ich Probleme mit der Geländegenerierung habe. Ich habe einige Grundlagen gemacht, obwohl sie nicht als nützlich herauskommen.

Ich habe ein paar verschiedene Techniken wie Perlin Noise ausprobiert und über einige andere wie Midpoint Displacement gelesen, obwohl ich nicht sicher bin, welche am besten geeignet ist, oder eine Kombination verschiedener Techniken, um verschiedene Bereiche zu erzeugen. (Zum Beispiel Mittelpunktverschiebung für die allgemeine Form des Geländes und Perlin-Rauschen für die Höhlen.)

Ich habe eine hervorragende Erklärung gefunden, wie ich es mit der Accidental Noise Library kombinieren kann , obwohl es sich in C ++ befindet, und ich kenne nicht genug C ++, um es in eine DLL zu kompilieren, die ich in C # verwenden kann. Ich habe versucht, dies in C # zu kopieren, obwohl ich nicht weiß, wie ich zwei Effekte zusammenführen kann (den Farbverlauf für die allgemeine Basis und dann das Fraktal für Details).

Derzeit verwende ich ein Plasma-Fraktal und die Ergebnisse sind äußerst unterschiedlich. Zum Beispiel kann es Terrain erzeugen, in dem es kaum eine Oberfläche gibt, oder es kann Terrain erzeugen, in dem es überhaupt keine Oberfläche gibt.

Ein Beispiel für eine ordentliche Karte wäre jedoch besser, wenn noch weitere Verbesserungen vorgenommen würden. (Schwarz ist fest, Weiß ist Luft):

Gute Karte

Und ein Beispiel für eine schreckliche Karte. (Schwarz ist fest, Weiß ist Luft):

Schreckliche Karte

Grundsätzlich möchte ich wissen, wie man das Terrain besser generieren oder zwingen kann, eine angemessene Oberfläche zu gewährleisten, wobei die Generierungszeit so schnell wie möglich ist. Oder alternativ, wie ich in der Lage wäre, dasselbe Ergebnis wie die Accidental Noise Library zu erzielen, jedoch in C #.

Alle Beispiele wären sehr dankbar.

Schattierte Abmessungen
quelle
Hallo, ich habe mich gefragt, wie du das gemacht hast. Ich versuche zu verstehen, wie man Welten wie diese erzeugt, und ich mag die Ergebnisse, die Sie erzielen. Welchen Algorithmus verwenden Sie, weil er nicht wie Perlin Noise 2D aussieht und definitiv nicht wie Perlin Noise 1D.
G3tinmybelly

Antworten:

8

Ich würde versuchen, bei Perlin-Geräuschen zu bleiben, aber ein Gewicht basierend auf der Höhe hinzufügen, um eine bestimmte durchschnittliche Dichte in bestimmten Höhen zu gewährleisten. So zitieren Sie einen Teil von Notchs Beitrag zur Minecraft-Geländegenerierung :

Also habe ich das System auf ein ähnliches System umgestellt, das auf 3D-Perlin-Rauschen basiert. Anstatt die „Bodenhöhe“ abzutasten, habe ich den Geräuschwert als die „Dichte“ behandelt, bei der alles, was niedriger als 0 ist, Luft ist und alles, was höher als oder gleich 0 ist, Boden ist. Um sicherzustellen, dass die untere Schicht fest ist und die obere nicht, addiere ich nur die Höhe (um den Wasserstand versetzt) ​​zum Ergebnis der Stichprobe.

Im Wesentlichen nehmen Sie ein kleines Stück eines Minecraft-Terrains. Erzeugen Sie also 2D-Perlin-Rauschen, gewichten Sie es jedoch so, dass alles über einem bestimmten Punkt wahrscheinlich Luft und alles unter einem bestimmten Punkt wahrscheinlich Erde ist.

Dadurch erhalten Sie ein gutes Gelände mit einigen Überhängen und interessanten Merkmalen sowie einigen Höhlen und schwimmenden Inseln. (Wenn Sie keine schwimmenden Inseln möchten, können Sie diese testen und manuell entfernen.) Mit dieser Methode erhalten Sie keine Tunnel. Daher möchten Sie eine Methode, mit der Sie diese nach der Geländegenerierung hinzufügen können, z. B. a Random-Walk .

dlras2
quelle
Ich bin mir nicht ganz sicher, ob ich Perlin Noise optimal nutzen kann. Nachdem Sie genau das getan haben, was Sie beschrieben haben, wurden nur viele Höhlen mit vielen schwimmenden Inseln angelegt. Keine tatsächlichen Geländetypdefinitionen. Mit einem Gradienten zum Abwägen der Ergebnisse erhalte ich dieses Ergebnis .
Shaded Dimensions
@Shaded Dimensions - Ihre Perlin Noise-Parameter müssen angepasst werden. Sie haben ein sehr stark variables Rauschen, wenn Sie ein viel weicheres, breiteres Muster wünschen. Schauen Sie sich freespace.virgin.net/hugo.elias/models/m_perlin.htm an und versuchen Sie, mit Ihren Parametern herumzuspielen. Versuchen Sie eine geringere Ausdauer und weniger Oktaven. (Diese Bedingungen können variieren, lesen Sie also diesen Artikel.)
dlras2
Okay, danke für den Link. Ich stellte auch fest, dass das Gewicht nach einigen Änderungen der Parameter nicht wie vorgesehen funktionierte.
Shaded Dimensions
Okay, die Parameter wurden ein bisschen geändert und ich habe etwas, das zumindest für den Moment ziemlich akzeptabel ist. Ich habe auch nur für diesen Test die Erzeugung von Höhlen entfernt, da ich zuerst das eigentliche Gelände bearbeiten wollte. Dies ist das Endergebnis . Sie müssen nur Überprüfungen hinzufügen, um diese schwimmenden Inseln zu entfernen. Danke noch einmal.
Shaded Dimensions
@Shaded Dimensions - Schön! Viel Zeit, gutes Terrain wird nur durch das Ändern von Parametern und das Überlagern von Geräuschen erzielt. Es wird eine Weile dauern, bis Sie etwas bekommen, mit dem Sie sehr zufrieden sind, aber Sie können immer das verwenden, was Sie jetzt haben, und zurückkehren, um Feinabstimmungen hinzuzufügen. Viel Glück!
dlras2