Designüberlegungen Terrain-Rendering

Cromon

Erfahrenes Mitglied
Hallo zusammen

Seit einigen Tagen entwickle ich - mal wieder - an einer Engine die unter anderem auch Terrainrendering als Feature beinhaltet. Ich habe das grundsätzlich schon öfters gemacht aber ich dachte mir als guter Vorsatz für das neue Jahr habe ich mir gedacht ich möchte auch mal die Meinung von anderen Leuten einholen als meine Programmierfreunde.

Also grundsätzlich geht es mir aktuell darum einige Designentscheidungen zu treffen, auf der technischen Seite ist sonst soweit das meiste bereits vorbereitet. Ich habe hier mal zwei Bilder die etwas veranschaulichen wie ich mir das Terrain vorstelle. Es handelt sich dabei um zu Laufzeit generiertes und anhand eines sets von Texturen eingefärbtes Terrain.

50e05b588ff1c6_IMG_30122012_141549.png
50e153700159f9_img2.jpg

Die Anforderungen die ich an das Terrain habe sind die folgenden:
  • Die Komplexität hat keine Priorität. Spielereien wie Überhänge und ähnliches sind nicht nötig.
  • Das Terrain sollte dynamisch und flexibel bleiben. Änderungen der Heightmap oder des Layouts der Map sollten problemlos zu Laufzeit möglich sein und so gut als möglich ohne erneutes laden ablaufen.
  • Auf der Map wird es verschiedene Bodentypen geben wie fruchtbaren Boden, mineralienreicher Boden, usw. Diese müssen graphisch auch entsprechend repräsentiert werden und liegen sozusagen als Polygon vor.
  • Es muss mit DirectX 11 und Shader Model 5 laufen.

Also die Überlegungen die ich mir bisher gemacht haben sehen folgendermassen aus:
  • Die Map ist aufgeteilt in Regions. Diese Regions definieren das Aussehen dieses Teils. Die Region beinhält unter anderem ein Set von Texturen für die verschiedenen Terraintypen. Also Hügel, Fläche, Strand, Wasser, Klippe, usw.
  • Jede Region ist aufgeteilt in tiles. Eine tile ist ein 64x64 Stück Terrain mit einer Heightmap. Für diese Heightmap berechnet die Tile dann unter anderem die Normalen und Steigungen der einzelnen Vertices. Zudem wird auf dieser Stufe auch das Wasser berechnet.
  • Die Tile erstellt eine entsprechend Textur (zum Beispiel R8) in der sie mit einer etwas grösseren Auflösung als der Heightmap speichert wo welcher Typ (fruchtbar, mineralienreich und so weiter) von Terrain ist.
  • Im Shader für das rendern der Tiles stehen die Texturen aus der Region sowie ein Texture2DArray mit den jeweiligen speziellen Texturen (getreide, erz usw) zur Verfügung. Mit diesen kann dann der Pixelshader entsprechend berechnen wie das Terrain schlussendlich aussehen soll

Soweit sehe ich eigentlich alle Anforderungen erfüllt, die maximale Ladezeit bei Veränderungen des Terrains besteht aus dem updaten der Texturen mit den Informationen für den Shader was in für den Enduser unmerklicher Zeit geschieht.

Was denkt ihr? Würdet ihr das anders angehen?

Grüsse
Cromon