Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Siegmund

Frischling

  • »Siegmund« ist der Autor dieses Themas

Beiträge: 13

Wohnort: Deutschland

Beruf: Freier Künstler

  • Private Nachricht senden

1

20.12.2010, 18:42

NormalMap BumpMap

Hallo, ich bin der Neue und habe auch schon die erste Frage!

Es gibt vieles darüber im Internet. Code-Schnippsel und Tutorials. Aber keins konnte mich richtig befriedigen. Jetzt versuche ich es mal hier. Die erste Frage wäre: Wozu gibt es Normal- und BumpMaps? Beide erfüllen doch den selben Zweck. Ein unterPolygonisiertes Model (oder Textur) zu einem Pseudo-Überpolygonisiertem Modell/ Textur zu machen. Diese Frage ist aber nur sekundär.

Wichtiger wäre mir folgende: Durch das geschickte Vermengen von Color- und NormalMap, erhalte ich eine gebumpte Textur oder Modell. Dazu werden die Normalen, (Bitangenten und Tangenten?) gebraucht. Jetzt wird irgendwas daraus errechnet - pro Frame ein Mal!!

Wieso daß denn?

Kann man daß alles nicht von einem Modellingprogramm abspeichern lassen, damit man sich die blöde Rechnerei ersparen kann?
Oder kann man nicht wenigstens diese Berechnungen einmalig machen?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

20.12.2010, 19:21

Bumpmapping ist ein Überbegriff für alle möglichen Techniken die dazu dienen Oberflächenstrukturen zu simulieren die rein geometrisch nicht wirklich vorhanden sind. Normalmapping ist einfach nur eine Art von Bumpmapping. Warum macht man sowas? Ganz einfach: Um Polygone zu sparen. Natürlich könnte man auch ein extreme highpoly Modell wo jede noch so kleine Falte ausmodelliert ist verwenden. Das Problem ist nur dass ein solches Modell dann aus mehreren Millionen Dreiecken besteht und selbst dabei normalerweise erst nur ein kleiner Teiler einer noch sehr viel komplexeren Szene ist. Wenn man annähernd interaktive Frameraten schaffen will ist sowas einfach nicht machbar (allerdings macht man heutzutage üblicherweise ein solches Highpoly model und leitet für den Realtime Einsatz aus diesem dann eine lowpoly Version mit zugehöriger Normalmap ab). Darum behilft man sich mit Bumpmapping wo das Modell aus sehr viel weniger Polygonen besteht und man eben z.B. über Beleuchtungseffekte (wie beim Normalmapping) versucht zusätzliches Oberflächendetail darzustellen. Und diese Berechnungen muss man natürlich immer wieder aufs Neue machen da der Effekt erst was bringt wenn er dynamisch ist. Die feine Oberflächenstruktur wirkt eben erst dann echt wenn man sieht wie das Licht mit den Bumps interagiert sobald sich Objekt, Lichtquelle und Kamera relativ zueinander bewegen. Würde man das statisch machen könnte man gleich alles in eine einfache Textur baken, hätte am Ende also nichts anderes als rudimentäres Lightmapping...

Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von »dot« (20.12.2010, 19:38)


Siegmund

Frischling

  • »Siegmund« ist der Autor dieses Themas

Beiträge: 13

Wohnort: Deutschland

Beruf: Freier Künstler

  • Private Nachricht senden

3

20.12.2010, 21:18

Ich muß erst einmal nachgoogeln was rudimentäres LightMapping ist. Ich meinte aber etwas anderes. Wenn ich ein LowPolyModell rendere, dann hat dieses ein paar Normale, die doch immer gleich sind.(??) Diese werden dann mittels einer Normalmap quasi erweitert (per Pixel), um einem Details vorzugaukeln. Da sich ein Modell in einem Spiel in der Regel bewegen lässt, muß natürlich der Lichteinfall neu berechnet werden. Das ist sogar mir klar. Ich meinte aber die Berechnung der zusätzlichen Normalen, die sich aus der Normalmap ergeben. Diese könnte man doch vorher einmalig errechnen, was dem Shader später viel Rechenarbeit erspart ... oder habe ich etwas übersehen?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

20.12.2010, 21:19

Ich verstehe nicht ganz, die Normalmap wird natürlich vorberechnet!?

Unter Lightmapping versteht man einfach das Vorberechnen der Beleuchtung einer Szene in Texturen (Lightmaps). Für statische (und sehr beschränkt auch dynamische) Beleuchtung mehr oder weniger ein Standardverfahren.

EDIT: Oh, meinst du die Transformation der Normalen aus dem Tangentspace in den Object- bzw. Worldspace!? Denn, das tut man natürlich auch, darum unterscheidet man zwischen Tangent- und Object- bzw. Worldspace Normalmaps. Die "vorberechneten" Varianten (wo die Normalen direkt im Object- bzw. Worldspace in der Normalmap gespeichert sind) haben eben nur auch ihre Einschränkungen. Z.B. ist es gängige Praxis Teile einer Textur auf einem Model mehrfach zu verwenden (z.B. um Symmetrien auszunutzen etc.). Mit einer Objectspace Normalmap ist sowas nicht möglich was unter Umständen signifikant größere Texturen und damit mehr Speicherverbrauch bedeutet. Auch wird es schwierig eine solche Normalmap z.B. auf ein animiertes Model zu legen da sich die Geometrie und damit die Richtung der Polygonnormalen dort dynamisch ändern kann. Tangentspace Normalmapping ist darum der gängigere Weg aber es gibt natürlich die auch anderen Varianten.

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »dot« (20.12.2010, 21:50)


Siegmund

Frischling

  • »Siegmund« ist der Autor dieses Themas

Beiträge: 13

Wohnort: Deutschland

Beruf: Freier Künstler

  • Private Nachricht senden

5

21.12.2010, 09:52

Auch wenn ich nicht alle Zeilen eines Shaders verstehe, funktionieren alle nach demselben Prinzip: Man übergibt denen die Color- und die Normaltextur und der Shader berechnet dann die fehlenden Normalen.

Wieso dem Shader die Normaltextur übergeben, wenn ich die Normalen schon vorher berechnen könnte, denn die sind doch immer gleich. Das ist mein Problem, denn ich bin mir nicht sicher ob dieser Gedanke stimmt und wenn ja, dann weiß ich auch nicht wo ich ansetzen soll. Ausnahme ist natürlich ein wabbelndes Modell, daß sein Äußeres immer verändert und somit auch seine virtuelle Molekularstruktur. :-)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

21.12.2010, 10:12

Wie oben beschrieben braucht der Shader die Normalen je nach Art des Normalmapping doch, wie soll er deiner Meinung nach an die Normalen kommen ohne dass du sie ihm übergibst!?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

21.12.2010, 10:28

Man übergibt denen die Color- und die Normaltextur und der Shader berechnet dann die fehlenden Normalen.

Nicht ganz. Der Shader nimmt die Normale aus der Normalmap und verrechnet die mit der Normale der Oberfläche des aktuellen Pixels zu einer neuen Normale, welche mehr Details simulieren soll. Es "fehlt" da überhaupt keine Normale. Die Map muss nur in den richtigen Space transformiert werden, sprich in die richtige Lage "gedreht" werden.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Siegmund

Frischling

  • »Siegmund« ist der Autor dieses Themas

Beiträge: 13

Wohnort: Deutschland

Beruf: Freier Künstler

  • Private Nachricht senden

8

21.12.2010, 11:40

Ach so. Danke. Ich schlage jetzt mal in den gelben Seiten nach.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Siegmund« (21.12.2010, 11:55)


Werbeanzeige