OpenGL Tutorial (Version 3.3) – Deferred Lighting (Download)

In den bisherigen OpenGL-Tutorials erfolgte die Beleuchtung der 3D-Objekte immer zeitgleich mit dem Rendering (Forward Rendering). In modernen 3D-Engines jedoch werden die Beleuchtungsberechnungen zunehmend getrennt vom eigentlichen Rendering im Rahmen des Post-Processings durchgeführt (Deferred Lighting).
 



Vorteile des Deferred Lightings:

  • Der Rechenaufwand für die Beleuchtung ist unabhängig von der Komplexität der Szenen-Geometrie
  • Es lassen sich deutlich mehr Lichtquellen berücksichtigen als beim Forward Rendering
  • Die im Rahmen des Deferred Lightings benötigten Szeneninformationen lassen sich auch im Rahmen weiterer Post-Prozessing-Effekte verwenden (Bsp. Screen Space Ambient Occlusion)

Mit dem heutigen Tutorial werden wir nun ebenfalls die Beleuchtungsberechnungen im Rahmen des Post-Processings durchführen. Zuständig für die Berechnungen ist der Fragment Shader ScreenSpaceLighting.frag, welcher im Verzeichnis Bin/Shader/ zu finden ist.

Die für die Beleuchtung benötigten geometrischen Informationen müssen zuvor in die nachfolgenden Texturen gerendert werden, die allesamt an einen als G-Buffer (Geometry Buffer) bezeichneten Framebuffer gebunden sind:

  • Textur 1: Kameraraum-Positionen und Tiefenwerte der sichtbaren Szenenpixel
  • Textur 2: Kameraraum-Normalen der sichtbaren Szenenpixel
  • Textur 3: Die texturierten, jedoch nicht beleuchteten sichtbaren Szenenpixel
  • Textur 4: Reflektionsvermögen (Farbe und Intensität) der sichtbaren Szenenpixel
  • Textur 5: selbstleuchtende Szenenpixel (Bsp. mittels Light Map beleuchtet)



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

Visual C++ 2010: DemoWithOpenGL2010_Tut41