Hintergrund
Ich betreibe einen Minecraft-Server, auf dem ich eine Starterstadt von ziemlich großem Umfang entwerfen werde. Ich habe eine Reihe von Dingen, wie Regelzeichen und Mob-Käfige, die ich dort gerne in Gebäuden unterbringen würde. Die Stadt selbst wird extrem groß und verteilt sein, vorzugsweise bis zu 1000 mal 1000 Blöcke groß.
Die Gebäude selbst haben würfelförmige oder rechteckige Grundrisse, die auf einem bestimmten Basiswürfel basieren, wie alle Vielfachen von 3 Blöcken. Die Straßen und der Abstand zwischen den Gebäuden sind je nach Wichtigkeit der Straße vorzugsweise 5 bis 11 Blocks breit.
Wenn ich mit dem Plan für die Stadt beginne, werde ich genau wissen, wie groß die Gebäude sein sollen und wie viele es sein werden.
Das Problem
Das Problem ist, das Layout für die Stadt zu entwerfen. Offensichtlich ist es bei so einer Größenordnung und meiner Erfahrung als Programmierer und nicht als Stadtplaner eine ziemliche Herausforderung, mich überhaupt mit dem Problem auseinanderzusetzen.
Das Problem ist speziell, dass ich möchte, dass die Stadt so natürlich wie möglich aussieht. Natürlich wäre es ziemlich einfach, auf einem einfachen Gittermuster aufzubauen, aber ich möchte ein Gitter oder irgendetwas, das wie ein Gitter aussieht, so weit wie möglich vermeiden.
Die Frage
Welche Algorithmen kann ich anwenden, um sie mithilfe von Code zu entwerfen? Ich dachte, dass es am natürlichsten aussehen würde, wenn ich auf irgendeine Weise Fraktale verwenden würde, da Minecraft Fraktale bereits in seiner Geländegeneration verwendet und eine Stadt auf natürliche Weise in einem Fraktalmuster zu wachsen scheint.
Ich denke, es ähnelt in gewisser Weise einem Tetris-Spielalgorithmus. Wenn also irgendjemand Lösungen hat, die in diese Richtung existieren, würde dies auch helfen. Ich stelle mir etwas vor, in dem ich die Formen definieren kann, die ich verwenden möchte, und die Software iteriert dann, bis sie die "optimale" Lösung für die gleichmäßige Verteilung von Gebäuden findet. Gibt es schon etwas, das mir hilft, dieses Problem mit Python zu lösen, am besten visuell mit Pygame?
Natürlich hat dies auch interessante Auswirkungen auf die Stadtgeneration im Allgemeinen im Spieledesign. Daher bin ich sehr gespannt, welche Lösung die beste ist.
editieren Um es klar zu machen, ich suche an dieser Stelle nur nach dem Layout, da die Gebäude im Spiel entworfen und gebaut werden.
Antworten:
Ich habe kürzlich einen Algorithmus für ein prozedurales Stadtlayout implementiert. Es ist noch sehr viel in Arbeit, aber es scheint mir vielversprechend. Schau mal:
Der zur Erstellung dieses Layouts verwendete Algorithmus basiert lose auf L-Systems . Ich habe eine Basisklasse
Element
, die ein Rechteck hat, das ihren Platz auf der Karte markiert, und eine MethodeGrow
, die andereElements
innerhalb des Rechtecks erzeugt und / oder einige Objekte auf der Karte erzeugt. Dann gibt es tatsächlich Elemente von dieser Basisklasse geerbt:City
,Street
,Building
usw.Die Generierung beginnt mit einer Reihe von "Startobjekten" (in meinem Fall nur ein einzelnes
City
Element, das zufällig auf der Karte platziert wurde). Dann iteriert das System über alle Elemente und ruft sie aufGrow
, bis alle Elemente inaktiv werden (Grow
zurückkehrenfalse
) oder eine große Anzahl von Iterationsdurchläufen.Die Stadt im Bild wird nach wenigen einfachen Regeln gebaut:
City
wird zu einemStreet
Element, das den Bereich irgendwo aufteilt.Street
s bauen 0-3 Seitenstraßen an und teilen das Gebiet weiter auf.Street
versuchen wir ständig, eine zufällige GrößeBuilding
an der Seite anzubringen.Das Ergebnis ist nicht besonders interessant, aber auch nicht schlecht. Das System kann leicht erweitert werden und ist einfach genug, um zu verstehen, was vor sich geht (-8
quelle
Es gibt diesen Vortrag der GDC über die Erstellung von Verfahren vor ein paar Jahren. Es dient zum Erstellen einzelner Gebäude auf der Grundlage einer Reihe von Vorlagen, jedoch nicht zum Erstellen ganzer Städte (Anlegen von Straßen usw.). Leider gibt es dazu keinen kostenlosen Code. Das im Vortrag beschriebene System ist in Unreal implementiert, obwohl mir nicht klar ist, ob es sich um die kostenlose Version von UDK handelt oder nicht. In jedem Fall könnten Sie einige der gleichen Ideen verwenden, um Ihr eigenes System zu erstellen.
Wenn Sie "prozedurale Gebäude" oder "prozedurale Stadt" googeln, erhalten Sie auch eine ganze Reihe anderer Artikel und Artikel zum Thema.
quelle
Ich bin vor einiger Zeit auf ein sehr gutes / detailliertes Tutorial zum Erstellen prozeduraler Städte gestoßen. Es gibt ein Video unter http://www.youtube.com/watch?v=-d2-PtK4F6Y. Das Tutorial befindet sich auf dem Blog des Autors: http://www.shamusyoung.com/twentysidedtale/?p=2940 Ich hoffe, das hilft amb
quelle