Zum Inhalt springen

Deferred Shading

aus Wikipedia, der freien Enzyklopädie
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 23. November 2024 um 18:10 Uhr durch imported>InternetArchiveBot (InternetArchiveBot hat 1 Archivlink(s) ergänzt und 0 Link(s) als defekt/tot markiert.) #IABot (v2.0.9.5).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Vorlage:Hinweisbaustein 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.<ref>The triangle processor and normal vector shader: a VLSI system for high performance graphics</ref> Das heute bekannte Konzept stammt von Saito und Takahashi aus dem Jahre 1990.<ref>Comprehensible Rendering of 3-D Shapes</ref>

Prinzip

Datei:Deferred Shading FBOs.jpg
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.<ref name="gpugems2"><templatestyles src="Webarchiv/styles.css" />Deferred Shading in S.T.A.L.K.E.R. (Memento vom 16. Juli 2011 im Internet Archive)</ref> 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

Wenn jede Lichtquelle mit jedem Eckpunkt abgeglichen werden muss, ergibt sich ein Aufwand von <math>f \in \mathcal{O}(m \cdot n)</math> (m sei die Anzahl der Primitive, n die Anzahl der Lichter), erfolgt die Beleuchtung aber nach der Geometrieberechnung, reduziert sich der Aufwand drastisch auf <math>f \in \mathcal{O}(m+n)</math>.<ref><templatestyles src="Webarchiv/styles.css" />Shawn Hargreaves on Deferred Shading (Memento des Vorlage:IconExternal 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)</ref> 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

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.<ref name="gpugems2"/>, StarCraft II<ref><templatestyles src="Webarchiv/styles.css" />Starcraft 2: Technology and engine dissected (Memento des Vorlage:IconExternal 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</ref> und Gears of War<ref>Unreal Developer Network</ref> verwendet.

Einzelnachweise

<references />