Der Blog dieser Woche ist sozusagen ein 2 in 1 Angebot. Die beschriebenen Fortschritte in meinem Ascii Adventure sind in der Woche 4 und 5 des Moduls entstanden.
Schrittweise Prozedurale Generierung
Die sehr rudimentäre Weltengenerierung vom letzten Blog habe ich mit einem fortgeschritteneren Algorithmus abgelöst. Das neue System verwendet Schritte welche aufeinander aufbauen. Jeder Schritt generiert die Welt mit mehr Details.
Hier ein Video von diesem Ablauf:
https://www.youtube.com/watch?v=rjw22rFUhTQ
Viele der Schritte verwenden nicht nur Informationen von tieferen Schritten des eigenen Chunks, sondern auch Informationen der umliegenden Chunks. Aus diesem Grund müssen um die vollständig generierten Chunks auch Chunks geladen werden, welche nicht fertig generiert sind.
Hier eine Visualisierung davon:
Aktuelle Schritte
Hier die Schritte welche aktuell in der prozeduralen Generierung enthalten sind.
– Landmasse
– Ränder der Landmassen abrunden (mehrfach)
– Temperatur
– Luftfeuchtigkeit
– Biom auf Grund der Temperatur & Luftfeuchtigkeit auswählen
– Kleine Biome eliminieren und Ränder verbessern (mehrfach)
– Höhe generieren
– Höhe glätten
– Chunks mit Zivilisation auswählen
Biome
Biome werden auf Grund von den Luftfeuchtigkeits- und Temperatur-Werten ausgewählt.
Diese Aufteilung ist noch nicht perfekt und führt aktuell noch zu unausgeglichenen Resultaten. Aber mit einigen Anpassungen der Schwellwerte kann dies sich gelöst werden.
Probleme
Aktuell habe ich noch einige Probleme, welche mir und meinem Notebook die Arbeit erschweren.
Zum einen ist der Algorithmus zurzeit noch sehr Ressourcen aufwendig. Das Generieren von ~10 Chunks aufs mal führt bereits zu FPS-Drops.
Weiter bin ich mit der Architektur der Generierung noch nicht zufrieden. Ich bin noch nicht sicher, was die optimale Strukturierung von Go Code ist. Aus diesem Grund ist das Erstellen von neuen Schritten in der Generierung sehr aufwändig. Hätte ich etwas mehr Zeit im Projekt, hätte ich mich dazu entschieden das System nochmals umzuschreiben.
Engine Updates
Wie im Video weiter oben zu sehen ist, unterstützt meine Ascii Engine nun Farben : )
Glücklicherweise ist dies die einzige Anpassung, welche ich diese und letzte Woche an der Engine vornehmen musste. So konnte ich mich vollständig auf die Entwicklung des ProcGen Codes konzentrieren.
Nächste Schritte
Nächste Woche werde ich die Weltengenerierung abschliessen und beginnen mit der Beschreibung der Welt. Dies bedeutet, ich werde Wege finden aufgrund der generierten Daten dynamisch Beschreibungen zu generieren.