Deferred Shading

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

In der Computergrafik beschreibt Deferred Shading (engl. verzögerte oder aufgeschobene Schattierung) eine Methode, um in dreidimensionalen Szenen die Geometrieverarbeitung, also die Darstellung der physischen Form der Objekte, von der Lichtberechnung zu trennen. So sind mehrere hundert dynamische Lichter in geometrisch komplexen Szenen möglich. Die Grundidee, einen finalen Pixelfarbwert erst nach der Tiefenauflösung zu berechnen, wurde zuerst von Michael Deering et al. 1988 eingeführt.[1] Das heute bekannte Konzept stammt von Saito und Takahashi aus dem Jahre 1990.[2]

Prinzip[Bearbeiten]

Die verschiedenen Render Targets sowie Informationen zu den Lichtquellen werden zum fertigen Bild verrechnet.

In klassischen Rendermethoden wird anhand von Tiefe (depth), Ausrichtung (normals) und Farbe (albedo) eines Eckpunktes und Farbe, Intensität und Einfallswinkel einer Lichtquelle der finale Farbwert für den jeweiligen Eckpunkt ermittelt. Für jede Lichtquelle muss so jeder Eckpunkt zur Berechnung herangezogen werden.

Beim Deferred Shading werden nun Tiefenwert, Ausrichtung und Farbe eines jeden Pixels in jeweils eine Textur in Bildschirmgröße gespeichert. Dies wird durch sogenannte Multiple Render Targets ermöglicht, wobei in jedem Rendervorgang in verschiedene Framebufferobjekte (die Texturen) gleichzeitig geschrieben werden kann.[3] Statt dass nun jeder Eckpunkt mit den Lichtquellen verrechnet werden muss, muss nur noch jedes Pixel (in dem alle benötigten Werte – depth, normals und albedo – vorhanden sind) bei der Berechnung berücksichtigt werden.

Die Berechnung selbst erfolgt durch klassische Beleuchtungsmodelle, wie zum Beispiel nach Phong. Dabei kann zusätzlich noch Glanzlicht mit einbezogen werden. Technisch geschieht das im Pixel- bzw. Fragment-Shader am Ende der Grafikpipeline.

Vor- und Nachteile[Bearbeiten]

Wenn jede Lichtquelle mit jedem Eckpunkt abgeglichen werden muss, ergibt sich ein Aufwand von f \in \mathcal{O}(m \cdot n) (m sei die Anzahl der Primitive, n die Anzahl der Lichter), erfolgt die Beleuchtung aber nach der Geometrieberechnung reduziert sich der Aufwand drastisch auf f \in \mathcal{O}(m+n).[4] Dadurch sind viele hundert Lichter in komplexen Szenen mit moderaten Hardwareanforderung möglich.

Aufgrund der Verwendung der Multiple Render Targets beschränkt man sich jedoch auf Grafikhardware, die mindestens das Shader Model 3.0 (OpenGL ab Version 2, DirectX ab Version 9) unterstützt. Außerdem gestaltet sich der Einsatz von Transparenz in der Szene schwierig, da ein durchsichtiges Material sowohl die eigenen Informationen, als auch die Informationen dahinter liegender Objekte enthält und so das Beleuchtungsmodell täuscht. Dies muss bei der Programmierung bedacht und umgangen werden.

Anwendung[Bearbeiten]

Erste auf Grafikhardware implementierte Anwendung erfuhr Deferred Shading um 2004. Heutzutage (2011) ist es Standard in den meisten kommerziellen Echtzeitgrafikanwendungen und besonders aus Spielen wie S.T.A.L.K.E.R.[3], StarCraft II[5] und Gears of War[6] bekannt.

Einzelnachweise[Bearbeiten]

  1. The triangle processor and normal vector shader: a VLSI system for high performance graphics
  2. Comprehensible Rendering of 3-D Shapes
  3. a b Deferred Shading in S.T.A.L.K.E.R.
  4. Shawn Hargreaves on Deferred Shading (PDF; 449 kB)
  5. Starcraft 2: Technology and engine dissected
  6. Unreal Developer Network