Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

29.03.2009, 05:02

Geo-Clipmapping und Textur-Splatting

Hi! Ich hätte auch mal eine kleine Frage.

Ich habe es nun geschaft den Geo-Clipmaing Algo zu benutzen, und hatte mir vorgenommen, sobald ich dies geschaft hätte, würde ich Textur-Splatting einbauen. Nun stelle ich aber fest, da mein Terrain nun nicht mehr aus fest definierten Patches besteht, das dies nun garnicht mehr möglich ist!

Mein Geo-Clipmapping Alho sieht folgendermaßen aus:

Ich lade eine 1024x1024 große Heightmap. Centriert zu meiner Kameraposition ist ein 65*64 Pixel großes Feld. Um diese Feld, zieht sich ein weiteres 32 Felder breites Feld herum. Und das geht dann immer so weiter ...

Wenn ich die Heightmap lade erstelle ich einen VertexBuffer welchem ich nur einmal bei der Initialisierung fülle. Indem ich den IndexBuffer neu fülle wird der Detailgrad verschoben.

Meine Frage ist nun, wie ich denn nun Textur-Splatting benutzen kann, muss ich eventuell meinen Algo komplett neu schreiben?

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

2

29.03.2009, 14:10

Nun, warum nicht das Textur-Splatting aufgrund dem Original-Terrain machen, aber auf das gemappte anwenden?

3

29.03.2009, 20:02

Ich verstehe jetzt nicht genau wie du das meinst. Das eigentliche Problem ist ja das Die IndexBuffer mit der Kamera mitwandern. Wenn ich nun ein IndexBuffer zeichne und darauf mein TexturSplatting anwende, wandern die Texturen auch mit der Kamera mit.

//Edit

Hat sich erledigt! Ich habe nun Geomipmapping eingebaut, und ich glaube dabei gibt es auch ein ganz gutes verfahren um diese ganz elegant zu rendern.

Ich habe mir das so gedacht das ich Terrain Patches von der größe 32x32 Vertices habe. Ich erstelle nur einen Vertex Buffer und 5 Index Buffer. Der Vertex Buffer wird mit den Vertices gefüllt, die Z Koordinate(höhe) bleibt bei 0 und die die X und Y Koordinaten werden entsprechend gesetzt. Die 5 verschiedenen Index Buffer beinhalten die verschiedenen Detailgrade, teoretisch währen auch 6 verschiedene Detailstufen möglich, jedoch würde dann 1 Patch aus nur 2 Poligonen bestehen. Die Höhendaten liegen auf der Festplatte in Raw dateien vor, da sie sehr klein sind oder einem eigenen formaz bei dem der Farbkanal von 0 bis 1 geht, dadurch sind bessere Höhenunterschiede zu realisieren. Beim Laden des Terrains werden die jeweiligen Bilddateien geladen. Wenn das Terrain nun gezeichnet werden soll, wird immer ein und der selbe Vertex Buffer als stream gesetzt und der dazugehörige Index Buffer mit dem entsprechendem Detailgrad. Instancing wäre bei dieser Variante bestimmt nicht schlecht. Transformiert wird dann über einen Shader, welcher die Position des Vertex auf die Texturkoordinaten der Heightmap, die zuvor an dem shader weiter gegeben wurde, umrechnet. Die Z Koordinate wird dann entsprechend des Wertes des Pixels der Textur angepasst. Gleichzeitig kann man dann auch Textursplatting anwenden.

Die Vorteile an diesem Terrain sind die das das Terrain deformierbar ist, da man schließlich nur die Pixelwerte in der Heightmap verändern muss. Außerdem wird nur wenig Speicher auf Grafikkarte für das Terrain missbraucht und der BUS wird kaum belastet. Und natürlich ist Geomipmapping auch ein sehr einfacher LOD Algo!

Bisher bin ich dazu gekommen alles davon um zu setzen was nichts mit Shadern zu tun hat! Nurnoch Instancing und den Shader der die Koordinaten umrechnet habe ich noch nicht geschrieben! Ich kenne mich mit Instancing und Shadern nicht sher gut aus, deswegen wäre es nett wenn mir jemand sagen könnte ob es denn überhaupt so funktioniert wie ich es mir vorgestellt habe :)

Auf jeden fall ist es eine gute alternative zum Geoclipmaping, leider wird die Zahl der Drawcalls bei größeren Terrains extrem groß!

Wenn die differenz von 2 Vertices die nebeneinander liegen 1meter entsprechen, und man eine Sichtweite von 500km haben will, muss man 32*32 Patches rendern, dies währen dann 1024 Drawcalls! Mit Frustum culling könnte man ein bischen mehr als die Hälfte der zu zeichnenden Patches reduzieren, jedoch sind das dann immer noch 500 drawcalls, was ich sehr hoch finde!

Werbeanzeige