§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