Ja, ist Normal, oder?

balthier9999

Bekanntes Gesicht
Mitglied seit
26.02.2007
Beiträge
7.598
Reaktionspunkte
0
Es ist mal wieder soweit: Ein 3D-Blog! Diesmal geht es um sogenannte Normalen-Texturen. Das hat nichts mit dem gebräuchlichen Wort für gewohnte Standards zu tun, sondern hat seinen Ursprung in der Mathematik. Eine Normale ist der Ursprungsvektor eines Koordinatensystem, doch will ich euch nicht mit Mathe quälen, sondern erkläre ich die Technik ganz simpel. Wie jede andere Textur, ist die Normale nichts weiter als eine Bilddatei, die auf ein Objekt projiziert wird. Allerdings wirft ein Blick auf dieses Normalen-Bild Fragen auf, denn es besteht zumeist ausschließlich aus Grün-, Blau- und Rottönen (meistens). Was hat es damit auf sich?

Normalen werden dafür benutzt,
polygonarmen Modellen die Anmutung eines High-Res-Modells zu geben. Sprich, ein sagen wir 5000-Polygon-Character wirkt wie ein 100.000-Poly-Character. Doch wie zaubern die Programmierer die 95.000 Polygone dazu? Im Prinzip ist es so ähnlich, wie beim Backen.

Zunächst wird ein entspechendes
High-Res-Modell gebastelt. Arbeit ersparen sich die Entwickler durch diese Technik also nicht. Nachdem das Modell fertig ist, gibt es zwei Möglichkeiten. Entweder wird das Modell im Normalen-Kanal gebacken, oder ? was sinnvoller ist ? ein Low-Poly-Modell (also dasselbe Modell, nur mit weit weniger Polygonen) wird über das High-Res-Modell »übergestülpt«. Dann wird mit ein paar Mausklicks die Oberfläche des High-Res-Modells in den Normalen-Kanal des Low-Polys projiziert. Im Prinzip ist es so, als wenn man etwas abpauscht: Man legt das Originalbild unter ein durchsichtiges Pergament, und zeichnet auf diesem Pergament das Bild nach.

Wenn man nun das High-Poly-Modell
entfernt, und die produzierte Normal-Map (also Textur) auf das Low-Poly-Modell anwendet, dann sieht es so aus, als würde man ersteres sehen, nur etwas... abgehackter. Doch wie ist das möglich?
Bisher wurden Oberflächen-Unebenheiten mit Bump-Maps ermöglicht. Bump-Maps sind Schwarz-Weiß-Bilder. Schwarze Bereiche stehen für tiefe Bereiche, weiße für erhöhte. Diese werden dann auf der Oberfläche der Textur simuliert. Problem ist, dass die Höhenunterschiede gering sind, und das Ganze aus der Nähe blöd aussieht.
Normalmaps hingegen bestehen nicht nur aus Schwarz und Weiß sondern aus allen möglichen Farben. Das besondere: Jede Farbe steht nicht für eine Höhe, sondern für einen Winkel! Und zwar der Winkel zur Normalen, also in der Regel ein Vektor im rechten Winkel auf der Polygon-Fläche. Dadurch kann man ein 3D-Objekt simulieren, auf einer Textur, ohne Polygone einsetzen zu müssen.

Beispiele gibt es viele. Nahezu jedes Next-Gen-Spiel setzt die Technik ein, und es ist schwer herauszufinden, wo sie angewandt wird, weil der Effekt sehr echt ist. Manchmal kann man es aber auch nicht übersehen, nämlich wenn manche Modelle sowenig Polygone haben, dass sie eckig wirken, aber andererseits detailliert wirken. Hier haben es die Entwickler mit den Normalen übertrieben. Wo wir schon bei den Nachteilen sind: Normalen sehen haargenau so aus, wie echte Polygone, aber dennoch sollte man es nicht übertreiben, denn sie bleiben immer noch eine flache Textur. Ich könnte beispielsweise eine Kugel in eine Normalenmap rendern, und diese Map auf ein rechteckiges Polygon projizieren. Zwar spare ich eine Menge Polygone (alle, bis auf eins), aber eine Kugel ist´s nun nicht mehr.
Zweiter Nachteil: Zwar sparen wir Polygone und damit Rechenaufwand, aber man darf nicht vergessen, dass Normalen auch berechnet werden müssen. Das ist auch der Grund, warum dieses Feature erst seit der neuen Generation Anwendung findet.

Trotzdem bleibt die Normal-Map eine sinnvolle Technik vorallem für Videospiele. Für Filme wird sie in der Regel nicht gebraucht, da man hier gleich auf die High-Res-Modelle zurückgreift (Filme haben ja den Vorteil, dass sie nicht in Echtzeit laufen müssen). Dafür setzt man eher Displacement ein. Eine Technik, die wohl nie für Games verwendet wird. Wie bei der Bump-Map gibt?s bei Displacement ein Schwarz-Weiß-Bild, bei denen wieder eine Farbe für eine Höhe steht. Der feine Unterschied: Die Höhenunterschiede werden tatsächlich beim Rendern erzeugt. Jedoch dauert der Rendervorgang dann länger. Die Entwickler bei Pixar müssen häufig abwägen: Displacement oder echte Polygone. Echte Polygone brauchen Zeit, eh sie modelliert sind. Displacement ist leichter zu erstellen, aber braucht länger beim Rendern.

So, das war das kleine Ein-mal-Eins der auf Texturen simulierten Höhenunterschieden. Ich hoffe, es war interressant. Bald kommt wieder der nächste. Thema geheim, da unbekannt xD

Hier ist noch ein weiter bildender Wiki-Link mit Bild: http://upload.wikimedia.org/wikipedia/commons/3/36/Normal_map_example.png
 
Normalen machen dem Prozessor allerdings ganz schön viel Arbeit, weil man ja immer Schnittkanten und Entfernung berechnen muss. Wir sind also noch sehr weit vom idealen 3D-Programm entfernt.

Übrigens würde ich freiwillig auf ein paar Millionen Polygone verzichten, wenn die Entwickler uns dafür bessere Texturen spendierten.
 
Zurück