Warum sind normale Karten überwiegend blau?

44

Warum sind normale Karten überwiegend blau statt einer zufälligen Farbe?

Ich vermute, normale Vektoren eines 3D-Objekts können in jede Richtung zeigen, wie zum Beispiel:

(1.0, 0.1, 0.5), (0.1, -0.5, 0.3), (-0.51, 0.46, -1.0) ... 

Bildbeschreibung hier eingeben

Jinbom Heo
quelle

Antworten:

71

Es gibt zwei Arten von normalen Karten, die üblicherweise in der Spieleentwicklung verwendet werden. Sie denken, sie sollten so funktionieren, wie ein Typ funktioniert (Normalkarten im Modellraum), aber die meisten Spiele verwenden einen anderen Typ (Normalkarten im Tangentialraum), weshalb Sie Normalkarten meist blaue Texturen zuordnen.

Beispiel für eine normale Modellraumkarte

Bei Normalen-Maps im Modellraum codiert jeder Kanal den genauen Wert der Normalen unter Verwendung desselben Koordinatensystems wie die Scheitelpunkte des Modells, mit dem er verwendet wird. Dies bedeutet, dass verschiedene Teile der normalen Karte unterschiedliche Farbtöne haben, Pixel in der Nähe haben jedoch normalerweise ähnliche Farben. Ein Beispiel für eine Normalkarte im Modellraum wird oben angezeigt ( Quelle ).

Normalkarten im Tangentialraum sind normalerweise hellblau. Dieser Kartentyp definiert Normalen in einem Koordinatenraum, der für die Position jedes Pixels auf der Oberfläche des Netzes eindeutig ist. Es verwendet die (interpolierte) Scheitelpunktnormale als Z-Achse und zwei weitere orthogonale Vektoren, die als Tangens und Bitangens bezeichnet werden, als X- und Y-Achse. Grundsätzlich können Sie sich die Normalen in der Karte als einen "Versatz" von der Normalen für dieses Pixel vorstellen, der durch Interpolation der Scheitelpunktnormalen berechnet wird. Die Tangenten- und Bitangentenvektoren werden ebenfalls aus Vertexdaten interpoliert und bestimmen, welche Richtung auf dem Netz "oben" und "links" in der normalen Karte entspricht. Das in der Frage bereitgestellte Bild ist ein hervorragendes Beispiel dafür, wie eine typische Tangentenraum-Normalkarte aussieht. Daher werde ich hier kein weiteres Beispiel angeben.

Die Komponenten eines normalen normalen (nicht beabsichtigten) Wortspiels reichen von [-1, 1]. Aber Komponenten einer Farbe in einem Bild reichen von [0, 1](oder [0, 255]aber normalerweise sind sie normalisiert [0, 1]). Normalen werden also so skaliert und versetzt, dass die Normale (0, 0, 1)zur Farbe wird (0.5, 0.5, 1). Dies ist die hellblaue Farbe, die Sie in normalen Karten sehen, und sie zeigt keine Abweichung von der interpolierten Scheitelpunktnormalen an, wenn Tangentenraumnormalen verwendet werden.

Der Grund, warum Tangentenraumnormalen gegenüber Modellraumnormalen bevorzugt werden, liegt in der Tatsache, dass sie einfacher zu erstellen sind und für mehrere Netze verwendet werden können. Außerdem werden bei Verwendung eines animierten Netzes immer Tangentialraum-Normalen verwendet, da sich die Normalen ständig ändern.

bcrist
quelle
6
Ich liebe diese Erklärung - prägnant, enthält die Mathematik, geht auf die verschiedenen Arten ein, die für normale Karten verwendet werden, und erklärt, warum sie verwendet werden.
Tom 'Blue' Piddock
Vielen Dank, dass Sie die Unterscheidung zwischen bitangentund binormalrichtig gemacht haben.
Imallett
2
@imallett Ja, Flächen haben eine Normalität, Tangens und Bitangens, während Kurven eine Tangens, eine Normalität und eine Binormalität haben. Zumindest ist das mein Verständnis.
Crist
8

Die normale Karte zeigt meistens von einer Oberfläche nach außen. Angenommen, Sie gehen von der üblichen Abbildung der Z-Komponente der XYZ-Normalvektoren in Richtung "Tiefe" und der Abbildung auf die B-Komponente des RGB-Farbraums aus, dann sind die meisten Normalvektoren in erster Linie blau.

Wenn die Textur beispielsweise rot wäre, würde dies bedeuten, dass die normale Karte eine Oberfläche ist, die meist nach rechts zeigt. Sie können diese Funktion in Ihrem Beispielbild sehen, wenn die Beulen am rechten Rand einen rötlichen Farbton aufweisen.

Eine vollständig rötlich gefärbte Oberfläche würde keinen Sinn ergeben. Das würde auf eine Fläche hindeuten, die ganz nach rechts weist. Das würde nur mit Geometrie modelliert, nicht Teil einer normalen Karte.

Sean Middleditch
quelle
3
Um dies ein wenig näher zu erläutern, enthält die Normalmap aus Ihrer Sicht NICHT den Normalvektor, sondern den Normalvektor aus der Sicht der Gesichter. Nachdem Sie also Ihre Normalen aus dem Gesicht erhalten haben, mischen Sie dies mit der normalmaps-normalvector. Und da es größtenteils blau ist (0, 0, 1), bedeutet dies, dass sich der Normalvektor, den Sie bereits haben, nicht ändert. (Denken Sie darüber nach, als würden Sie jedes Gesicht flach auf den Boden legen, bevor Sie es zeichnen, und dann den Normalvektor aus der Normalkarte verwenden. Meistens ist dies nach oben gerichtet, wenn rechts oder links etwas mit Ihrem Netz nicht stimmt.)
Tkausl