Generelle Frage zu Normalmaps
-
@hustbear
Allerdings ist es IMO einfacher, und aus Symmetriegründen auch "schöner" es gleich wie bei den anderen zwei Komponenten zu machen.
Ja jetzt wo du es sagst, kann mich dem nur beipflichten
-
Ishildur schrieb:
@Gameco
Hei danke dir vielmals für deine Antwort. Eine Frage habe ich noch. Was bringen denn Normalen mit negativen Vorzeichen im Tangentspace? Ich meine, im ungünstigen Fall werden dann plötzlich Faces beleuchtet, die eigentlich von der Lichtquelle abgewandt sind. Hast du da ein konkretes Anwendungsbeispiel?selbst ohne negative normalen in der normalmap passiert es oft dass du beleuchtung von faces siehst die dir eigentlich abgefand sind, weil du nur normalen hast und keine hoehen.
-
hustbaer schrieb:
Ishildur schrieb:
@Gameco
Hei danke dir vielmals für deine Antwort. Eine Frage habe ich noch. Was bringen denn Normalen mit negativen Vorzeichen im Tangentspace? Ich meine, im ungünstigen Fall werden dann plötzlich Faces beleuchtet, die eigentlich von der Lichtquelle abgewandt sind. Hast du da ein konkretes Anwendungsbeispiel?In einer Tangent-Space Normal-Map stehen doch keine Normalen drin
Ein Kanal speichert den Multiplikator für die Tangente und einer den für die Binormale.
Du rechnest jaadjustedNormal = normal + (tangent * (map.R - 0.5) * scale) + (binormal * (map.G - 0.5) * scale); // kann sein dass R und G vertauscht sind, hab das nimmer so genau im kopf adjustedNormal = normalize(adjustedNormal);
Und damit man die Normale in alle Richtungen verschieben kann, muss der Multiplikator dabei natürlich auch negativ werden können.
was glaubst du weshalb das normalmap heisst
klar stehen da normalen drinne, und deiner formal nach koennte die adjusted normal nie negativ werden, sogar 90grad zur seite waere nicht moeglich. aber solche normalmaps gib es.
Normalmaps werden ja nicht nur aus bump/heightmaps generiert, sondern auch von einigen tools indem sie von highpoly auf lowpoly mappen. z.B. (ich glaube das heisst) ATI Melody oder Cryteks polybump.
-
hustbaer schrieb:
@hustbear
Was du da machst ist IMHO Bumpmapping und nicht Normalmapping?Wenn man diese Unterscheidung treffen willst, dann vermutlich ja.
Allerdings wird so-gut wie überall wo ich was über Tangent-Space Normal-Mapping gelesen habe es so gemacht wie ich es skizziert habe.
ich denke dass du dich verlesen haben musst;)
die ganz alten "bumpmapping" demos haben naemlich (wegen der mangelnden rechenzeit), statt die normale zu transformieren, im vertexshader die light direction in den tangentspace gedreht (z.b. die ersten geforce256 demos).
dort hat man dann mittels einer cubemap die light direction normalisiert und ein dot product (und das war schon die ganze "bumpmap hardware die dazu kam") mit der normalmap im tangentspace gemacht.
Erst mit der zeit wurde es sparsammer einmal die normale der normalmap in den worldspace zu rotieren. (bzw haben ein paar spiele die lichtquelle in den objectspace rotiert und die normalmap war dann auch im objects space abgespeichert, um noch ein paar instructions zu sparen, auf kosten von texturspeicher).Spucken denn deine Tools (Modeler, Renderer, ...) solche 3-dimensionalen Tangent-Space Normal-Maps aus?
*nods*
lustigerweise macht man das bei CG renderings fuer filme usw durchaus so wie du das gesagt hast. Artist stecken eine bumpmap rein (also graustufen, 1 channel) und eine "petrubnormal" funktion biegt diese dann.
Das schoene daran ist, dass das auch mit prozeduralen funktionen geht (eigentlich dort sogar noch viel besser, weil die meist kontinuierlich und unendlich detailiert sind).
-
rapso schrieb:
lustigerweise macht man das bei CG renderings fuer filme usw durchaus so wie du das gesagt hast. Artist stecken eine bumpmap rein (also graustufen, 1 channel) und eine "petrubnormal" funktion biegt diese dann.
Das schoene daran ist, dass das auch mit prozeduralen funktionen geht (eigentlich dort sogar noch viel besser, weil die meist kontinuierlich und unendlich detailiert sind).Nicht nur dass man es prozedural machen kann, man kann so Bump-Maps (oder Height-Maps oder wie auch immer man das nennt) auch total einfach in jedem Bildbearbeitungsprogramm malen und wie benötigt anpassen. Ein wenig Weichzeichner da, ein wenig Nachschärfen dort...
Allerdings kann man sich dann immer noch aussuchen, ob man eine "echte" 3D Tangent-Space Normal-Map haben will, oder eine 2D Variante (wie auch immer man die dann korrekt bezeichnet <- kann auch gleich als Frage aufgefasst werden: wie nennt man das dann korrekt?).
-
Ah, kanns sein dass du irgendwie Normalmaps mit dudv Maps verwechselt hast!?
-
@dot
werden dudv maps verwenwendet, um Normalmapping zusammen mit Displacementmapping zu verwenden?
-
Nein dudv Maps werden normalerweise für Environment Bumpmapping verwendet.
Für Displacementmapping brauchst du eine normale Heightmap/Displacementmap, also ein Graustufenbild in dem das Displacement drin steht...
-
@dot
Ja aber wenn ich dynamisches displacement mapping verwende dann muss ich ja den Tangentspace in jedem Frame neu berechnen. Besser ist es IMHO, diesen in einer Map speichern, die zur Displacementmap passt und einfach auslesen
-
Du meinst also eine Map die die Tangentspace Basisvektoren enthält? Das ist dann aber keine Normalmap!? Außerdem halte ich ein dynamisches Berechnen des Tagentspace im Shader für garnichtmal so abwegig wenn ich schon Displacement Mapping betreibe, evtl. könnte man da sogar wertvolle Bandbreite sparen...
-
@dot
Hehe, ein interessanter Gedanke!Kommt halt darauf an, ob die Applikation eher Vertexbound oder FSB Bound ist. Das perverse ist ja, dass sich dies im weiteren Verlauf der Entwicklung jederzeit ändern kann uns auch von Enduser zu Endusersystem