Zum 3DCenter Forum
Inhalt




Wie stark komprimiert 3Dc?

15. Juni 2005 / von aths / Seite 2 von 7


   Was sind Normalmaps?

Normalisierte Normalen haben die Länge von eins. Nicht normalisierte Normalen stehen weiterhin senkrecht auf dem jeweiligen Punkt, aber haben eine Länge ungleich eins (und ungleich null). Die Idee beim Dot3-Bumpmapping ist nun, die pro Pixel vorliegende, per Interpolation errechnete Normale noch im Winkel zu modifizieren oder gleich ganz zu ersetzen. Die Daten hierfür, also die Normalen-Winkel, werden in einer Textur gespeichert, die Normalmap genannt wird. Der Normalenvektor besteht aus drei Komponenten: X, Y und Z – diese Werte werden einfach in den Farbkanälen R, G und B gespeichert.

Normalmaps kann man aus Heightmaps gewinnen, welche wiederum die Höhe speichern. Wir zeigen der Übersichtlichkeit wegen nicht, wie man 3D-Normalen aus einer 2D-Höhenkarte gewinnt, sondern wie man 2D-Normalen aus einer 1D-Höhenkarte gewinnen kann.



Eine Lichtquelle in endlicher Entfernung strahlt auf eine glatte Polygonoberfläche. Die Höheninformation wird nicht berücksichtigt.

Wir haben hier eine Höheninformation. Daraus eine Normalmap zu gewinnen, ist mit mehreren Methoden möglich, das Verfahren, dass in diesem Artikel besprochen wird, ist nur eine Herangehensweise von vielen. Dazu teilen wir die Höhenkarte in Stufen ein. Dort wird dann die Differenz zum jeweiligen Nachbarn ermittelt, also der Gradient berechnet. Daraus lässt sich der Normalenvektor erzeugen. Wir haben das für drei Beispiele eingezeichnet:



Für jeden der Abschnitte wird eine Normale berechnet, wir zeigen das nur für drei Abschnitte.

  1. Beispiel 1: Der Höhenwert rechts ist größer als der der Höhenwert links. Demzufolge zeigt der Normalenvektor schon mal nach links. Da der Höhenunterschied genauso groß ist wie der Sample-Abstand, zeigt der Vektor genauso weit nach oben wie nach links – ist also im 45°-Winkel ausgerichtet.

  2. Beispiel 2: Der Höhenwert rechts ist kleiner als der links, damit ist es nach rechts abschüssig. Der Normalenvektor zeigt also nach rechts. Allerdings ist die Höhendifferenz kleiner als der Sample-Abstand, in dem die Höhenwerte gemessen werden. Damit zeigt der Vektor weniger nach rechts und mehr nach oben.

  3. Beispiel 3: Zwischen den beiden Werten gibt es praktisch keinen Unterschied in der Höhe. Damit zeigt die Senkrechte (also die Normale) auf der Heightmap an dieser Stelle senkrecht nach oben.



So wäre die Beleuchtung korrekt.

Nun wird die Höheninformation für die Umrechnung zur Normalmap allerdings vernichtet, es bleibt nur die Winkelinformation. Da es vierkanalige Texturen gibt, lässt sich in der gleichen Textur jedoch auch noch die Höheninformation unterbringen, die man einfach aus der vorliegenden Heightmap kopiert.



Unsere drei Beispielnormalen in der Normalmap.

Die Normalmap speichert natürlich für jedes Sample einen Normalenvektor, wir haben nur die drei beschrieben Beispiele eingetragen. Außerdem zeigt unser Bild eine endlich entfernte Lichtquelle. Sofern der Bumpmapping-Effekt für Sonnenlicht berechnet werden soll, kann die Lichtquelle als unendlich weit entfernt gedacht werden. Damit wäre es nicht mehr erforderlich, pro Pixel auch den Lichtwinkel zu bestimmen, dies kann dann einfach einmal pro Vertex-Normale gemacht (und dann über das Dreieck interpoliert) werden.

Je nach konkretem Bumpmapping-Verfahren kann die Normalmap die Normalen für die entsprechende Oberfläche völlig ersetzen, oder zur Modifikation der per Interpolation erzeugten Normalen verwendet werden. So oder so – die Einbeziehung der Normalen sorgt dafür, dass in Abhängigkeit zum Winkel zur Lichtquelle das Pixel heller oder dunkler gemacht wird – was hier einen 3D-Effekt simuliert, da die Normalen ja aus der Höheninformation gewonnen wurden. Bumpmapping nutzt man also, um Vertices wegzulassen, und ihre Normaleninformation stattdessen aus einer Textur namens Normalmap zu holen.






Kommentare, Meinungen, Kritiken können ins Forum geschrieben werden - Registrierung ist nicht notwendig Zurück / Back Weiter / Next

Shortcuts
nach oben