This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Anwendung von NormalMaps zur Verbesserung des 3D Empfindens
#1
Anwendung von NormalMaps zur Verbesserung des 3D Empfindens

Normalmaps dienen der Verbesserung des 3D Empfindens bei der Darstellung auf 2D Bildschirmen.

Dazu wird das dargestellte Bild in Abhängigkeit vom Blickwinkel leicht verändert.
Dies geschieht durch partielle Änderung der Helligkeit an Kanten.
So werden Dinge die auf einen zuspringen leicht heller, und Dinge in Spalten dunkler.

Natürlich könnte man dies auch im Mesh selber durch die Formgebung realisieren, jedoch unter enorm höheren Anforderungen für die Grafikkardware.
Um dies zu verstehen eine kurze, stark vereinfachte Erklärung wie das angezeigte Bild auf dem Monitor zustande kommt.

Der Computer hat dafür nicht viele Hilfsmittel. Es gibt Dreiecke sowie deren Füllung.
Die Dreiecke bestimmen geometrische Formen, die Füllung die darauf liegende Textur.

Die Berechnung erfolgt auch in dieser Reihenfolge nacheinander.

Zunächst werden also die 3D Daten eines Objektes betrachtet.
Also die Lage von Kanten der Dreieck im Raum, bezogen auf den Standpunkt des Betrachters. Ziel ist dabei zu berechnen was weggelassen werden kann, weil der Betrachter das nicht sehen würde, um die Performance zu erhöhen.

Das geschieht mit allen Dreiecken, die:
- Abgedeckt von anderen Objekten sind.
- Falsch herum von der Seitenorientierung liegen
- zu weit weg sind
- zu klein sind
- ....

Danach steht fest welche Dreiecke angezeigt werden müssen.

Jedes dieser übrigen Dreiecke geht nun separat in die Texturierung.

Bei der Texturierung wird pro Dreieck berechnet welche Textur, mit welcher Skalierung, Drehung und Lage zur Anwendung kommt.
Dabei gibt es noch weitere Features. Jede dieser Dreiecksflächen kann manipuliert werden.

So gibt es Möglichkeiten:
- Transparenz von 0 bis 100% einzustellen, (Alpha Blending)
- Ab einem bestimmten Inhalt hart die Sichtbarkeit zu schneiden (Alpha Masking)
- Farbänderungen gleichmäßig auf die gesamte Dreiecksfläche vorzunehmen (coloring)
- sowie feinere Filter zu verwenden. Einer dieser Filter ist die Normal Map Anwendung, ein weiterer die Glow Map Anwendung.
Beides wirkt wie einen colorierung, jedoch nicht auf die gesamte Dreieckfläche sondern Punktabhängig in Abhängigkeit der Normal MAP sowie der Glow Map.

Was dann nach der Texturierung als Ergebnis feststeht wird auf dem Bildschirm dargestellt.

Nach dieser groben Einführung sollte nun der Vorteil der Normal MAP für euch klar sein.
Man kann enorm mehr Rauigkeit darstellen, ohne die Anzahl der zu berechnenden Dreiecke zu erhöhen.
Je nach Objekt und Anwendungsfall kann man bei der Komplexität ca 10^3  bis 10^6 sparen.
Man macht also die Grobe Strukur aus Dreiecken, und legt die Feinstruktur als Normal Map drüber.

Zum Beispiel kann man mit dieser Rindenstruktur den Aufwand eines Stammes auf einen Zyliner mit 48 Dreiecken reduzieren und hat doch eine Rindenstruktur. (In diesem Beispiel absichtlich stark überzeichnet)

         

Da es sich aber um einen punktbezogene "Nachcolorierung" handelt, muss man auch aufpassen was der darstellbare Farbraum hergibt. Beim typischen PC hat man 3 Farbkanäle mit je 8 Bit Farbauflösung. Somit sind pro Farbkanal nur 256 verschiedenene Helligkeitswerte darstellbar. Es kommt also darauf an welche Grundhelligkeit die Fläche (ohne NormalMap) hätte, und um wieviele Bits die Map das verändert.

Sonst säuft man im Weiss ab, was sehr grob gestört wirkt, oder man sieht gar nichts, da alles in einheitlichen Schwarz versinkt.
Gleiches gilt analog für den Einsatz von Glanz Maps (Glow MAPs).

Damit die Normal MAP auch funktioniert, muss sie also eine Speicherung von 3D Daten enthalten.
Dies geschieht in Form von Farbänderungen zum flachen 2D Zustand.
Im Gegensatz von Dreiecksinformationen die Betrachter unabhängig gespeichert werden, ist einen NormalMap fest auf 2 Blickrichtungs Achsen ausgerichtet. Es gibt also eine Info wie sich ein hinschauen aus X oder Y Richtung auswirkt.
Folglich spielt der Blickwinkel des Betrachters eine Rolle ob, und wie stark man die Map Wirkung sieht.

Es werden die 3D Werte in 2 Farbkanäten abgespeichert.
Der Basisfarbe "flach" entspricht ein mittleres lila. Änderungen im Kanal 1 geben Pink, im Kanal2 hellblaue Werte.

Was gut wirkt und keine Störungen enthält muss man immer Testen. Mit der Zeit erhält man aber ein Gefühl dafür.

Hier einige Beispiele:
Ich habe absichtlich auch "Übersteuerte" Beispiele rein gelegt damit man das besser erkennen kann.

         


         

Der Einsatz der Normalmap geschieht beim Texturieren in eurem Viewer.
Wo ihr die Textur auf eine Fläche zieht gibt es auch einen Texturplatz unter "Normals". Da kommt die Normal Map hinein.
Damit sie richtig wirkt muss sie genauso wie die Textur orientiert und skaliert sein. Dafür gibt es einen Hacken zur Synchronissation.
Aber das muss man unter Umständen pro Fläche wiederholen.
Wenn man die Wirkung einer Normal MAP im Simulator testen will, legt man anstelle der Textur ein mittleres gleichmäßiges Grau hinein (weise Grundtextur, mit leicht grauer colorierung) , und die Normal Map in den Normals Kanal. Nun sollte ein deutliches Muster sichtbar werden.

ACHTUNG: Damit Normal Maps angeziegt werden muss die Grafikqualität im Viewer ausreichend hoch eingestellt sein!!!
Bei "Hoch" oder "Ultra" funktioniert es auf alles Fälle.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste