Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mär 28, 2024 17:43

Foren-Übersicht » Sonstiges » Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: TerrainRenderer
BeitragVerfasst: Mi Mai 25, 2005 12:43 
Offline
DGL Member

Registriert: Mi Apr 13, 2005 16:06
Beiträge: 67
Wohnort: Fulda
Hallo zusammen!

Ganz kurz: Ich arbeite momentan an einem Renderer für Heightmaps.

Etwas ausführlicher:
Im Zuge der Terrain-Tutorials bin ich auf die Idee gekommen, auf der einen Seite einen Renderer für Heightmaps, der zur Landschaftsdarstellung in beliebigen Projekten benutzt werden kann, und auf der anderen Seite einen passenden interaktiven Heightmap-Editor zu schreiben.
Ich habe mit dem Renderer angefangen und möchte hier kurz vorstellen, was bisher dabei herausgekommen ist:

Grundlage des ganzen war das CLOD-Tutorial auf dieser Seite und das Original-Paper zu dem verwendeten Algorithmus von Stefan Röttger (hier ein großes Dankeschön an Delphic, dein Tutorial und besonders der Sourcecode zum Tut haben mir sehr geholfen!!). Ich habe mich bemüht, den Algorithmus aus dem Tutorial zu optimieren, allgemeiner zu gestalten und ein wenig zu erweitern.
Hier ein paar Eckdaten:

  • (fast) beliebige Heightmap - Größe. Ok, vielleicht eher leicht eingeschränkt statt beliebig: Es werden Größen von (2^n)+1 im Quadrat erwartet, sonst läuft nichts. Dies liegt aber in der Natur des Algorithmus
  • für die, denen CLOD nichts sagt: Dabei wird beim Rendern einer Heightmap nicht alles in der höchsten Detailstufe, sondern abhängig von der Entfernung zur Kamera sowie den Höhendifferenzen auf der Heightmap bestimmte Teile in hoher Qualität, andere in niedrigerer gezeichnet. Dies hat eine enorme Erhöhung der Performance zur Folge und sieht dennoch gut aus.
  • Geomorphing: Wenn durch Bewegung der Kamera zwischen 2 Detailstufen gewechselt wird, poppen die neuen Polygone nicht einfach so aus dem Nichts hoch, sondern erscheinen gleichmäßig, indem linear zwischen den beiden Detailstufen interpoliert wird.
  • Frustum Culling
  • das ganze verpackt in eine leicht und bequem bedienbare Klasse


Hier ein paar Screenshots:
Die Screens basieren auf einer 1025x1025 Pixel - Heightmap mit einer vorgefertigten Textur.
Bild

Hier zwei mal dieselbe Geländestelle mit verschiedener Entfernung der eigentlichen Kamera und damit mit zwei verschiedenen Detailgraden:
Bild Bild

Was noch kommen wird/soll:
Für den Renderer werde mich als nächstes an prozedurale Texturierung machen. Mir schwebt da ein System vor, das ähnlich sein wird wie bei Terragen. Im Klartext eine Layer-Hierarchie, deren Verteilung einerseits über Höhenstufen, aber auch über Dinge wie minimale und maximale Steigung im Gelände bestimmt wird. Für die einzelnen Layer sollen dabei sowohl Texturen aus Dateien als auch berechnete Texturen, etwa über Noise, möglich sein.
Vielleicht werde ich auch noch weitere Algorithmen für die CLOD-Berechnung implementieren, auf die ich im Netz gestoßen bin. Denn der Algorithmus von Stefan Röttger ist inzwischen immerhin 7 Jahre alt, vielleicht findet sich ja noch was besseres.

Der zweite Teil des Projekts, dem ich mich bisher noch nicht gewidmet habe, soll ein Editor sein, mit dem Heightmaps in Echtzeit sowohl in 2D als auch in 3D bearbeitet werden können. Mir persönlich gelingt es nämlich prinzipiell nicht, zum Beispiel in Photoshop in eine Heightmap das in 2D reinzumalen, was später in 3D erscheinen soll.
Der Editor soll zum einen ganz primitive Werkzeuge wie zum Beispiel Pinsel enthalten, zum anderen wären aber auch Dinge wie Korrosion sehr schön. Aber das ist wohl noch ein Weilchen hin und wie gesagt kommt als nächstes erstmal die Texturierung.

Damit das ganze Projekt universell nutzbar bleibt, soll auch weiterhin alles so in Klassen verpackt werden, dass die Bedienung möglichst leicht wird.
Bisher ist alles, was man zur Darstellung einer Heightmap braucht, eine eingebundene Unit, eine Instanz der Rendererklasse und eine der Klasse, die die eigentliche Heightmap verwaltet. Die müssen über einen Pointer verknüpft werden und dann reicht ein Aufruf von Renderer.Render im Renderloop und alles ist getan.

So weit erst mal, ich hoffe natürlich auf euer zahlreiches Feedback. ;)

Gruß,
Robert


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Foren-Übersicht » Sonstiges » Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 33 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.065s | 17 Queries | GZIP : On ]