PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DOT3 Bump Mapping


Nerothos
2003-11-16, 17:19:41
Hi

ich beschäftige mich gerade etwas mit dem Thema Bump Mapping.
Angeguckt und verstanden habe ich bereit Embossed Bump Mapping und EM-Bump Mapping. Was ich teilweise aber nicht verstehe ist das DOT3 Bump Mapping.
Da wird aus der Höhenmap (Was wird in dieser gespeichert? Vektoren? Was drücken diese aus?) und der Normalen des Dreiecks eine sogenannte Abweichungsnormale berechnet.
Dazu ein paar Fragen:
1. Was drückt diese Abweichungsnormale aus?
2. Wozu braucht man die?
3. Wie wird die genau berechnet?
4. Wie wird über die Abweichungsnormale und den Lichtvektor die Endfarbe eines Texels bestimmt?

Ich hab schonmal bei 3dconcept.ch in dem Bump Mapping Artikel nachgelesen, aber da wird das nicht so tiefgründig erläutert, wie ich mir das vorstelle =)

Könnte sich dazu mal ein Bump Mapping versierter User äußern? Danke schonmal :)

Xmas
2003-11-16, 18:15:17
Fangen wir mal beim einfachsten, nämlich Model Space Normal Mapping an.
Hier wird einfach zu jedem Punkt auf der Oberfläche des Models (zumindest zu so vielen Punkten wie die Texturauflösung hergibt) die tatsächliche Normale im Model Space in die Textur gepackt.
Sprich, wenn ein Eckpunkt des Models im Model Space die Normale (1,0,0) hat, dann wird auch (1,0,0) in der Textur gespeichert.

Vorteil dieses Verfahrens: Man braucht keine Umrechnung. Man transformiert wie üblich die Lichtquelle vom World Space in den Model Space, und berechnet die Lichteinwirkung pro Pixel mit der unveränderten Normale aus der Textur. Die Vertex-Normalen spielen bei diesem Verfahren gar keine Rolle mehr.
Nachteil: Man braucht Model-spezifische bzw. sogar Polygon-spezifische Normal Maps. Bei einem simplen Haus kann man nicht sagen "ich nehme dieselbe Mauer-Normalmap für alle Wände", weil die Wände ja in verschiedene Richtungen zeigen.

Deswegen gibt es Tangent Space Normal Mapping. Hier wird die Lichtquelle noch einmal vom Model Space in den sog. "Tangent Space" transformiert, welcher pro Dreieck existiert. Dabei bilden die Textur U und V-Richtungen sowie die interpolierte Vertex-Normale die drei Achsen des Raumes, und die Vektoren in der Normal Map geben die Normalen relativ zu diesem Raum an.


Bei Normal Mapping wird immer die Lichtquelle in den "Normal Space", also den Raum für den die Normalen definiert sind, transformiert, nicht andersrum. Denn man hat einen Punkt und/oder Richtung pro Lichtquelle, aber Tausende Normalen prö Textur.

Nerothos
2003-11-16, 18:23:46
Ok, dein Posting hat mir gerade ziemlich auf's Maul gehaun *ggg*
Ich werd in 2h, wenn ich's vielleicht verstanden hab, nochma was dazu schreiben ;)

Ne, das muss ich erstmal verdauen...

loewe
2003-11-16, 19:01:11
versuch es einfach noch mal damit: http://www.3dconcept.ch/artikel/bump/4.htm

Immer noch ein sehr guter Artikel und weitgehend zu verstehen! :)

Xmas
2003-11-16, 19:08:01
loewe, den Artikel hat der doch schon erwähnt ;)

Außerdem komme ich, wenn ich dem Link folge, irgendwie nicht mehr auf 3dconcept.ch :|

Nerothos
2003-11-16, 19:41:07
Danke loewe, aber den Link meinte ich ;)

Das dort ist mir ein bischen zu oberflächlich. Ich versteh halt nicht alles, so wie es da steht (siehe meine Fragen, die ich gestellt habe).

Ich hab mir nochmal deinen Text durchgelesen Xmas. Ich versteh nur nicht, was das mit DOT3 BM zu tun hat :)
Außer, dass in deinem Text Normalen vorkommen, seh ich da keinen Zusammenhang, sorry. Da is sicher einer, aber ich seh ihn nich :)

Kannst du nich mal versuchen, das einem Hirnrissigen zu erklären? Mir? *gg* =)

Demirug
2003-11-16, 20:02:02
Fangen wir mal hinten an.

Für das Berechnen von DOT3 BM brauchst du 2 Vektoren.

1. Den Lichtvektor der angibt aus welcher Richtung das Licht kommt.

2. Die Pixelnormale welche einen Vektor darstellt welcher senkrecht auf der Fläche steht.

Das DOT3 Produkt zwischen diesen beiden Vektoren gibt dann an wie viel von den Licht von diesem Pixel reflektiert wird.

Beide Vektoren müssen sich dafür aber im gleichen Bezugsystem befinden. Und genau da ist das Problem. Der Lichtvektor liegt normalweise im Weltsystem vor. Die Normalen im Objekt(Model) oder Texture(Tangent) System. Vor dem Verrechnen muss daher einer der beiden Vektoren in das andere System überführt werden. normalerweise macht man das mit dem Lichtvektor weil das weniger Rechenaufwand ist.

Xmas
2003-11-16, 20:41:43
Der Begriff "DOT3" bezeichnet das Skalarprodukt zweier 3-Komponenten-Vektoren.

Das Skalarprodukt heißt im Englischen "Dot Product", Dot weil das Formelzeichen für diese Operation ein Punkt ist (·). Im Gegensatz zum Vektorprodukt, "Cross Product", dessen Formelzeichen ein Kreuz (x) ist.

Und 3 eben, weil die beiden Operanden 3-Komponenten-Vektoren oder auch "3-dimensionale" Vektoren sind.

Das Skalarprodukt ist folgendermaßen definiert:
A · B = (ax, ay, az) · (bx, by, bz) = ax * bx + ay * by + az * bz

Praktischerweise ist dies auch:
A · B = |A| * |B| * cos(phi)

Wobei |A| und |B| der Betrag (= die Länge) der beiden Vektoren ist, und phi der Winkel zwischen ihnen. Wenn A und B also Einheitslänge haben, ist A · B = cos(phi)

Und genau diesen Umstand nutzt man aus. Betrachtet man die diffuse Reflexion von Licht auf einer Oberfläche, so ist sie am stärksten wenn das Licht senkrecht auf die Oberfläche fällt, also parallel zur Oberflächennormalen, und am schwächsten wenn das Licht fast parallel zur Oberfläche fällt, also senkrecht zur Normalen.

Der Cosinus des Winkels zwischen Lichtvektor L und Normale N hat genau dieses Verhalten. Mit N · L (multipliziert mit der Intensität des Lichts) kann man also berechnen, wieviel diffuses Licht ein Punkt einer Oberfläche reflektiert.

loewe
2003-11-16, 20:52:56
Original geschrieben von Commander Larve
Danke loewe, aber den Link meinte ich ;)

Das dort ist mir ein bischen zu oberflächlich. Ich versteh halt nicht alles, so wie es da steht (siehe meine Fragen, die ich gestellt habe).


Ok, entschuldige!

Wenn du etwas mehr Mathe brauchst, hilft vielleicht das hier: http://www.cs.uni-magdeburg.de/~ifranke/cv/computerspiele/bump/bumpmathematik.htm

Mit den Hinweisen von Xmas zusammen sollte das schon ein gut Stück weiter helfen.

auki
2003-11-16, 23:23:28
Original geschrieben von Xmas
Im Gegensatz zum Skalarprodukt, "Cross Product", dessen Formelzeichen ein Kreuz (x) ist.


Ich denke du meinst Kreuzprodukt (oder Vektorprodukt) und nicht Skalarprodukt. :)

Xmas
2003-11-16, 23:36:42
Original geschrieben von auki
Ich denke du meinst Kreuzprodukt (oder Vektorprodukt) und nicht Skalarprodukt. :)
Öh, ja. Das Skalarprodukt im Gegensatz zum Skalarprodukt macht auch nicht so viel Sinn ;)

Nerothos
2003-11-17, 06:32:48
Ok, ich denke, jetzt hab ich es begriffen :)

Vielen Dank an euch =)