1
Inhalt Einführung... 3 Bumpmapping im Home-Nostruktor... 4 Flächennormalen und die Idee des Bumpmapping... 5 Erstellung der Normalmap... 6 Erstellung der Lightmap... 9 Das Ergebnis... 10 Nachteile von Bumpmapping... 11 Abbildungsverzeichnis... 12 2
Einführung In diesem Kapitel werden Sie die Grundlagen von Bumpmapping im Home- Nostruktor kennenlernen. Mithilfe von Bumpmapping können Sie alleine über die Textur eines Modells den Eindruck erzeugen, als ob das Modell wesentlich dreidimensionaler aufgebaut ist. Ein eindrucksvolles Beispiel liefert z.b. ein Beispielprojekt zu Bumpmapping im Home- Nostruktor. Abbildung 1: Beispielprojekt Bumpmapping Die Schrift auf dem Würfel scheint dreidimensional aus dem Würfel herauszustehen. In Wirklichkeit ist dieser Effekt alleine auf Bumpmapping zurückzuführen. 3
Bumpmapping im Home-Nostruktor Bei der Konstruktion eines Modells mit Bumpmapping-Einsatz muss bei der Konstruktion nichts anders gemacht werden. Es müssen allerdings einige Dinge beachtet werden (siehe spätere Abschnitte). Beim Eintrag der Modelltextur in die Texturen.txt muss ein weiterer Eintrag getätigt werden: Textur{ id(60001) name(60001) automipmap() magfilter(1) minfilter(5) bump_t(0.040) } Die Zahl 0.040 kann hierbei ersetzt werden. Ich selbst habe aber wenig Effekt durch eine Änderung festgestellt, weshalb der Wert auch einfach so gelassen werden kann. Das Modell nutzt jetzt Bumpmapping. Jetzt muss nur noch die Modelltextur zu einer Bumpmapping-Textur werden. In diesem Beispiel hat die Textur den Dateinamen 60001.png. Aus dieser Textur wird durch Ergänzung einer Normalmap und einer Lightmap eine Bumpmapping-Textur. Die Normalmap wird unter dem Dateinamen 60001_n.png in den Parallelsordner gelegt. Die Lightmap wird unter dem Namen 60001_h.png in den Parallelsordner gelegt. Wie diese beiden Maps erstellt werden, erfahren Sie in den nächsten drei Abschnitten. 4
Flächennormalen und die Idee des Bumpmapping Abbildung 2: Flächennormalen Die Abbildung zeigt die Flächennormalen bei einer auskonstruierten quadratischen Erhöhung in der Mitte einer größeren Fläche. Diese Situation soll jetzt alleine durch eine Bumpmapping-Textur realisiert werden. Statt 18 Dreiecke würde man dann nur 2 Dreiecke für das Modell benötigen, was eine erhebliche Einsparung wäre. Die Schatten an den Seitenflächen der Erhebung werden mit einer Lightmap nachempfunden, indem der Bereich einfach dunkler gefärbt wird. Die Normalmap gibt für jeden Punkt der Textur eine zugehörige Normale (Normalenvektor) an. Die Verschlüsselung erfolgt über die Pixelfarben in der Normalmap. Die Bumpmapping- Technik gauckelt also vor, dass es sich tatsächlich um ein austexturiertes Modell handelt, obwohl die Flächennormalen lediglich aus der Normalmap berechnet werden. 5
Erstellung der Normalmap Die Erstellung der Normalmap ist sehr aufwendig. Hierzu überlegt man sich zunächst die Normalen der Flächen und schreibt sie in Vektorschreibweise. Nun übersetzt man die x-, y- und z-komponenten der Normalen in eine Pixelfarbe: Rot = Runden ( 255 255 x + 2 2 ) Grün = Runden ( 255 255 y + 2 2 ) Blau = 255 z (Hinweis: für z sind nur Werte zwischen 0 und 1 zulässig) Für das Beispiel würde die Normalmap dann folgendermaßen aussehen: Abbildung 3: Normalmap zum Beispiel Übersetzen Sie die Farben der Normalmap in Flächenvektoren und vollziehen Sie nach, warum die Map gerade zu unserem Beispiel passt! 6
Als Beispiel möchte ich hier die Normale der großen Hauptfläche bestimmen. Die Normale zeigt aus der Ebene heraus ausschließlich in z-richtung, ist also: N = 0 0 1 Normalen werden übrigens immer normiert dargestellt, d.h. N = 1. Die Pixelfarbe ist dann (r, g, b) = (128, 128, 255). Zur Erstellung von Normalmaps gibt es auch mehr oder weniger gute Onlinetools, die einem zu einer Textur eine Normalmap berechnen können. Die Ergebnisse sind allerdings meist nicht wirklich überzeugend. Tools wie makehuman oder Blender erzeugen auch selbst Normalmaps zu den Modellen, die natürlich ohne weiteres im Home-Nostruktor genutzt werden können. Einen wichtigen Hinweis noch zur Texturierung im Home-Nostruktor: Abbildung 4: Texturierungsvarianten im Home-Nostruktor Eingezeichnet sind zwei Möglichkeiten eine Fläche im Home-Nostruktor durch Zuweisung von Texturkoordinaten zu texturieren. Normalerweise unwichtig, macht dies bei Bumpmapping einen riesen Unterschied. In der rechten Variante wird die 7
Textur an der y-achse gespiegelt aufgetragen. Die Normalen werden allerdings weiterhin nach obigen Formeln aus der Pixelfarbe der Normalmap berechnet, was dazu führt, dass die x-komponente der Normalen als x-komponente interpretiert wird. Mit fatalen Folgen! Erinnern Sie sich daran, dass die Normalen bei einem auskonstruierten Modell die Ausrichtung der Flächen und damit deren Beleuchtung bestimmen. Nehmen wir an, Sie haben ungünstigerweise die Textur so aufgetragen, dass x als x und y als y interpretiert werden. Dann erhalten Sie folgende Situation: Abbildung 5: Falsche Texturkoordinatenzuweisung Man erkennt sofort, dass die Schattierung durch die falsch gerichteten Normalenvektoren exakt andersherum ist, als gewollt. Die gewünschte quadratische Erhöhung wird zur Senke. Texturieren Sie im Home-Nostruktor deshalb immer nach Variante Abb. 4 (links)! Andernfalls müssen Sie mühselig die Normalmap an Ihren Konstruktionsstil anpassen. 8
Erstellung der Lightmap Abbildung 6: Lightmap zum Beispiel Die Lightmap sieht so aus. Warum? Die Annahme ist, dass das Plateau der Erhebung am meisten Licht abbekommt. Die große Fläche etwas weniger. An den Seitenflächen sollte es bei Frontalbeleuchtung dunkler sein. Im Prinzip gibt man also mit der Lightmap eine Beleuchtungsvorgabe, die über Graustufen erfolgt. 9
Das Ergebnis Abbildung 7: Ergebnis des Bumpmapping Das Ergebnis des Bumpmapping-Beispiels ist ein Modell, welches nur noch aus 2 Dreiecken besteht, aber ebenfalls eine ähnliche quadratische Erhebung zeigt. 10
Nachteile von Bumpmapping Abbildung 8: Nachteile von Bumpmapping Der Nachteil von Bumpmapping ist, dass der Effekt verschwindet, wenn man in einem spitzen Winkel auf die Fläche schaut. Es handelt sich eben nur um eine optische Täuschung. Dies sollte beim Ausloten der Einsatzmöglichkeiten immer beachtet werden. 11
Abbildungsverzeichnis Abbildung 1: Beispielprojekt Bumpmapping... 3 Abbildung 2: Flächennormalen... 5 Abbildung 3: Normalmap zum Beispiel... 6 Abbildung 4: Texturierungsvarianten im Home-Nostruktor... 7 Abbildung 5: Falsche Texturkoordinatenzuweisung... 8 Abbildung 6: Lightmap zum Beispiel... 9 Abbildung 7: Ergebnis des Bumpmapping... 10 Abbildung 8: Nachteile von Bumpmapping... 11 12