Warum sind normale Karten im Tangentenraum nicht vollständig blau?

11

Warum sind normale Karten nicht nur blau? Ich würde denken, dass normale Karten überwiegend blau sein sollten, da die Z-Komponente der Normalen durch Blau dargestellt wird. Normalen zeigen in Z-Richtung aus der Oberfläche heraus, daher sollten wir Blau als vorherrschende Farbe sehen, da die Z-Komponente dominiert.

Per Definition ist der Tangentenraum senkrecht zur Oberfläche. An jedem Punkt sollte die Normalen immer in Z (blaue Richtung) ohne X (rote Richtung) oder Y (grüne Richtung) zeigen. Daher sollte die normale Karte (da es sich um eine "normale Karte" handelt) die Farbe der Normalen haben, die nur blau ist (R = x = 0, G = y = 0, B = z = 1), ohne dazwischen liegende Schattierungen.

Aber normale Karten sind nicht so und sie haben Farbverläufe. Warum ist das so?

Seepferdchen
quelle

Antworten:

19

Der Tangentenraum ist senkrecht zu den geometrischen Normalen - den interpolierten Scheitelpunktnormalen der Polygone. Die Normalkarte liefert die Schattierungsnormalen relativ zum Tangentenraum, der durch die geometrischen Normalen definiert wird. Wenn die Schattierungsnormalen nicht mit den geometrischen Normalen identisch sind - dh weil Sie eine detaillierte Oberflächentextur mit Merkmalen haben, die nicht in der Geometrie modelliert sind - weicht die normale Karte von "flachblau" ab (RGB 128, 128, 255).

Das ist der springende Punkt bei normalen Karten - auf diese Weise erhalten Sie die detaillierte, kleinformatige Form einer Oberfläche, die durch Beleuchtung und Schattierung dargestellt wird, obwohl Sie nicht alle diese winzigen Details mit Polygonen modelliert haben.

Nathan Reed
quelle
1
Um dies zu erläutern, werden normale Karten im Allgemeinen im Tangentenraum erstellt, da dies genau bleibt, wenn das Netz animiert wird, wohingegen z. B. normale Karten im Modellraum erfordern würden, dass die normalen Karten zusammen mit der Animation animiert werden, die Sie möglicherweise haben (was besonders kompliziert wäre zum Beispiel Skelette und beliebige Ragdolls). Für die statische Geometrie gibt es keinen technischen Grund, warum Sie keine normale Karte mit Modellraum und nicht ganz Blau haben könnten, wodurch Ihr Pixel-Shader nur geringfügig vereinfacht wird (auf Kosten der Konsistenz, wenn mehr Shader erforderlich sind und wiederum mehr Shader erforderlich sind Auswahländerungen).
MaulingMonkey
1
(Auch normale Kartendaten können normalerweise nicht an mehreren Stellen auf einem Netz wiederverwendet werden, wenn sie sich im Modellraum befinden.)
MaulingMonkey
+1; Der letzte Absatz ist der Schlüssel zur Frage: Wenn die Oberfläche, auf der sie sich befanden, vollständig flach sein sollte, wären sie blau. Wenn die Oberfläche eine gewisse Rauheit aufweisen sollte, modelliert die normale Karte diese Rauheit, ohne dass zusätzliche Geometrie angegeben werden muss.
Maximus Minimus
2

Die einfache Antwort ist, dass es an der Bereichsvorspannung liegt.

Normalen haben für jede Komponente (x, y, z) einen Bereich von -1,0 bis 1,0. Die normale Karte, die als 24-Bit-RGB-Bild gespeichert ist, hat andererseits einen Bereich von 0 bis 255 für jede Komponente.

Dies bedeutet, dass alle Komponenten, die Null waren, in der normalen Karte (die auf 128 rundet) zu 127,5 (der exakten Mitte) werden.

Der Normalenvektor (0,0,1) wird im normalen Kartenbild (128,128,255), das eine violette Farbe ist, und nicht zu reinem Blau (0,0,255).

GraphixGuy
quelle