§7 Mapping-Techniken

Werbung
§7 Mapping-Techniken
© Achim Ebert
CG.7.1
7.1 Motivation
Bisher sind alle Oberflächen (polygonale Objekte,
später auch parametrisierte Freiformflächen) glatt –
im Gegensatz zu wirklich existierenden natürlichen
Oberflächen.
?
+
© Achim Ebert
CG.7.2
7.1 Motivation
Explizite Wiedergabe von Oberflächendetails oft zu
aufwendig (Modellierung und Rendering)
Details deshalb oft durch die Anwendung
verschiedenster Mapping-Techniken simuliert
Am Anfang stand das reine Texture Mapping:
„(...) Projektion (zweidimensionaler) (Strukturen
und) Muster auf die Oberfläche von Körpern (...)“
Darauf aufbauend existieren mittlerweile
verschiedenste Varianten, viele davon Hardwareunterstützt!
Entsprechend wird heute die Simulation von
Oberflächendetails i.d.R. mittels Bitmaps, also
2D-Bildern, durchgeführt
© Achim Ebert
CG.7.3
7.2 Texture Mapping
Ausprägungen
Jahr
Name(n)
Verfahren
Merkmal
1974
Catmull
Texture Mapping
Farbe
1976
Blinn, Newell
Reflection Mapping
Reflexionen
Bump Map
1978
Blinn
Bump Mapping
Normalen
1985
Gardener
Transparency Mapping Transparenz
1986
Greene
Environment Mapping
Reflexionen
Displacement Mapping
Form, Geometrie
Texture Map
Transparency Map
1987
PIXAR
Weitere Verfahren:
Procedural Mapping, 3D Texture Mapping, …
Stanze
© Achim Ebert
CG.7.4
7.2 Texture Mapping
Ziele
Darstellung von Oberflächendetails (Materialien)
Ohne aufwändige Geometrieberechnung
Ohne aufwändige Repräsentation
„All it takes is for the
Ohne aufwändigeres Rendering
rendered image to
look right.“
(Jim Blinn, SIGGRAPH‘84)
Abbildung
T : ( x, y, z ) ∈
3
→ m∈ ,
2
,
3
,...
Problemstellungen
Realisierung der Abbildung?
Speicherung der Abbildungsvorschrift?
© Achim Ebert
Üblich: 2 Schritte
(A und B)
CG.7.5
7.2 Texture Mapping
Schritt B
Gängig: Speicherung der Abbildungswerte in Bitmap
(„Texture Map“)
Bsp.: T : 2 → 3 mit T (u,v) : 0,1 × 0,1 →
Alternativ: Prozedurale Erzeugung
3
Schritt A
Abbildung 3D-Punkt-Koordinaten auf 2D-TexturKoordinaten
Zusammen:
( x, y, z ) ∈
3
A
( u,v ) ∈
2
B
T ( u,v ) ∈
3
Für sichtbare Vertices
Für Pixel innerhalb sichtbarer Polygone: Interpolation
© Achim Ebert
CG.7.6
7.2 Texture Mapping
Begriffe:
Texture Map: Das zu mappende Bild oder Muster
(Realbild oder synthetisches Bild)
Texel: Einzelelemente (Pixel) der Texture Map
Prinzip:
© Achim Ebert
CG.7.7
7.2 Texture Mapping
Im praktischen Einsatz
Es erweist sich oft als sinnvoll, den eigentlichen
Mapping Vorgang zweigeteilt durchzuführen
In der Sichtweise forward mapping:
(1) s-mapping
Zunächst wird die Textur durch eine geeignete
(einfache) Abbildung auf eine einfache
Zwischenfläche (intermediate surface) projiziert.
Zwischenflächen: Rechteck, Box, Zylinder, Kugel
(2) o-mapping
Von dort wird die Textur auf das wirklich zu
texturierende Objekt (mit einer allgemeinen
Fläche) übertragen.
© Achim Ebert
CG.7.8
7.2 Texture Mapping
Beispiel: Zwischenobjekt planares Rechteck
(Schritt A)
?
Gegeben:
(0,h,0)
(b,h,0)
(0,1)
(1,1)
y
v
x
z
(0,0,0)
(b,0,0)
(0,0)
(1,0)
u
Bestimmung der Textur-Koordinaten:
x
u ( x, y, z ) =
b
y
v ( x, y, z ) =
h
( x, y ) ∈ [0, b] × [0, h ]
© Achim Ebert
(1,1)
(1,1)
(0,0)
CG.7.9
7.2 Texture Mapping
Beispiel: Zwischenobjekt Kugel
Kugelkoordinaten:
( x, y,z ) = ( r cosφsinθ, r sinφsinθ, r cosθ) ,
φ ∈ 0,2π  , θ ∈  0,π 
Abbildung planares Rechteck auf Kugel
→ Verzerrungen
Daher: Einschränkung auf Teilkugel
z
θo
φl
Bestimmung der Textur-Koordinaten (Bsp.)
φr
u ( φ, θ ) =
θ
θu
x
© Achim Ebert
φ
φ − φl
φr − φl
θ − θu
v ( φ, θ ) =
θo − θu
r
( φ, θ ) ∈ [ φ l , φ r ] × [ θ o , θ u ]
y
CG.7.10
7.2 Texture Mapping
Beispiel: Zwischenobjekt Kugel
θo
z
φl
Teilkugel:
φr
θ
π
π
π
φl = 0, φ r = , θu = , θo =
2
2
4
θu
φ
r
y
x
Beispiel:
φ π/2−θ
,

 π/2 π/4 
( u, v ) = 
D.h.:
© Achim Ebert
u, v ∈ [ 0,1]
CG.7.11
7.2 Texture Mapping
Kugel
Zylinder
Planar
Verwendung der Zwischenobjekte am Beispiel
© Achim Ebert
CG.7.12
7.2 Texture Mapping
Techniken des o-mappings:
© Achim Ebert
1. Reflexionsstrahl
2. Objektzentrum
3. Normalenvektor
4. Hilfsobjektnormale
CG.7.13
7.2 Texture Mapping
Texture Mapping und Aliasing
Texture Mapping ist äußerst anfällig für AliasingEffekte:
Ein Pixel in Bildschirmkoordinaten kann nach der
Rückprojektion auf die Textur dort den Bereich
mehrerer Texels überdecken
Abtastung?
Idealerweise: Integral,
Praxis: Samples + Filterung
Minification
© Achim Ebert
CG.7.14
7.2 Texture Mapping
Texture Mapping und Aliasing (cont.)
Texture Mapping ist äußerst anfällig für AliasingEffekte (cont.)
Umgekehrt: Ein Texel auf der Textur kann in Bildschirmkoordinaten mehrere Pixel überdecken → Abtastung?
Magnification
Texture Maps werden i. A. periodisch aneinandergereiht,
um eine größere Fläche zu bedecken
→ Vorsicht: Periodizität und Abtasttheorem!
Lösungsansätze:
Oversampling, Filterung und Mip-Mapping
© Achim Ebert
CG.7.15
7.3 Bump Mapping
Reines Texture Mapping
Erzeugt den Eindruck einer texturierten
aber glatten/ebenen Oberfläche
Bump Mapping
Ziel: Oberfläche „aufrauhen“ und dreidimensionaler
wirken lassen
Idee: nicht Geometrie der Oberfläche selbst
verändern, sondern Normalen bei der Auswertung
des Beleuchtungsmodells manipulieren
Simulation von Oberflächenunebenheiten auf
eigentlich glatten / „einfachen“ Oberflächen erfolgt
also durch reine Veränderung der Normalenvektoren
der Geometrie
© Achim Ebert
CG.7.16
7.3 Bump Mapping
Grundlegende Beobachtung:
© Achim Ebert
CG.7.17
7.3 Bump Mapping
Verfahren
Es wird die originale („einfache“) Fläche visualisiert,
aber die Normalen angepasst
Erinnerung: Das Phong-Beleuchtungsmodell
verwendet außer den Normalen keine weitere
Geometrieinformationen!
„Komplexe“ Geometrie mit Normalen
Einfache Geometrie mit angepassten Normalen
© Achim Ebert
CG.7.18
7.3 Bump Mapping
Verfahren
Veränderung der Normalenvektoren
Prozedural oder
Unter Verwendung von Texturen (Bump / Normal
Maps)
Bump Maps (Height Maps)
Höhentextur als Graustufenbild
Ähnlich einer Landkarte
Höhere Punkte erhalten hellere
Färbung, niedrigere Punkte
erhalten dunklere Färbung
Textur + Height Map
[wikibooks.org]
Normal Maps
Werte der Flächennormalen sind
© Achim Ebert
in den Farbwerten der
Normal-Map gespeichert
Häufig: rot = x, grün = y, blau = z
Textur + Normal Map
[wikibooks.org]
CG.7.19
7.3 Bump Mapping
Verfahren
Es können regelmäßige Strukturen (z. B. Golfball)
als auch unregelmäßige Strukturen (z. B. Baumrinde)
simuliert werden
[Ohio State University]
[Ohm Hochschule]
© Achim Ebert
CG.7.20
7.3 Displacement Mapping
Nachteil Bump Mapping
Betrachtet man die Silhouette eines mit Bump
Mapping dargestellten Körpers, so merkt man jedoch
bei genauerem Hinsehen, dass die Oberfläche in
Wirklichkeit eben ist
Displacement Mapping
Über eigentliche Oberfläche wird ein Höhenfeld
gelegt, dessen einzelne Punkte in Richtung der
Oberflächennormalen anhand einer Texture Map
verschoben werden
Hier werden also tatsächlich Oberflächenpunkte
bewegt (d.h. die Geometrie temporär geändert) !
Vorteil: Silhouette
Nachteil: schwer kontrollierbare Polygonanzahl
© Achim Ebert
CG.7.21
7.3 Bump vs. Displacement Mapping
[DMA, Kunst Universität Linz]
© Achim Ebert
CG.7.22
7.3 Bump vs. Displacement Mapping
[Bentley Systems Inc.]
[Tom‘s Hardware]
© Achim Ebert
CG.7.23
7.5 Opacity / Transparency Mapping
Ähnlich dem Alpha-Kanal bei Bildern
Objekt, auf das Opacity Map gelegt wird, kann
entsprechend der verwendeten Bildvorlage auf
seiner ganzen Oberfläche oder nur stellenweise
(graduell) transparent sein
© Achim Ebert
CG.7.24
7.6 Procedural Mapping
Allgemeine Methode, die den Umstand beschreibt,
dass eine algorithmische Beschreibung die
Grundlage des verwendeten Mapping-Verfahrens
darstellt
Prinzip wird i.d.R. für 3D-Texturen angewendet
Beispiel: Simulation von Unregelmäßigkeit
© Achim Ebert
CG.7.25
7.7 3D (Texture) Mapping
Andere Bezeichnung:
Festkörper-Textur (solid texture)
Statt einem 2D-Bild wird eine an jedem Punkt im
3D-Raum definierte Map benutzt
Mittels prozeduralen Ansätzen und geeigneten
mathematischen Funktionen lassen sich
wirklichkeitsgetreue, 3-dim. Muster erzeugen
Holzmaserung
Perlin Marmor
Steinstruktur
[Ohm Hochschule]
© Achim Ebert
CG.7.26
7.7 3D (Texture) Mapping
Diskrete 3D-Texturen
3-dimensionales Array
Lokale Koordinaten der Oberfläche indizieren direkt
die Textur:
(r, g, b) = Ctex (x, y, z)
Geometriebeschreibung „schnitzt“ Objekt aus
Texturvolumen heraus
Prozedurale Texturen
Berechnen Farbwerte aus mathematischen
Funktionen oder fraktalem Algorithmus
Vorteile: minimaler Speicheraufwand, hohe
Genauigkeit, im ganzen Raum definiert
Nachteile: Funktionen sind schwer zu erzeugen,
Berechnungsaufwand (Echtzeit!?)
© Achim Ebert
CG.7.27
7.7 3D (Texture) Mapping
3D Texture Mapping
Prozedurale 3D-Textur
[Klaas Nienhuis]
© Achim Ebert
CG.7.28
7.7 3D (Texture) Mapping
[Klaas Nienhuis]
© Achim Ebert
CG.7.29
7.8 Environment Mapping
Motivation
Bisher: Texturkoordinaten bleiben fest, auch bei
Bewegung Objekt / Beobachter
u-v-Koordinaten reine Funktion des Objekts
Problem: ungeeignet für spiegelnde Objekte
(z.B. glänzende Kugel)
Übliche Lösung: Raytracing
Korrekte Simulation des Lichtwegs durch Gesetze der
geometrischen Optik
Aber: Software-Rendering! Keine GPU-Unterstützung!
→ Kein Echtzeitverhalten!
Ziel des Environment Mappings:
Approximation von Reflexionen
mit Hilfe der Textur-Hardware !
© Achim Ebert
CG.7.30
7.8 Environment Mapping
Historisch ältestes Verfahren: Sphere Mapping
© Achim Ebert
CG.7.31
7.8 Environment Mapping
Sphere Mapping: Geometrie
Sichtstrahl
Reflexionsstrahl
Normale
Bildebene
hintere
Hälfte
Reflektierende
Kugel
vordere
Hälfte
Sphere Map
Vorstellung:
Betrachter sehr weit entfernt, Kugel sehr klein
© Achim Ebert
CG.7.32
7.8 Environment Mapping
Realisierung von Schritt A
(s. vorne)
Abbildung 3D-Punkt-Koordinaten auf 2D-TexturKoordinaten:
( x, y,z ) ∈
3
u,v ) ∈
r∈
(Reflexionsvektor
2
Reflexionsgesetz
Reflexionsgesetz:
s
n
r
3
( u,v ) ∈
2
Reflexionsrichtungen
→ Textur-Koordinaten
r = 2 s, n n − s
Geometrie-Setup: Einheitskugel im Ursprung
y
v
1
1
u
0
© Achim Ebert
⇒ Zuordnung:
Punkt-Koord. → Textur-Koord.
z
x
y = 2v − 1
x = 2u − 1
-1
z = 1 − x 2 − y2
CG.7.33
7.8 Environment Mapping
Normale n = n 0 = (n x , n y , n z )T = (x, y, z)T
:
Sichtrichtung:
s = (0, 0,1)T
 rx 
 nx   0
Nach Refexionsgesetz: r =  ry  = 2n z  n y  −  0 
r 
 n  1
 z
 z  
x = 2u − 1
Nach n auflösen,
normalisieren:
 rx   n x 
1

  
n0 =
r
y  =  ny 
2
2
2 
rx + ry + (rz + 1) 
  
 rz + 1  n z 
Resultat:
y
v
1
u
0
© Achim Ebert
z
1
x
-1
u=
rx
2 rx2 + ry2 + ( rz + 1)
2
+
1
2
v=
ry
2 r + r + ( rz + 1)
2
x
2
y
2
+
1
2
CG.7.34
7.8 Environment Mapping
Beispiele
© Achim Ebert
CG.7.35
7.8 Environment Mapping
Beispiele
[Paul Haeberli]
© Achim Ebert
CG.7.36
7.8 Environment Mapping
Beispiele
Fisheye Aufnahmen
(nach vorne und hinten)
Resultierende Environment Maps
(Zentrum vorne und hinten, je nachdem
wo mehr Details benötigt werden)
[Seth Green]
© Achim Ebert
CG.7.37
7.8 Environment Mapping
Beispiele
[Seth Green]
© Achim Ebert
CG.7.38
7.8 Environment Mapping
Beispiele
[Need For Speed]
© Achim Ebert
CG.7.39
7.8 Environment Mapping
Probleme
Sphere Map gilt nur für einen Beobachtungspunkt!
Dynamische Neuberechnung der Sphere Map ist
aufwendig!
Verbesserungen
Dual-Paraboloid-Mapping
Cube Mapping
(in heutiger Grafik-Hardware implementiert)
© Achim Ebert
CG.7.40
7.8 Environment Mapping
Cube Map
Von der Mitte eines
(gedachten) Würfels
werden 6 Bilder durch alle
Stirnflächen berechnet
Cube Maps werden
in OpenGL direkt
unterstützt
Hoher Aufwand:
Bearbeitung von
6 Texturen notwendig
Sichtpunkt
[Wikipedia]
© Achim Ebert
CG.7.41
7.8 Environment Mapping
Environment Cube Mapping
Zu texturierendes Objekt wird innerhalb des Würfels
„platziert“
Zur Berechnung der „Spiegelung“ (d.h. der
Texturkoordinaten) wird der jeweilige
Reflexionsvektor verwendet
Umsetzung in OpenGL
Texturgenerierungsmethode GL_NORMAL_MAP:
Es wird der Teil der Textur auf das Objekt gemappt,
auf welchen die Normale des Punktes zeigt, der vom
Blickvektor getroffen wurde
Texturgenerierungsmethode GL_REFLECTION_MAP:
Es wird der Teil der Textur auf das Objekt gemappt,
auf welchen der Reflektionsvektor zeigt, der von dem
getroffenen Punkt ausgeht
[Wikipedia]
© Achim Ebert
CG.7.42
7.8 Environment Mapping
Environment Cube Mapping
[DGL Wiki]
© Achim Ebert
CG.7.43
7.8 Environment Mapping
Environment Cube Mapping
Bisher: statische Cube Map
Spiele: Umgebung (dynamisch ...) soll sich
in Echtzeit „spiegeln“
Daher: dynamisches Cube Mapping
Alle Seiten des Würfels Frame für Frame in die
entsprechenden Texturen rendern
Objekt, das spiegeln soll, darf in Berechnung natürlich
nicht vorhanden sein
Vorsicht: „sparsam“ verwenden“!
Rendern der Texturen kostet natürlich Performance,
daher beispielsweise Auflösung nicht zu hoch setzen
[Wikipedia]
© Achim Ebert
CG.7.44
7.8 Environment Mapping
Beispiele
[NVidia]
© Achim Ebert
CG.7.45
7.8 Environment Mapping
Beispiele (dynamisch)
[zanir.wz.cz]
© Achim Ebert
CG.7.46
7.9 Chrome / Reflection Mapping
Abbildung eines willkürlichen Musters aus dem
zweidimensionalen Texturraum (chrome map) auf
eine reflektierende Oberfläche
Chrome Mapping basiert auf gleicher Idee wie
Environment Mapping
Sichtstrahl trifft auf Objekt
Reflektionsstrahl schneidet Chrome Map
Unterschiede liegen in der Textur
Chrome Mapping:
Map bildet Materialstruktur (z.B. Metall, Glas) ab
Environment Mapping:
Map besteht aus Abbild der Umgebung
© Achim Ebert
CG.7.47
7.9 Chrome / Reflection Mapping
Chrome + Bump Mapping
[Second Picture]
Chrome Mapping
[Second Picture]
© Achim Ebert
CG.7.48
7.10 Resümee
Mapping-Techniken bilden die wesentliche
Grundlage für praktisch alle heute kommerziell
eingesetzten Computergrafik-Techniken
Verschiedene Arten von Mapping-Techniken
können miteinander kombiniert auf das gleiche
Objekt angewendet werden
Dies leisten heute verfügbare Werkzeuge,
Rendering- und Animationspakete standardmäßig
Alle Arten von Mapping-Techniken sind äußerst
anfällig für Aliasing-Effekte!
© Achim Ebert
CG.7.49
7.10 Resümee
Beispiel:
Environment + Bump Mapping
[Godzilla Unleashed, Wii]
© Achim Ebert
CG.7.50
7.10 Resümee
Beispiel:
Chrome / Reflection Mapping + Ray Tracing
[Terminator 2]
© Achim Ebert
CG.7.51
Herunterladen