- Bump mapping
-
Bumpmapping, auch Reliefzuordnung, ist eine Technik zur Darstellung von extrem detailreichen Objekten, ohne die Geometriekomplexität des Objekts zu erhöhen, die vor allem in 3D-Visualisierungsprogrammen zum Einsatz kommt. Der Trick dabei ist, dass die benötigten Informationen in einer Textur gelagert werden, mit deren Hilfe Schattierungen auf eine Oberfläche gezeichnet werden.
Bumpmapping ist somit nur eine (wenngleich wirksame) Illusion, welche Oberflächenunebenheiten simuliert, die in der Geometrie des Modells gar nicht vorhanden sind.
Es verbessert die Bildqualität und den Realismusgrad, ohne sich groß auf die fürs Rendern benötigte Zeit niederzuschlagen. Außerdem ist das Einsatzgebiet nicht nur auf Schattierungen begrenzt. Reflexionen können mit dieser Technik genauso behandelt werden. Bumpmapping spielt bereits eine große Rolle in Projekten der Unterhaltungsindustrie, da sich die visuelle Qualität deutlich verbessern lässt, ohne die Leistung dabei nennenswert zu beeinträchtigen.
Voraussetzung für die Verwendung von Bumpmaps ist ein Beleuchtungsmodell, das auf Per-Pixel-Lighting basiert. APIs wie DirectX oder OpenGL haben die nötigen Routinen bereits vorliegen. Meistens wird jedoch eine Kombination aus Vertex und Pixel-Shadern verwendet, um die nötigen Effekte exakt zu kontrollieren.
Inhaltsverzeichnis
Height-Mapping
Die relativen Höheninformationen liegen in einer Textur in Form von Graustufen vor - der sog. Heightmap. Jeder Grauwert steht für eine bestimmte Höhe. Normalerweise ist Schwarz (Wert 0) die „tiefste“ Stelle und Weiß (Wert: 255) die „höchste“. Diese Form der Datenspeicherung ist nicht nur auf Bumpmapping beschränkt, viel öfter kommt sie bei der Generierung von riesigen Terrains zum Einsatz.
Da Höhenunterschiede nur durch verschiedene Graustufen auf der Textur vorgegaukelt werden, die Flächen aber glatt bleiben treten einige sichtbare Fehler auf:
- Bei flachem Betrachtungswinkel wirkt die Struktur stark verzerrt.
- Die Silhouette bleibt so eben wie beim ursprünglichen Objekt.
- Es wird ein glatter Schatten geworfen.
- Bumps werfen keine Schatten aufeinander.
Normal-Mapping
In einer Normal Map werden anstatt von Höheninformationen Vektoren in ein RGB-Farbentripel konvertiert. Jeder Pixel besteht aus 3 Farbenkanälen: Rot, Grün und Blau. Diese können als X,Y und Z interpretiert werden: der Vektor muss nur mehr normalisiert werden, um daraus den Helligkeitsfaktor am betreffenden Punkt zu berechnen (siehe Per-Pixel-Lighting). Hierbei muss beachtet werden, dass der Vektor, der aus den Farbwerten berechnet wird, im Tangentenraum vorliegt. Um die nötigen Berechnungen durchführen zu können, muss dieser Vektor in das Weltkoordinatensystem transformiert werden. Alternativ könnten auch alle anderen Vektoren (Kamera-Punkt, Licht-Punkt) in das Tangentenkoordinatensystem verschoben werden.
Anwendung
Der 3D-Modeller baut zwei Versionen eines Modells auf: eine hochauflösende, sehr detailreiche (100.000+ Polygone) und eine für das fertige Programm bestimmte, undetaillierte (100–10.000 Polygone). Ein Programm berechnet den Unterschied zwischen den beiden Modellen und beschreibt mit den gewonnenen Daten eine Textur. Diese Textur wird dann auf das Low-Poly-Modell gespannt. Im fertigen Spiel/Bild/Anwendung bekommt der Benutzer den Eindruck, dass das hochdetaillierte Modell verwendet wird.
Außerdem kann eine Heightmap in eine Normalmap umgewandelt werden, welche heutzutage am häufigsten verwendet wird.
Virtual Displacement-Mapping
Eine noch plastischer wirkende Darstellung. Wurde entwickelt, als Displacement Mapping noch nicht in Echtzeit möglich war, und wird auch heute noch gerne zur Ersparnis von Rechenzeit verwendet.
Im Unterschied zum richtigen Displacement Mapping, bei dem sich die Geometriekoordinaten ändern, werden hier die Texturkoordinaten auf Per-Pixel-Basis modifiziert um Beleuchtungseffekte zu erzeugen. Die einfachste dieser Varianten nennt sich Parallax Mapping und berechnet relativ zur Kameraposition aus einer Heightmap die neuen Texturkoordinaten.
Der Nachteil ist, dass eigentlich nicht sichtbare Pixel trotzdem gerendert werden. Abhilfe schafft nur das Speichern zusätzlicher Beziehungen zwischen Texel (Verdeckungen) über weitere Texturen (View-Dependent Mapping). Außerdem ist zu beachten, dass die Oberfläche des Objekts weiterhin vollkommen flach bleibt, da nur die Helligkeitswerte der Textur verändert werden und nicht, wie beim Displacement Mapping, die Form des Objekts. Das fällt besonders bei flachem Betrachtungswinkel, und an den Objektkanten unschön auf.
Allerdings leiden darunter auch die anderen Beleuchtungsarten, wenn auch nicht so sehr.
Weblinks
Wikimedia Foundation.