Computergrafik

Texturen

Motivation

Bild: T. Thormählen

  • Texturen sind Rastergrafiken, die auf 3D-Objekte übertragen werden können
  • Vorteil: Detailgetreue Darstellung ohne alles in 3D zu modellieren
    → Texturen tragen wesentlich zur fotorealistischen Computergrafik bei

Mehrere Texturen in einer Szene

Bild: T. Thormählen

  • Texturen lassen sich für jedes Objekt bzw. Polygon individuell zuordnen

Unwrapping 

Bild:  Zephyris 

  • 3D-Modell wird in 2D-Darstellung „aufgeklappt“
  • häufig als UV-Unwrapping bezeichnet
  • Ziel: Erstellung einer Map, die jedem Punkt der 3D-Oberfläche eine 2D-Position zuweist
  • Modell wird an Kanten „aufgeschnitten“
    Seams
  • Einzelne Flächen werden als Inseln angeordnet

Wir geben jedem 3D-Punkt des Objekts eine Adresse in 2D.

Texture Mapping

Bild: T. Thormählen

  • Texturen sind in der Regel quadratisch
  • Koordinatensystem: \( s \) und \( t \) (alternativ: \( u \) , \( v \)) mit den Parametern \( s, t \in [0,1] \)
  • Anwenden der Textur erfordert  Abbildungsfunktion ("Texture-Mapping") von 2D auf 3D-Oberfläche: 
(s, t)^T \Rightarrow (x,y,z)^T

Textur

3D-Objekt

Abbildungsvorschrift*

*) Korrespondenzen werden entweder manuell zugeordnet oder durch Algorithmen bestimmt

Texture Mapping (Beispiel)

Bild: T. Thormählen (adaptiert)

Hinweis: Farben korrespondieren in beiden Abbildungen (2D-3D Korrespondenzen)

glTexCoord2f(0.25f,0.50f); glVertex3f(-1.0f, 1.0f, 1.0f);

Texture Mapping (Interpolation)

Was machen wir, wenn Texturkoordinaten nicht exakt auf ein Pixel fallen, sondern dazwischen liegen?

Interpolation

Texture Mapping (Interpolation)

f(\mathbf{q}_1) = \frac{x_2 - x}{x_2 - x_1} \, f(x_1, y_1) + \frac{x - x_1}{x_2 - x_1} \, f(x_2, y_1)

Bild: T. Thormählen (adaptiert)

f(\mathbf{q}_2) = \frac{x_2 - x}{x_2 - x_1} \, f(x_1, y_2) + \frac{x - x_1}{x_2 - x_1} \, f(x_2, y_2)
f(\mathbf{p}) = \frac{y_2 - y}{y_2 - y_1} \, f(\mathbf{q}_1) + \frac{y - y_1}{y_2 - y_1} \, f(\mathbf{q}_2)
  • Der Farbwert für \( \mathbf{p} \) ergibt sich durch:
  • Wert an Stelle \( \mathbf{p} \)  ergibt sich durch bilineare Interpolation der 4 benachbarten Pixelwerte (auf dem Raster)
  • Zunächst werden Farbwerte an Stützstellen bestimmt (\( \mathbf{q}_1 \) / \( \mathbf{q}_2 \))* :

*) \( f(\mathbf{p}) \) bezieht sich auf den Farbwert von \( \mathbf{p} \)

Probleme bei Texture Mapping

Bild: Gemeinfrei

Beispiel für Artefakte

  • Texturen wirken in der Ferne oft flimmernd oder unruhig
  • Grund: Viele Texel (Texturpixel) müssen auf wenige Bildschirmpixel abgebildet werden → Minification
  • Dabei gehen Informationen verloren  
    → Unterabtastung
  • Es entstehen Aliasing-Artefakte (Treppenstufen-Effekte

Mipmapping (Prinzip)

  • Mipmaps speichern die Textur in mehreren, verkleinerten Auflösungen
    → Gauß-Pyramide
  • Für entfernte Objekte wird eine passende kleinere Version gewählt
  • Ergebnis:
    • Weniger Flimmern 
    • Ruhigeres, qualitativ besseres Bild
    • Oft auch schneller, da weniger Texturdaten verarbeitet werden

Bild: Cmglee 

Mipmapping (Beispiel)

Bild: Gemeinfrei

Ohne Mipmapping

Mit Mipmapping

✅ Zusammenfassung

  • Texturen sind 2D-Rastergrafiken, die durch
    Texture-Mapping auf 3D-Objekte projiziert werden
  • Unwrapping stellt zunächst 2D-3D Korrespondenzen her
    ➔ "Ausrollen" des 3D-Objekts
  • Textur-Mapping projiziert Farbwerte der 2D-Texturen auf 3D-Punkte: \( (s, t)^T \Rightarrow (x,y,z)^T \)
  • Aliasing-Effekte durch Texturen können durch Mipmaps minimiert werden

Bild: T. Thormählen