Procedural Terrain Generation

Im Zuge der Landschaftsgenerierung bietet es sich zunächst einmal an, auf eine der praxiserprobten Middleware-Lösungen zurückzugreifen. Die Verwendung von vorab generierten Landschaften birgt jedoch auch Nachteile – zum einen der notwendige Zeitaufwand beim Erstellen einer neuen Landschaft und zum anderen die fehlende Abwechslung für den Spieler aufgrund der begrenzten Anzahl der zur Auswahl stehenden Terrains.
Die Alternative besteht darin, eine Landschaft zu Beginn eines neuen Spiels prozedural zu erstellen – entweder vollständig nach dem Zufallsprinzip oder unter Einbeziehung zusätzlicher Parameter (flache Landschaft, Hügelketten, Insel, Hochgebirge, etc.).


Die beiden nachfolgenden Vorträge (obgleich schon etwas älter, zählen sie meiner Meinung nach immer noch zu den besten Ausarbeitungen) befassen sich mit dieser Problematik und behandeln verschiedene Techniken, die im Rahmen der Landschaftserzeugung zum Einsatz kommen (Erosion, Procedural Noise, Voronoi-Diagramm, Verzerrung, etc.) – mit dem Ziel, dass ein auf diese Weise generiertes Terrain nicht nur „hübsch anzusehen“ sondern darüber hinaus auch für die Verwendung in einem Spiel geeignet (bespielbar) ist.


Procedural Terrain Generation von Jan Finis (Proseminar Game Design, TU München, 2007/2008):



Procedural Terrain Generation von Simon Hager (Proseminar Game Design, TU München, 2007)




Einen ersten Einblick in die Texturierung eines prozedural generierten Terrains bietet der Artikel Terrain Texture Generation von Tobias Franke aus dem Jahre 2001:



Obgleich schon etwas in die Jahre gekommen, beschreibt dieser Artikel eine Methode, die auch heutzutage noch – in Kombination mit weiteren Techniken – zum Einsatz kommt. Hierbei wird das Terrain zunächst in unterschiedliche Höhenbereiche aufgeteilt:

Höhenbereiche 1: Schnee
Höhenbereiche 2: Felsen
Höhenbereiche 3: Felsen+Gras
Höhenbereiche 4: Gras

Jedem Höhenbereich werden nun eine oder mehrere kachelbare Texturen zugeordnet, die beim Rendern miteinander kombiniert werden. Die Kombination der Texturen eines Höhenbereichs sollte jedoch nicht ausschließlich nach dem Zufallsprinzip erfolgen, sondern darüber hinaus die lokalen Gegebenheiten des Terrains berücksichtigen – steile Passagen sind anders zu texturieren als flache Bereiche.


Texture Splatting (alt):


Texture Arrays Terrain Rendering:


Texture Arrays in Kombination mit Gewichtungsfaktoren:

// Hinweis: Weight1+Weight2+Weight3+Weight4 = 1.0

vec4 SurfaceColor =
Weight1*texture(SurfaceTextureArray, vec3(gs_TexCoord[0].st, TextureID1))+
Weight2*texture(SurfaceTextureArray, vec3(gs_TexCoord[0].st, TextureID2))+
Weight3*texture(SurfaceTextureArray, vec3(gs_TexCoord[0].st, TextureID3))+
Weight4*texture(SurfaceTextureArray, vec3(gs_TexCoord[0].st, TextureID4));