OpenGL Tutorial (Version 3.3) – Post Processed Fog, sphärisches Normal Mapping (Download)

Zwei neue Techniken sollen im nachfolgenden Programmbeispiel vorgestellt werden – sphärisches Normal Mapping sowie die Berechnung von Nebeleffekten im Zuge des Post Processings (Post Processed Fog).

Sphärisches Normal Mapping ermöglicht die pixelgenaue Beleuchtung von Asteroiden und Planeten im Fragment Shader mit geringem Rechenaufwand. Der Trick liegt dabei in der Berechnung der Normal Map aus der korrespondierenden Height Map, in welcher die Höhenwerte der Planeten- bzw. Asteroiden-Oberfläche gespeichert sind. Alle Normal Maps sind für gewöhnlich für die Berechnung der Beleuchtung in der xy-Ebene definiert. Für alle anderen Ebenen müssen die Normalen zuvor entsprechend transformiert werden. Im Zuge des sphärischen Normal Mapping ersparen wir uns die notwendigen Transformationen im Shader und rechnen stattdessen die Normal Map für die Beleuchtung einer xy-Ebene in eine Normal Map für die Beleuchtung eines Kugelmodells um.


Im Rahmen der Nebelberechnung werden zwei Techniken vorgestellt:

Beim Global Fog wird die Nebelfarbe lediglich in Abhängigkeit vom Kameraabstand berechnet. Alle Objekte jenseits des sichtbaren Bereichs werden in der vorgegebenen Nebelfarbe schattiert. Stimmen Nebelfarbe und Hintergrundfarbe nicht überein, dann wirkt der Nebel jedoch sehr unnatürlich (z. B. weiß schattierte Objekte vor einem blauen Himmel).

Beim Background Fog wird nun auch der Hintergrund in die Berechnung der Nebelfarbe mit einbezogen. Auf diese Weise lassen sich unnatürliche Nebelfarben vermeiden (Objekte jenseits des sichtbaren Bereichs werden genauso schattiert wie der Hintergrund und erscheinen dadurch unsichtbar).

Die für die Nebelberechnungen benötigten Parameter finden sie in der Datei ResolutionAndRendering.txt. Alle Parameter können selbstverständlich nach belieben geändert werden.

Hinweis:
Für die Ausführung dieses Programmbeispiels muss der Treiber Ihrer Grafikkarte die OpenGL Version 3.3 unterstützen.

Visual C++ 2010: DemoWithOpenGL2010_Tut10