Hi.
Ich arbeite derzeit an einer "Terrainengine" für ein kleineres Stücklein Land mit Wasser in der Umgebung. Nachdem Ende November unser supermega Mamut Projekt abgebrochen haben und dazwischen erfolgreich das Rübenspiel fertig stellen. Jetzt wagen wir uns wieder etwas bischen größeres.... (wems genauer interessiert:
GoldenVertices Homepage)
Jedenfalls soll genau die Grafik aus dem Demo da dann zum Einsatz kommen. Die Levels werden auch dort nur 128*128 groß sein und die Beleuchtung wird nicht wechseln.
Also nun zur Technik:
Athmosphäre:
Erst wollte ich einen Shader für einen dynamischen Himmel schrieben, hatte jedoch dann Probleme mit dem Übergang von Mond zu Sonnenschein. Darum werden wir die Beleuchtung fix lassen und eine Skybox, ähnlich wie im Demo verwenden.
Terrain:
Also das Terrain wird an sich aus einer 128*128 Heighmap geladen. Zur Dreicksreduzierung benutze ich ein GeometricalMipMapping.
Natürlich wird über einen Quadtree gerendert.
Wie auch später im Spiel werden alle Terrainpatches die unter Wasser stehen einfach weggeschnitten.
Terraintextuierung:
Für die texturierung hab ich mir was besonderes einfallen lassen um flexibel zu bleiben und doch keine Colormaps zu verwenden.
Ein Shader kombiniert aus einer Textur die über dem gesammten Terrain liegt je nach Farbe 3 Texturschichten.
Ja ich weiß die Technik ist nicht ganz neu ... aber als ich sie damals im September das erste mal bei dem supbermegascheiter Projekt (neu)erfand war es neu für mich.
Terrainbeleuchtung:
Das Terrain wird mit Bumpmapping von einer Directionalen Lichtquelle Beleuchtet - Keine Lightmap wie zunächst geplant, da ich sonst nicht den tollen Bumpeffekt hinkrieg ... oder hat jemand ne Idee wie ich das ohne eine extrem hochauflösende Lightmap schaffe?
Im Spiel wird dann das Bumpmapping wahlweise zum deaktivieren sein
Wasser:
Für das Wasser hab ich in dem Demo hier einen besonderen Anspruch gestellt, der mich beim Programmierern des Shaders stark einschränkte. Das Wasser soll nur 4 Vertices besitzen, weil es mit zu aufwändig ist, das Wasser je nach Terrain anzupassen und es in Blöcke wie beim Terrain zum Culling zu unterteilen, sollen alle "Bewegungen" auf Pixelebene sein. Da das Wasser zum Schluss gerendert wird, werden nur die nötigen Pixel gerendert.
Das Wasser gibt es in 3 Detailstufen. Nur die unterste ist auf Shader 1.4 lauffähig. Die oberste arbeitet mit einer Volumentextur.
Der Shader ist noch nicht ganz ausgereift... darum bitte ich hier um Verzeihung, wenn das Wasser zu regelmässig erscheint, oder einfach nur hässlich ist.
Zum start des demos ist die Detailstufe auf niedrig ... Mit Q kann umgeschalten werden
Lange reder kurzer Sinn:
Viel Spaß beim ausprobieren!
Alles Wissenswerte wird oben link angezeigt.
Die bisher noch größten Mankos sind:
- Extremes Popping
- Eckige Übergänge, wo Land in Wasser übergeht
- Unterschied zwischen Wasserdetail Mittel und Niedrig ist sehr gering
Das Demo dient mir zur Vorbereitung auf das nächste Projekt ... ich werde wohl eine Features erst während der Entwicklung implementieren... Das Demo dient mir dabei als Labor. Mir ist es wichtig, dass ich diese vielen neuen Dinge nicht im Projekt ausprobiere, wo ich mich mehr mit der Spiellogik beschäfftigen sollte.