Prozedural erzeugte 2D-Kurvenstraßen auf der Karte

9

Ich habe mit Algorithmen experimentiert, um automatisch Straßenkarten für ein Spiel zu generieren, an dem ich arbeite.

Ich benutze die " Kingdom Rush " -Spiele als Referenz, da sie einige großartig aussehende Karten haben.

Beispiele für Straßenkarten aus dem Spiel "Kingdom Rush"

Ich bin neu in der Erstellung von prozeduralen Inhalten und habe mich gefragt, ob hier jemand Hinweise hat. Ich habe experimentiert, zufällige Straßentopologien zu generieren, z. B. einige Eingangs- / Quellknoten, mehrere innere Knoten (Gabelung und Zusammenführung) und einige Austrittssenkenknoten, und dann mithilfe von Graph-Layout-Algorithmen eine tatsächliche Straßenkarte basierend auf diesen Informationen erstellt.

Hier ist ein Beispiel mit dem Fruchterman-Reingold-Algorithmus für das Straßenlayout:

PCG-generierte Karte 1

Das blaue Diagramm verwendet einige zufällig generierte Bézier-Kontrollpunkte, damit die Kanten weniger gerade aussehen.

Hier ist ein weiteres Beispiel, das mit demselben Algorithmus, aber unterschiedlichen Zufallszahlen erstellt wurde:

PCG-generierte Karte 2

Das Problem ist, dass die meisten Ergebnisse ziemlich ähnlich aussehen und ich nicht sicher bin, welche Regeln ich hinzufügen kann, um die Steuerbarkeit und Vielfalt der prozedural generierten Karten zu verbessern.

Jeder Rat geschätzt.

SixTwoOne
quelle
Tolle Frage. Die Referenzbilder helfen sehr, ebenso wie die Dinge, die Sie bisher ausprobiert haben. Können Sie etwas näher erläutern, was Sie unter "Kontrollierbarkeit" verstehen? Es gibt viele Dinge , die Sie könnten steuern; Einige Beispiele würden helfen.
Pikalek
Hallo! Danke für die Antwort. Mit Steuerbarkeit meine ich, ist es möglich, bestimmte Regeln zu schreiben (z. B. keine Schnittpunkte näher als einen bestimmten Abstand voneinander platzieren; Winkel nicht schärfer als x Grad zulassen) und den Generierungsalgorithmus diese Einschränkungen einhalten zu lassen? Darüber hinaus sollten diese Regeln die Fähigkeit des Algorithmus, eine Vielzahl interessanter Karten zu generieren, nicht beeinträchtigen. Ihre Ermutigung ist jedoch ermutigend. Ich wurde langsam frustriert über die Details, wie man das zum Laufen bringt!
SixTwoOne

Antworten:

2

Ihre Beispielstraßen haben Kurven auf den Segmenten zwischen Kreuzungen, wo Ihre generierten keine haben. Haben Sie versucht, mehr "redundante" Kontrollpunkte auf Ihren Straßen hinzuzufügen?

Wie wäre es, wenn die Anzahl der Schleifen ein Generierungsparameter wäre? Auch "Krümmung" (Anzahl redundanter Kontrollpunkte) Anzahl der Ausgänge wäre eine andere.

Ich denke, Sie könnten Straßen auch beenden, wenn sie auf Kreuzungen treffen, indem Sie ihnen doppelte Kontrollpunkte geben. Dadurch sollten die Kreuzungen besser aussehen.

Osthekake
quelle
Ich denke, der Vorschlag für Zwischenkontrollpunkte ist gut! Der Graph-Layout-Algorithmus, den ich momentan verwende, erzeugt nur gerade Linien, aber ich könnte einen Knoten mit "gekrümmter Biegung" irgendwo zwischen zwei anderen Knoten platzieren und eine Heuristik verwenden, um Kontrollpunkte in der Nähe zu platzieren, die ihn hübsch aussehen lassen. Ich muss mich auf jeden Fall mehr damit befassen, da dies auch mit der Schaffung besser aussehender Schnittpunkte zusammenhängt.
SixTwoOne