Deferred Shading

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

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. im Jahr 1988 eingeführt.[1] Das heute bekannte Konzept stammt von Saito und Takahashi aus dem Jahre 1990.[2]

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, Intensität und Einfallswinkel einer Lichtquelle der finale Farbwert für den jeweiligen Eckpunkt ermittelt. Für jeden Eckpunkt muss so jede Lichtquelle 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 | Quelltext bearbeiten]

Wenn jede Lichtquelle mit jedem Eckpunkt abgeglichen werden muss, ergibt sich ein Aufwand von (m sei die Anzahl der Primitive, n die Anzahl der Lichter), erfolgt die Beleuchtung aber nach der Geometrieberechnung, reduziert sich der Aufwand drastisch auf .[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.

Erste auf Grafikhardware implementierte Anwendung erfuhr Deferred Shading um 2004. Heutzutage wird das Deferred Shading in den meisten kommerziellen Echtzeitgrafikanwendungen und Computerspielen wie zum Beispiel in S.T.A.L.K.E.R.[3], StarCraft II[5] und Gears of War[6] verwendet.

Einzelnachweise

[Bearbeiten | Quelltext 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. (Memento vom 16. Juli 2011 im Internet Archive)
  4. Shawn Hargreaves on Deferred Shading (Memento des Originals vom 19. September 2011 im Internet Archive)  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/www.talula.demon.co.uk (PDF; 449 kB)
  5. Starcraft 2: Technology and engine dissected (Memento des Originals vom 3. November 2011 im Internet Archive)  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/www.pcgameshardware.com
  6. Unreal Developer Network