Texture Splatting

Aus DGL Wiki
Version vom 21. Mai 2006, 13:43 Uhr von Nico Michaelis (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Texture Splatting ist eine Methode, um durch Texturen Terrains möglichst realistisch darzustellen. Die komplette Landschaft wird mit einigen Grund-Texturen gepflastert. An unterschiedlichen Stellen bekommen die Texturen dabei eine unterschiedliche Gewichtung, so daß z.B. am einen Ort Gras wächst, an anderen hingegen Geröll herumliegt.

Prozedurale Alphamaps

Um die Gewichtung der Texturen zu speichern setzt man häufig prozedurale Alphamaps ein. Anhand von Vorgaben und oder der Höheninformationen der Landschaft wird für jede der Grund-Texturen eine Alpha Map erzeugt. Beim Rendering sollen diese dann beschreiben, wieviel von einer Textur an einer bestimmten Stelle zu sehen sein wird. Im Tutorial Heightmap Texturen wird ein Verfahren vorgestellt, welches man für diesen Zweck nur leicht abzuändern braucht.

Splattings Rendern

Um das Ganze dann zu rendern kann man bei fester OpenGL Pipeline einfach auf Blending setzen: 2 oder mehr Texturen werden anhand jeweils einer Alphamap zusammengeblendet (die erste Textur bekommt keine Alphamap, sie wird normal gezeichnet ).

Splatting Blending.jpg

GL.Color4d(1, 1, 1, 0);
GL.BindTexture(GL.TEXTURE_2D, tex1);
RenderQuad();
GL.Enable(GL.BLEND);
GL.Color4d(0, 0, 0, 1);
GL.BindTexture(GL.TEXTURE_2D, alpha2);
GL.BlendFunc(GL.ONE, GL.ONE);
RenderQuad();
GL.Color4d(1, 1, 1, 0);
GL.BindTexture(GL.TEXTURE_2D, tex2);
GL.BlendFunc(GL.DST_ALPHA, GL.ONE_MINUS_DST_ALPHA);
RenderQuad();

Aus Geschwindigkeitsgründen sind jedoch meistens PixelShader im Einsatz: 3 Alphamaps werden zusammen in den Kanälen für die Farben rot, grün und blau gesteckt und an die erste Textur Einheit gebunden. Die 3 zugehörigen Grundtexturen werden dann an die restlichen Textur Einheiten gebunden und schon kann man mithilfe eines Pixel Shaders 3 Grundtexturen in einem Durchgang anzeigen. Hat man 8 Textureinheiten zur Verfügung, kann man diese natürlich mit einer weiteren zusammengebastelten Alphamap und 3 weiteren Grundtexturen belegen und kann so in einem Durchgang 6 Grundtexturen anzeigen. Ist das nicht genug rendert man die Landschat mehrfach und blendet alle weiteren Stufen dazu.