SelfDXD von Martin Pyka
SelfDXD --- DirectXGraphic --- Texturen
Informationen zu Texturen
Einleitung
Was ist eine Textur?
Texturkoordinaten
Mipmap
Texturadressierung

Einleitung

In diesem Kapitel lernen Sie, wie Sie 3D-Objekten ein plastischeres Aussehen verleihen, und zwar mittels Texturen. Sie werden lernen, wie Sie Bildinhalte laden und auf 3D-Objekte anwenden. Letzteres ist hierbei eindeutig der Schwerpunkt. Es gibt eine Vielzahl an Techniken und Methoden, wie Sie Texturen im Zusammenhang mit 3D-Objekten nutzen können. Dabei werden Sie einige Effekte lernen, die Sie wahrscheinlich schon aus kommerziellen 3D-Spielen kennen. Schlagwörter, wie Anisotropisches Filtering, Bump Mapping, Environment Cube Map, Wrapping, Lightmap, Mipmapping werden für Sie nach diesem Kapitel praktische und effektvoll Rendertechniken sein, mit denen Sie Ihre Anwendungen um einen Quantensprung bereichern können.


Was ist eine Textur?

Eine Textur ist in erster Linie ein aus Farbinformationen bestehendes Grafikformat, Bitmap genannt. Texturen werden dazu verwendet, 3D-Objekten eine realistische oder zumindest effektvollere Oberfläche zu verleihen. Gute Holz oder Steintexturen lassen einen Holzstamm oder einen Stein viel glaubwürdiger erscheinen, als eine einfache braune oder graue Farbe.

Doch mit Texturen lässt sich noch viel mehr anfangen. Sie können als sogenannte Lightmaps dienen, um beleuchtete und nicht beleuchtete Regionen zu kennzeichnen. Diese Technik kann in vielen Fällen wertvolle Rechenzeit sparen. Beim Bump Mapping enthält eine zweite Textur eine Art Tiefeninformation, durch die die sichtbare Textur den Eindruck einer unebenen Fläche erwecken kann. Texturen können also auch dazu eingesetzt werden, andere Texturen in irgendeiner Weise visuell zu beeinflussen.

In den folgenden Abschnitten wird gelegentlich der Begriff Texel fallen. Ein Texel ist ein Textur-Pixel, nicht zu verwechseln mit einem Bildschirmpixel. Durch die Transformation kann es vorkommen, dass mehrere Pixel den Inhalt eines Texels darstellen (wenn man zum Beispiel sehr nah an ein Objekt herangeht).


Texturkoordinaten

Eine Textur wird an einem 3D-Objekt anhand sogenannter Texturkoordinaten angewendet, die in den Vertices enthalten sind. Die tatsächliche Grösse einer Textur spielt dabei keine Rolle. Die Masse werden in Prozent übergeben und reichen demnach von 0.0, was den horizontalen oder vertikalen Anfang einer Textur markiert, bis 1.0, dem horizontalen oder vertikalen Ende einer Textur. Während die Variablen x, y und z für räumliche Distanzen gebraucht werden, benutzt man u, v und w um Abmessungen an der Textur zu bestimmen. U gilt für die Breite, V für die Höhe einer Textur und w für die Tiefe bei Volumentexturen. Die folgende Bildreihe verdeutlicht es nochmal.

Das erste Bild zeigt eine Textur (Popstar Madonna) und die Texturkoordinaten für die vier Ecken. Das zweite Bild zeigt drei Vertices, die ein Dreieck bilden. Jeder dieser Vertices besitzt dabei eine u- und v-Texturkoordinaten. Im dritten Bild wird die Textur auf die Primitive angewendet.


Mipmap

Eine Mipmap besteht aus verketteten Bitmaps innerhalb einer Textur, deren Bildinhalte von Bitmap zu Bitmap kleiner dargestellt werden. Eine Mipmap ist eine Optimierungsmethode, um Rechenzeit zu sparen. Da bei weit entfernten 3D-Objekten längst nicht alle Details einer Textur so gut erkennbar sind, wie bei nahen Objekten, wird, je nach Entfernung eine der jeweiligen Bitmaps aus der Mipmap gezeigt. Betrachten Sie dazu die folgenden Bilder:

Hier sehen Sie so eine Mipmap, bestehend aus 3 Miplevel. Das erste Bild würde man verwenden, wenn man wirklich weit von dem Objekt entfernt ist. Man erkennt grademal eine Frau, die mit dem Zeigefinger ihre Lippe berührt. Der weisse Text ist aber überhaupt nicht lesbar. Im zweiten Bild kann man schon den Text lesen und erkennen, dass diese Frau an einem Schachbrett sitzt. Das letzte Bild würde angezeigt werden, wenn wir uns sehr nah am 3D-Objekt befinden. Der Text ist klar erkennbar und hebt sich durch seine scharfen Kanten gut vom Hintergrund ab.

Die Anzahl der Level einer Mipmap ist variabel. Jedoch ist jedes kleinere Bild ein Viertel (also halbe Breite und Höhe) vom nächst grösseren.


Texturadressierung

Die Anzeige der Textur zwischen den Koordinaten 0.0 und 1.0 ist klar. Je nachdem, welche Koordinaten angegeben werden, wird der entsprechende Bildauschnitt gezeigt. Doch was ist, wenn Sie Koordinaten ausserhalb dieses Bereiches, also <0.0 oder >1.0 angeben? Dann können Sie mal wieder entscheiden, was passieren soll. Es gibt 4 verschiedene Arten, eine Texturfläche ausserhalb der normalen Bereiche zu gestalten. Diese 4 Effekte bezeichnet man als Texturadressierungsmodi. Nachfolgend sind alle Modi in ihren englischen Bezeichnungen aufgeführt.

Wrap Texture Address Mode
In diesem Modus wird die Textur mit jedem ganzzahligen Integer-Wert wiederholt. Dies ist das gleiche Prinzip wie das Kacheln eines kleinen Bildes auf dem Desktop.

Mirror Texture Address Mode
Die Texel werden in der umgekehrten Reihenfolge ausgegeben. Es entsteht dabei ein Spiegeleffekt.

Clamb Texture Address Mode
Jeweils die erste bzw. letzte Pixelzeile oder -spalte wird ausserhalb von 0.0 und 1.0 gedehnt. In den diagonalen Richtungen wird die jeweilige Eckpixelfarbe benutzt.

Border Texture Address Mode
Ausserhalb der Texturgrenzen wird eine freiwählbare Farbe verwendet. Mit dieser Technik lässt sich zum Beispiel ein Rahmen um die Textur erzeugen. Der Rahmen muss also nicht Bestandteil der Textur sein, womit man Platz und Rechenpower spart.