Normale Zuordnung - Normal mapping
In der 3D-Computergrafik ist Normal Mapping oder Dot3-Bump-Mapping eine Textur-Mapping- Technik, die verwendet wird, um die Beleuchtung von Unebenheiten und Dellen vorzutäuschen – eine Implementierung des Bump-Mappings . Es wird verwendet, um Details hinzuzufügen, ohne mehr Polygone zu verwenden . Eine übliche Verwendung dieser Technik besteht darin, das Aussehen und die Details eines Modells mit niedrigem Polygon zu verbessern, indem eine Normalabbildung aus einem Modell mit hohem Polygon oder einer Höhenabbildung erzeugt wird .
Normal Maps werden üblicherweise als reguläre RGB- Bilder gespeichert , wobei die RGB-Komponenten den X-, Y- bzw. Z-Koordinaten der Oberflächennormalen entsprechen .
Geschichte
1978 beschrieb Jim Blinn , wie die Normalen einer Oberfläche gestört werden können, um geometrisch ebene Flächen ein detailliertes Erscheinungsbild zu verleihen. Die Idee, geometrische Details aus einem High-Polygon-Modell zu übernehmen, wurde in "Fitting Smooth Surfaces to Dense Polygon Meshes" von Krishnamurthy und Levoy, Proc. SIGGRAPH 1996, wo dieser Ansatz zur Erstellung von Displacement Maps über Nurbs verwendet wurde . 1998 wurden zwei Veröffentlichungen mit Schlüsselideen für die Übertragung von Details mit Normalkarten von hohen zu niedrigen Polygonnetzen vorgelegt: "Appearance Preserving Simplification", von Cohen et al. SIGGRAPH 1998 und "Eine allgemeine Methode zur Erhaltung von Attributwerten auf vereinfachten Netzen" von Cignoni et al. IEEE-Visualisierung '98. Ersteres führte die Idee ein, Oberflächennormalen direkt in einer Textur zu speichern, anstatt Verschiebungen, obwohl das Modell mit geringen Details durch einen bestimmten eingeschränkten Vereinfachungsalgorithmus generiert werden musste. Letzteres präsentierte einen einfacheren Ansatz, der das High- und Low-Polygonnetz entkoppelt und die Wiederherstellung beliebiger Attribute des High-Detail-Modells (Farbe, Texturkoordinaten , Verschiebungen usw.) auf eine Weise ermöglicht, die nicht davon abhängt, wie das Low -Detail-Modell Detailmodell erstellt. Die Kombination des Speicherns von Normalen in einer Textur mit dem allgemeineren Erstellungsprozess wird immer noch von den meisten derzeit verfügbaren Tools verwendet.
Methode
Um die Berechnung Lambertian (diffuse) Beleuchtung einer Oberfläche, der Einheitsvektor von dem Schattierungspunkt zur Lichtquelle ist punktiert mit dem Einheitsvektor normal zu der Oberfläche, und das Ergebnis ist die Intensität des Lichts auf der Oberfläche. Stellen Sie sich ein polygonales Modell einer Kugel vor - Sie können die Form der Oberfläche nur annähern. Durch die Verwendung einer 3-Kanal-Bitmap, die über das Modell texturiert ist, können detailliertere Normalvektorinformationen codiert werden. Jeder Kanal in der Bitmap entspricht einer räumlichen Dimension (X, Y und Z). Dies verleiht der Oberfläche eines Modells viel mehr Details, insbesondere in Verbindung mit fortschrittlichen Beleuchtungstechniken.
Räume
Die räumlichen Dimensionen unterscheiden sich je nach dem Raum, in dem die Normal Map kodiert wurde. Eine einfache Implementierung codiert Normalen im Objektraum, sodass rote, grüne und blaue Komponenten direkt mit den X-, Y- und Z-Koordinaten korrespondieren. Im Objektraum ist das Koordinatensystem konstant.
Objektraum-Normalmaps können jedoch nicht ohne weiteres auf mehreren Modellen wiederverwendet werden, da die Ausrichtung der Oberflächen unterschiedlich ist. Da Farbtexturmaps frei wiederverwendet werden können und Normalmaps dazu neigen, einer bestimmten Texturmap zu entsprechen, ist es für Künstler wünschenswert, dass Normalmaps die gleiche Eigenschaft haben.
Die Wiederverwendung von Normalkarten wird durch die Kodierung von Karten im Tangentialraum ermöglicht . Der Tangentialraum ist ein Vektorraum , der die Oberfläche des Modells tangiert. Das Koordinatensystem variiert glatt (basierend auf den Ableitungen der Position bezüglich der Texturkoordinaten) über die Oberfläche.
Tangentialraum-Normalkarten können durch ihre dominante violette Farbe identifiziert werden, die einem direkt von der Oberfläche nach außen gerichteten Vektor entspricht. Siehe unten .
Tangentialraum berechnen
Um die Störung in der Normalen zu finden, muss der Tangentenraum richtig berechnet werden. Meistens wird die Normale in einem Fragment-Shader nach dem Anwenden des Modells und der Ansichtsmatrizen gestört. Normalerweise stellt die Geometrie eine Normale und eine Tangente bereit. Die Tangente ist Teil der Tangentenebene und kann einfach mit dem linearen Teil der Matrix (die oberen 3x3) transformiert werden . Allerdings muss die Normale durch die inverse Transponierung transformiert werden . Die meisten Anwendungen möchten, dass die Bitangente der transformierten Geometrie (und den zugehörigen UVs) entspricht. Anstatt zu erzwingen, dass die Bittangente senkrecht zur Tangente ist, ist es im Allgemeinen vorzuziehen, die Bittangente genau wie die Tangente zu transformieren. Sei t Tangente, b Bitangente, n sei normal, M 3x3 der lineare Teil der Modellmatrix und V 3x3 der lineare Teil der Ansichtsmatrix.
Wie es funktioniert
Um die Berechnung Lambertian (diffuse) Beleuchtung einer Oberfläche, der Einheitsvektor von dem Schattierungspunkt zur Lichtquelle ist punktiert mit dem Einheitsvektor normal zu der Oberfläche, und das Ergebnis ist die Intensität des Lichts auf der Oberfläche. Stellen Sie sich ein polygonales Modell einer Kugel vor - Sie können die Form der Oberfläche nur annähern. Durch die Verwendung einer 3-Kanal-Bitmap, die über das Modell texturiert ist, können detailliertere Normalvektorinformationen codiert werden. Jeder Kanal in der Bitmap entspricht einer räumlichen Dimension (X, Y und Z). Diese räumlichen Dimensionen sind relativ zu einem konstanten Koordinatensystem für Objektraum-Normalkarten oder zu einem sich glatt ändernden Koordinatensystem (basierend auf den Ableitungen der Position in Bezug auf Texturkoordinaten) im Fall von Tangenten-Raum-Normalkarten. Dies verleiht der Oberfläche eines Modells viel mehr Details, insbesondere in Verbindung mit fortschrittlichen Beleuchtungstechniken.
Einheitsnormalenvektoren, die der u,v-Texturkoordinate entsprechen, werden auf Normalenabbildungen abgebildet. Es sind nur Vektoren vorhanden, die zum Betrachter zeigen (z: 0 bis -1 für Linkshänder-Ausrichtung ), da die Vektoren auf vom Betrachter wegweisenden Geometrien nie angezeigt werden. Die Zuordnung ist wie folgt:
X: -1 to +1 : Red: 0 to 255 Y: -1 to +1 : Green: 0 to 255 Z: 0 to -1 : Blue: 128 to 255
light green light yellow dark cyan light blue light red dark blue dark magenta
- Eine Normale, die direkt auf den Betrachter (0,0,-1) zeigt, wird auf (128.128.255) abgebildet. Daher sind die dem Betrachter direkt zugewandten Teile des Objekts hellblau. Die gebräuchlichste Farbe in einer normalen Karte.
- Eine Normale, die auf die rechte obere Ecke der Textur (1,1,0) zeigt, wird auf (255,255,128) abgebildet. Daher ist die rechte obere Ecke eines Objekts normalerweise hellgelb. Der hellste Teil einer Farbkarte.
- Eine Normale, die nach rechts von der Textur zeigt (1,0,0) wird auf (255,128,128) abgebildet. Daher ist der rechte Rand eines Objekts normalerweise hellrot.
- Eine Normale, die nach oben auf die Textur zeigt (0,1,0), wird auf (128,255,128) abgebildet. Daher ist die Oberkante eines Objekts normalerweise hellgrün.
- Eine Normale, die nach links von der Textur zeigt (-1,0,0) wird auf (0,128.128) abgebildet. Daher ist der linke Rand eines Objekts normalerweise dunkelcyan.
- Eine Normale, die auf den Boden der Textur zeigt (0,-1,0), wird auf (128,0,128) abgebildet. Daher ist der untere Rand eines Objekts normalerweise dunkel magenta.
- Eine Normale, die auf die linke untere Ecke der Textur (-1,-1,0) zeigt, wird auf (0,0,128) abgebildet. Daher ist die untere linke Ecke eines Objekts normalerweise dunkelblau. Der dunkelste Teil einer Farbkarte.
Da bei der Punktproduktberechnung für die Berechnung der diffusen Beleuchtung eine Normale verwendet wird , können wir sehen, dass {0, 0, –1} den {128, 128, 255}-Werten neu zugeordnet würde, was diese Art von Himmelblau ergibt Farbe in normalen Karten (blaue (z) Koordinate ist Perspektive (Tiefe) Koordinate und RG-xy Flachkoordinaten auf dem Bildschirm). {0.3, 0.4, –0.866} würde dem ({0.3, 0.4, –0.866}/2+{0.5, 0.5, 0.5})*255={0.15+0.5, 0.2+0.5, -0.433+0.5} neu zugeordnet *255={0,65, 0,7, 0,067}*255={166, 179, 17} Werte ( ). Das Vorzeichen der Z-Koordinate (blauer Kanal) muss umgedreht werden, um den Normalenvektor der Normalmap mit dem des Auges (des Blickpunkts oder der Kamera) oder des Lichtvektors abzugleichen. Da negative z-Werte bedeuten, dass der Scheitelpunkt vor der Kamera (und nicht hinter der Kamera) liegt, garantiert diese Konvention, dass die Oberfläche genau dann mit maximaler Stärke leuchtet, wenn Lichtvektor und Normalenvektor zusammenfallen.
Normales Mapping in Videospielen
Interaktives Normal Map-Rendering war ursprünglich nur auf PixelFlow möglich , einer parallelen Rendering- Maschine, die an der University of North Carolina in Chapel Hill gebaut wurde . Später war es möglich, normales Mapping auf High-End- SGI- Workstations mit Multi-Pass-Rendering und Framebuffer- Operationen oder auf Low-End-PC-Hardware mit einigen Tricks unter Verwendung von Palettentexturen durchzuführen. Doch mit dem Aufkommen von Shadern in Personal Computern und Spielekonsolen, wurde Normal Mapping bei kommerziellen Videospielen verwendet Ende 2003. Normal Mapping Beliebtheit Start für Echtzeit - Rendering wird aufgrund seiner guten Qualität der Verarbeitung Anforderungen Verhältnisses im Vergleich zu anderen Methoden der ähnliche Effekte erzeugen. Ein Großteil dieser Effizienz wird durch die entfernungsindizierte Detailskalierung ermöglicht , eine Technik, die die Details der Normalmap einer gegebenen Textur selektiv verringert (vgl. Mipmapping ), was bedeutet, dass entferntere Oberflächen weniger komplexe Beleuchtungssimulation erfordern. Viele Authoring-Pipelines verwenden hochauflösende Modelle , die in In-Game-Modelle mit niedriger/mittlerer Auflösung integriert sind, die mit normalen Karten erweitert werden.
Basic Normal Mapping kann in jeder Hardware implementiert werden, die palettisierte Texturen unterstützt. Die erste Spielekonsole mit spezieller Hardware für normales Mapping war die Sega Dreamcast . Die Xbox von Microsoft war jedoch die erste Konsole, die den Effekt weit verbreitet in Einzelhandelsspielen einsetzte. Von den sechsten Generation - Konsolen , nur die PlayStation 2 ‚s GPU fehlt Einbau-Normal Mapping - Unterstützung, obwohl es der PlayStation 2 - Hardware Vektoreinheiten simuliert werden kann. Spiele für die Xbox 360 und die PlayStation 3 setzen stark auf normales Mapping und waren die erste Spielekonsolengeneration, die Parallax Mapping einsetzte . Der Nintendo 3DS unterstützt nachweislich normales Mapping, wie Resident Evil: Revelations und Metal Gear Solid: Snake Eater gezeigt haben .
Siehe auch
- Reflexion (Physik)
- Umgebungsokklusion
- Tiefenkarte
- Backen (Computergrafik)
- Tessellation (Computergrafik)
Verweise
Externe Links
- Normal Map Tutorial Pro-Pixel-Logik hinter Dot3 Normal Mapping
- NormalMap-Online Free Generator im Browser
- Normales Mapping auf sunandblackcat.com
- Blender-Normalzuordnung
- Normales Mapping mit palettierten Texturen unter Verwendung alter OpenGL-Erweiterungen.
- Normale Kartenfotografie Manuelles Erstellen von Normalkarten durch Überlagern digitaler Fotos
- Normale Zuordnung erklärt
- Einfacher Normal Mapper Open Source Normal Map Generator
