Architektur und Programmierung von Grafik- und Koprozessoren

Ähnliche Dokumente
Architektur und Programmierung von Grafik- und Koprozessoren

Architektur und Programmierung von Grafik- und Koprozessoren

Kapitel 4: Schattenberechnung

Shader. Computer Graphics: Shader

Computergrafik Universität Osnabrück, Henning Wenke,

Computer Graphics Shader

Computergrafik Universität Osnabrück, Henning Wenke,

Parallele Algorithmen in der Bildverarbeitung

Graphische Datenverarbeitung und Bildverarbeitung

Diplomarbeit. Neue Möglichkeiten durch programmierbare Shader. Unter der Leitung von: Prof. Dr.-Ing. Detlef Krömker

Beleuchtung. in Computerspielen

Probelektion zum Thema. Shadow Rendering. Shadow Maps Shadow Filtering

(7) Normal Mapping. Vorlesung Computergraphik II S. Müller. Dank an Stefan Rilling U N I V E R S I T Ä T KOBLENZ LANDAU

Christina Nell. 3D-Computergrafik

Computergrafik 1 Beleuchtung

Spiegelgasse 1 CH 4051 Basel. Vorführung der laufenden Programme im Tutorium Woche 3 (Abgabe ).

BlendaX Grundlagen der Computergrafik

Schattenwurf mit Perspective Shadow Maps

Seminar Game Development Game Computer Graphics. Einleitung

Visualisierung und Volumenrendering 2

Architektur und Programmierung von Grafik- und Koprozessoren

Grafikkarten-Architektur

Beleuchtung Schattierung Rasterung

Wiederholung. Vorlesung GPU Programmierung Thorsten Grosch

OpenGL und die Fixed-Function-Pipeline

Beleuchtungsmodelle und Shading

Grundlagen der Spieleprogrammierung

GPGPU Basiskonzepte. von Marc Kirchhoff GPGPU Basiskonzepte 1

Parallele und funktionale Prog. Wintersemester 2012/ Übung Abgabe bis , 10:00 Uhr

Graphische Datenverarbeitung Visualisierungstechniken. Prof. Dr. Elke Hergenröther

Universität Trier FB IV Mathematik PS Mathematics for 3D Game Programming & Computer Graphics - WS 07/08 Seminarleiter: Prof. Dr.

Michael Bender Martin Brill. Computergrafik. Ein anwendungsorientiertes Lehrbuch. 2., überarbeitete Auflage HANSER

Computergrafik. Michael Bender, Manfred Brill. Ein anwendungsorientiertes Lehrbuch ISBN Inhaltsverzeichnis

3D Programmierpraktikum: OpenGL Shading Language (GLSL)

RST-Labor WS06/07 GPGPU. General Purpose Computation On Graphics Processing Units. (Grafikkarten-Programmierung) Von: Marc Blunck

Vergleich von Forward und Deferred Rendering

4.7 Globale Beleuchtungsmodelle

3D Rendering mit PHP. Die neue PEAR-Klasse Image_3D bietet die Möglichkeit nur mit PHP5 3DGrafiken zu rendern

Beleuchtung. Matthias Nieuwenhuisen

Die Welt der Shader. Fortgeschrittene Techniken III

Parallele und funktionale Prog. Sommersemester Übung Abgabe bis , 10:00 Uhr

Wima-Praktikum 2: Bildsynthese-Phong

Algorithmen und Datenstrukturen 1 Kapitel 5

Ein Seminarbericht von Johann Basnakowski

MF Breadcrumbs. Sergej Schefer & Fabian Marx

Echtzeitfähige hige Verfahren in der Computergrafik. Lehrstuhl für f r Informatik Computer Grafik und Visualisierung TUM

Computergrafik 2010 Oliver Vornberger. Kapitel 18: Beleuchtung. Vorlesung vom

Übungsstunde 8 zu Computergrafik 1

Echtzeit Videoverarbeitung

4.4 Glättung von Kanten

3.5 Methode des gleitenden Horizonts

Bildbearbeitung und Texturierung

Rechnerarchitektur SS 2013

VHDL - Grundlagen des Pointrenderings

Postprocessing. Algorithmen für Computerspiele. Alexander Martin 19. Juli 2010

Geometry Shader. Ausarbeitung im Rahmen des Seminars Echtzeit Rendering" Von Sebastian Jackel Franz Peschel. Geometry Shader 1

Graphische Datenverarbeitung

Algorithmenbegriff: Berechenbarkeit. Algorithmenanalyse. (Berechnung der Komplexität)

Teil 7: Beleuchtung Beleuchtungsmodelle, Schattierungsmodelle

Übungsblatt 10: Klausurvorbereitung

GPU Programmierung 6. Juli 2004 M. Christen, T. Egartner, P. Zanoni

(10) Deferred Shading

Shader für Geometrische Grundprimitive. Beispielszene mit vielen Kegeln unterschiedlicher Größe und Farbe

Vektorgeometrie. 1. Vektoren eingeben, Norm, Skalarprodukt. 2 In einem kartesischen Koordinatensystem sind die Vektoren. , v. und. gegeben.

Computer Graphik I Generative Computergraphik Intro

CAUSTICS & GODRAYS. Jacob Skuratovski

Füllen von Primitiven

2. Algorithmen und Algorithmisierung Algorithmen und Algorithmisierung von Aufgaben

Modellierung. Oliver Hartmann

Achtung: Groß O definiert keine totale Ordnungsrelation auf der Menge aller Funktionen! Beweis: Es gibt positive Funktionen f und g so, dass

1 Transformationen. 1.1 Transformationsmatrizen. Seite 1

Computergrafik SS 2012 Probeklausur Universität Osnabrück Henning Wenke, M. Sc. Sascha Kolodzey, B. Sc., Nico Marniok, B. Sc.

Rendering: Lighting and Shading

Universität Osnabrück Fachbereich Mathematik / Informatik. 5. Vorlesung ( )

Spezialprozessoren zur Übernahme Grafik-spezifischer Aufgaben, vorrangig der Bildschirmausgabe

Volumen Visualisierung

SEP: Implementing a GPU Cloth Simulation Demo

Beleuchtung Schattierung Rasterung

Prozedurale Texturen >>Was nicht passt wird passend gemacht...<<

Voronoi-Diagramme. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK

Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8

Fakultät für Informatik

Seminar Computerspiele Räumliche Datenstrukturen. Ralf Pramberger

2.2. Schnitte von Liniensegmenten

3D Programmierpraktikum: Schattenberechnung in Echtzeit

HLSL PostProcess Shaders

Computergrafik. Ein anwendungsorientiertes Lehrbuch. Bearbeitet von Michael Bender, Manfred Brill

Problemreduktion durch Transformation am Beispiel des. Erweiterten Euklidschen Algorithmus

Farbtiefe. Gängige Farbtiefen

Analytische Geometrie II

Computergrafik 2010 Oliver Vornberger. Kapitel 18: Beleuchtung

Informatik I Komplexität von Algorithmen

Lokale Beleuchtungsmodelle

(12) Wiederholung. Vorlesung Computergrafik T. Grosch

Asymptotik und Laufzeitanalyse

Teil 8: Ray Tracing. Ray Tracing Einleitung. Beleuchtung, inkl. Schatten, Reflexionen

Grundlagen: Algorithmen und Datenstrukturen

Komplexpraktikum Graphische Datenverarbeitung im WS 04/05

Algorithmen und Datenstrukturen 2

Transkript:

Architektur und Programmierung von Grafik- und Koprozessoren Rendering Algorithmen Stefan Zellmann Lehrstuhl für Informatik, Universität zu Köln SS2018

Rasterisierung Algorithmus 1 function Rasterisierung(V,M,L,f,MV,PR,VP) for all v 1, v 2, v 3 V do Transformationen(v 1,v 2,v 3,MV,PR) Clipping(v 1,v 2,v 3,PR) T ErzeugeDreiecke(v 1,v 2,v 3 ) for all t T do Fragmente ScanKonvertierung(t,VP) for all F Fragmente do for all L j Lichtquellen do Beleuchte(F,M,L j,f) TiefenTest(F, I) AlphaBlending(F, I) end function

Rasterisierung - Vertex Phase function Rasterisierung(V,M,L,f,MV,PR,VP) for all v 1, v 2, v 3 V do Transformationen(v,MV,PR) Clipping(v,PR)... end function 1. Wende Viewing- und Perspektivische auf jedes Vertex an. 2. Clippe Vertices am Sichtbaren Frustum.

Rasterisierung - Primitive Assembly function Rasterisierung(V,M,L,f,MV,PR,VP)... T ErzeugeDreiecke(v 1,v 2,v 3 )... end function 3. Für jedes Eingabedreieck {v 1, v 2, v 3 }, erzeuge Dreiecke, die sich nach Clipping ergeben.

Rasterisierung - Fragment Phase function Rasterisierung(V,M,L,f,MV,PR,VP)... for all t T do Fragmente ScanKonvertierung(t,VP) for all f Fragmente do for all L j Lichtquellen do Beleuchte(F,M,L j,f) TiefenTest(F, I) AlphaBlending(F, I)... end function 4. Fragmente ergeben sich nach Scan Konvertierung. 5. Jedes Fragment wird beleuchtet, erst dann Tiefentest!

Rasterisierung Algorithmus 1 - Bemerkungen Manche Implementierungen führen Beleuchtungsberechnungen auf den Vertices durch und interpolieren später die resultierenden Farben. Der Algorithmus unterstützt sowohl opake als auch teiltransparente Geometrie. I. d. R. wird man den Tiefentest nur für opake, und Alpha-Blending nur für teiltransparente Fragmente ausführen. APIs (Direct3D, OpenGL, Vulkan) garantieren, dass Reihenfolge während Fragment Phase Eingabereihenfolge entspricht.

Rasterisierung Algorithmus 1 - Worst-Case Komplexität Vorabüberlegungen Aus der Primitive Assembly Phase ergeben sich durch Clipping bis zu vier Dreiecke. Die Schleife über alle Dreiecke T lässt sich also durch O (4) abschätzen. Die Anzahl an Fragmenten, die nach Scan Konvertierung eines Dreiecks entstehen, ist durch O(VP) beschränkt, wobei VP die Bildschirmauflösung bezeichnet. Wir nehmen an, dass es für die Subroutinen Transformationen und Clipping, Beleuchte, TiefenTest, AlphaBlending und ErzeugeDreiecke jeweils O(1) Algorithmen gibt. ScanKonvertierung ist durch O(VP) beschränkt.

Rasterisierung - Worst-Case Komplexität Es ergibt sich also im schlechtesten Fall für den Algorithmus Rasterisierung (1) die Komplexität: O(V ) O(4) (O(VP) O(L) + O(VP)) = O(V VP L) (20) Wir wollen im folgenden vereinfachend annehmen, dass die Anzahl Lichtquellen L konstant ist. Damit ergibt sich die Laufzeitkomplexität O(V VP). (21) Wenn wir uns mit Deferred Shading beschäftigen, werden wir wieder von variabel vielen Lichtquellen ausgehen.

Rasterisierung - Algorithmus 2 Bemerkung Unter praktischen Gesichtspunkten ist die Laufzeitkomplexität dieses Algorithmus sehr hoch. Praktische Arbeitslasten verarbeiten Millionen von Dreiecken und erzeugen Bilder mit Millionen von Pixeln. Wir wollen eine alternative Formulierung des Algorithmus Rasterisierung betrachten. Ziel: besser verstehen, welche Umstrukturierungsmaßnahmen auf GPUs vorgenommen werden, um den Durchsatz zu erhöhen.

Rasterisierung - Algorithmus 2 function Rasterisierung(V,M,L,f,MV,PR,VP) for all v V do Transformationen(v,MV,PR) Clipping(v,PR) T ErzeugeDreiecke(V) for all t T do Fragmente ScanKonvertierung(t, VP) for all F Fragmente do for all L j Lichtquellen do Beleuchte(F,M,L j,f) TiefenTest(F, I) AlphaBlending(F, I) end function

Rasterisierung - Algorithmus 2 Struktur von Algorithmus 2: function Rasterisierung(V,M,L,f,MV,PR,VP) for all v V do Vertex Phase...... Pufferung von Dreiecken for all t T do Scan Konvertierung... Pufferung aller Fragmente for all F Fragmente do Fragment Phase... end function

Rasterisierung - Algorithmus 2 Algorithmus Rasterisierung 2 hat offensichtlich die gleiche obere Laufzeitschranke wie Algorithmus 1 O(V ) O(VP) O(L). (22) Allerdings: Dreiecke und Fragmente werden gepuffert Speicherbedarf: O(V ) O(VP) (23) Bemerkung: nach der Vertex Phase müssen auch Dreiecke gepuffert werden. Asymptotisch hängt dies von V ab. Da es aber konstant mal so viele Ausgabe- wie Eingabe Vertices gibt, vernachlässigen wir dies und nehmen einfach an, dass die neuen Vertices in der Nähe der Eingabe Vertices gepuffert werden können.

Rasterisierung - Algorithmus 2 Bemerkungen Wir haben jetzt also zwei alternative Formulierungen des Rasterisierungsalgorithmus. Die zweite Formulierung hat augenscheinlich den Nachteil sehr hohen Speicherbedarfs. Den Ansatz, erst Vertices und dann Fragmente zu verarbeiten, nennt man in der Computergrafik deferred : die Verarbeitung der Fragmente wird hinausgezögert, bis (genügend) Vertices verarbeitet wurden.

Rasterisierung - PRAM Formulierung Wir betrachten im folgenden PRAM Formulierungen des Rasterisierungsalgorithmus. Wir wollen verstehen, an welchen Stellen die beiden Formulierungen Parallelismus exponieren und welche Auswirkungen das auf den Durchsatz hat.

Rasterisierung Paralleler Algorithmus 1 function Rasterisierung(V,M,L,f,MV,PR,VP) for all v 1, v 2, v 3 V do in parallel Transformationen(v 1,v 2,v 3,MV,PR) Clipping(v 1,v 2,v 3,PR) T ErzeugeDreiecke(v 1,v 2,v 3 ) for all t T do Fragmente ScanKonvertierung(t,VP) for all F Fragmente do for all L j Lichtquellen do Beleuchte(F,M,L j,f) TiefenTest(F, I) AlphaBlending(F, I) end function

Rasterisierung Paralleler Algorithmus 1 Komplexität Der Parallele Algorithmus 1 ist auf der CRCW PRAM lauffähig (synchronisierte Zugriffe für TiefenTest und AlphaBlending). Arbeitskomplexität: W (n) = O(V VP). Zeitkomplexität: S(n) = O(1) O(4) O(VP). die Zeitkomplexität beträgt O(VP).

Rasterisierung Paralleler Algorithmus 2 (1/2) function Rasterisierung(V,M,L,f,MV,PR,VP) for all v V do in parallel Transformationen(v,MV,PR) Clipping(v,PR) for all v 1, v 2, v 3 V do in parallel T ErzeugeDreiecke(v 1,v 2,v 3 ) for all t T do in parallel Fragmente ScanKonvertierung(t,VP)... end function

Rasterisierung Paralleler Algorithmus 2 (2/2) function Rasterisierung(V,M,L,f,MV,PR,VP)... for all F Fragmente do in parallel for all L j Lichtquellen do Beleuchte(F,M,L j,f) TiefenTest(F, I) AlphaBlending(F, I) end function

Rasterisierung Paralleler Algorithmus 2 Komplexität Arbeitskomplexität: W (n) = O(V VP). Zeitkomplexität: S(n) = O(1) + O(4)O(VP) + O(1) = O(VP). Die Speicherkomplexität bleibt ggü. dem seriellen Algorithmus unverändert. Wir können die einzelnen Phasen des Algorithmus separat parallelisieren.

Rasterisierung Paralleler Algorithmus 2 Bemerkungen Die Umformulierung führt asymptotisch nicht zu einer Veränderung von Zeit- und Arbeitskomplexität. Der Algorithmus teilt sich nun jedoch in mehrere parallele Arbeitsphasen auf. Durch die Operation TiefenTest ergeben sich Speicherzugriffe, die synchronisiert werden müssen ( CRCW), dies ist jedoch bei beiden Algorithmen der Fall. Es bleibt der hohe Speicherbedarf (O(V VP)), der sich mit Hilfe des PRAM Modells nicht auflösen lässt.

Rasterisierung Paralleler Algorithmus 2 Überlegungen Allgemeines GPU Modell (AGPU): Überlappe die O(V ) und O(V VP) Arbeitsphasen zeitlich. PRAM für jede Arbeitsphase. Schlange für Dreiecke und Fragmente. Time Data N Vertex Processors Triangle Queue Raster Engines Fragment Queue M Fragment Processors

Rasterisierung Paralleler Algorithmus 2 Überlegungen Mit Hilfe des AGPU Modells lässt sich das Speicherbedarfsproblem durch Pufferung abschwächen. Es ergeben sich ggf. Wartezeiten dadurch, dass entweder Vertex Prozessoren, Raster Engines oder Fragment Prozessoren keine Arbeit zu verrichten haben. Das AGPU Modell für den Parallelen Algorithmus 2 ist ein theoretisches Modell, das der Implementierung tatsächlicher GPUs sehr nahe kommt.

Deferred Shading

Deferred Shading Vorabüberlegungen Der zweite parallele Rasterisierungsalgorithmus kommt dem tatsächlich in Hardware implementierten Algorithmus auf GPUs sehr nahe. Wir gehen im folgenden davon aus, dass das Speicherbedarfsproblem durch Methoden wie Pipelining und Queueing gelöst ist. Bei unseren Überlegungen gingen wir von einer konstanten, geringen Anzahl an Lichtquellen aus. Für bestimmte 3D Beleuchtungsszenarien ist dies jedoch nicht adäquat. Wir betrachten daher im folgenden den Fall, dass wir viele Lichtquellen haben, und dass die Anzahl an Lichtquellen asymptotischen Einfluss hat.

Rasterisierung Wir betrachten wieder den Algorithmus Rasterisierung, diesmal in vereinfachter Form: function Rasterisierung(M,L,f) Fragmente VertexPhase for all F Fragmente do in parallel for all L j Lichtquellen do Beleuchte(F,M,L j,f) TiefenTest(F, I) AlphaBlending(F, I) end function Vertex Transformation und Scan Konvertierung analog zu Parallele Rasterisierung 2 - wir interessieren uns für Fragment Phase, die asymptotisch von der Anzahl Lichtquellen abhängt.

Beleuchtung von Fragmenten Problem: Beleuchtung muss für alle Fragmente durchgeführt werden, da Geometrie evtl. teiltransparent. Weitere Vereinfachung daher: nur opake Geometrie. function Rasterisierung(M,L,f) Fragmente VertexPhase for all F Fragmente do in parallel for all L j Lichtquellen do Beleuchte(F,M,L j,f) TiefenTest(F, I) end function In der Praxis: separate Render Passes für opake und für tiefensortierte, transparente Geometrie. 2. Pass: berücksichtige Tiefenpuffer aus erstem Pass.

Beleuchtung von Fragmenten Unter diesen Annahmen kann man auch die Fragment Phase deferred formulieren. function RasterisierungDeferred(M,L,f) Fragmente VertexPhase for all F Fragmente do in parallel Pixel(F ) TiefenTest(F, I) for all L j Lichtquellen do for all p Pixel do in parallel Beleuchte(p,M,L j,f) end function

Deferred Shading Komplexität Durch die Umformulierung verringert sich die Arbeitskomplexität des Algorithmus. Ursprünglich: Deferred: W (n) = O(V ) O(VP) O(L) (24) W (n) = O(V ) O(VP) + O(L) O(VP) (25) Wie auch schon bei der Umformulierung von Rasterisierung ergibt sich weiterer Speicherbedarf, nämlich dadurch, dass VP Pixel gespeichert werden müssen.

Deferred Shading Komplexität Der erhöhte Speicherbedarf wird asymptotisch ammortisiert, wenn man davon ausgeht, dass wir Deferred Shading auf Basis von Parallele Rasterisierung 2 implementieren: O(V VP) + O(VP) = O(V VP) (26)

Deferred Shading in der Praxis Wir wollen betrachten, wie man Deferred Shading in der Praxis auf GPUs implementiert. Wir gehen vom AGPU Modell von weiter oben aus. Wir nehmen weiter an, dass wir drei 2D Texturen verwalten, die die gleiche Auflösung wie das zu rendernde Bild haben: 1. Tiefentextur (DB): Tiefeninformation für jedes Pixel aus Tiefentest (i. Allg. kann man auf den Tiefenpuffer von GPUs nicht direkt zugreifen, sondern muss diesen kopieren). 2. Normalentextur (NB): Shading Normale für jedes Pixel bzgl. der Geometrie, die den Tiefentest bestanden hat. 3. Diffuse Textur (TB): Diffuse Texturinformation für jedes Pixel. 4. Materialindextextur (MB): Materialindex für jedes Pixel. Die sich ergebende Datenstruktur nennt man Geometry Buffer (g-buffer).

Deferred Shading in der Praxis g-buffer Ergebnis Crytek Sponza 3D Modell: Frank Meinl, (CC-BY 3.0), Rendering: Stefan Zellmann

Deferred Shading in der Praxis Beim Deferred Shading auf der GPU wird die Fragment Phase von weiter oben leicht angepasst. Eine Implementierung sieht strukturell etwa so aus: parallel_ for_ each ( f in fragmente ) { tiefen_test (f); gbuffer [f.x][f.y] = { f. tiefe, f. normale, f. diffus, f. material_ index }; } for_ each ( l in lichter ) { parallel_ for_ each ( p in pixel ) { beleuchte_pixel (l, p, gbuffer [p.x][p.y ]); } }

Deferred Shading in der Praxis Implementiert als Multi Render Pass Verfahren. Erster Render Pass baut g-buffer auf. parallel_ for_ each ( f in fragmente ) { tiefen_test (f); gbuffer [f.x][f.y] = { f. tiefe, f. normale, f. diffus, f. material_ index }; } Dann folgen #Lichtquellen viele Render Passes, die die Pixel (nicht mehr Fragmente!) beleuchten. parallel_ for_ each ( p in pixel ) { beleuchte_pixel (l, p, gbuffer [p.x][p.y ]); } Auf GPUs ist die Fragment Phase frei programmierbar. Die Render Passes (auch die über Pixel) erfolgen in einem Fragment Programm (werden im Vorlesungsteil zu GPU Architekturen besprochen).

Deferred Shading in der Praxis Wir wollen einschätzen, wie hoch der Speicherbedarf für den g-buffer beim Deferred Shading, etwa in MB, ist. Nehmen wir an, dass wir die g-buffer Einträge wie folgt speichern: DB NB TB MB 24-bit 2 32-bit (Polarkoordinaten) 3 32-bit (RGB) 16-bit Für eine Bildschirmauflösung von 1024 1024 Pixel ergibt sich dann etwa ein Speicherverbrauch von 25 MB.

Deferred Shading in der Praxis Überlegt man sich, dass um 2005 herum Videospeicher häufig bei etwa 100 MB bemessen war, versteht man, dass g-buffer Datenstrukturen bzgl. des Speicherbedarfs optimiert werden mussten. Dies rückt angesichts mehrerer GB Speicher heutiger GPUs in den Hintergrund. Unsere Überlegungen zum Speicherverbrauch in der Praxis über die Jahre bestätigen also, dass der zusätzliche Speicherbedarf durch eine verzögerte Beleuchtungsphase asymptotisch ammortisiert wird (O(V VP) + O(VP) = O(V VP)).

Deferred Shading in der Praxis g-buffer Latenz Problem allerdings: g-buffer liegt in GDDR3 Speicher hohe Zugriffslatenz. Großes Problem auf alten GPUs. Moderne GPUs sind darauf optimiert, während Speicherzugriffen unabhängige Berechnungen durchzuführen. Positiv beim Deferred Shading. Mehr dazu im Vorlesungsteil zu GPU Architekturen.

Deferred Shading in der Praxis Beleuchtungsphase Wenn g-buffer aufgebaut, L Passes über Pixel (Tiefentest ist also bereits entschieden, i. Allg. gilt: #Pixel << #Fragmente. Punktlichtquellen: radialer Fall-Off ( inverse square ), man kann Umkugel für Lichtquellen berechnen Passes gehen i. d. R. nicht über alle Pixel.

Deferred Shading in der Praxis Deferred Shading wurde als Erweiterung der Rasterisierungs Pipeline älterer GPUs implementiert - maßgeblich in den Software-Industriezweigen, die sich mit realistisch anmutender Echtzeitgrafik beschäftigen (Spiele). Game Engines wie Unreal oder Unity verfügen über Rendering Pfade, die auf g-buffer Algorithmen aufsetzen. Es wurden über die Jahre Erweiterungen oder alternative Verfahren entwickelt, die auf g-buffer aufsetzen, u. a. Deferred Lighting, Screen Space Ambient Occlusion, aber auch Image-Filter Verfahren, die die Tiefeninformation ausnutzen.

Deferred Shading in der Praxis Pitfalls Keine teiltransparente Geometrie (es gibt Verfahren wie etwa Depth Peeling, die verwendet werden können, üblich ist aber ein separater forward pass ohne g-buffer). Anti-aliasing nicht ganz einfach. Man kann nicht einfach supersamplen, also das Bild mit höherer Auflösung rendern und dann kleiner skalieren. Normalen aus der Normalentextur können beim Skalieren nicht einfach linear interpoliert werden. Anzahl an Materialtypen nicht variabel, g-buffer kodiert Attribute. Es ist ungünstig, dass Tiefenwerte umkopiert werden müssen, obwohl die Hardware sie bereits speichert.

Strahlverfolgung

Strahlverfolgung Ansatz basiert auf Grundprinzip, dass sich Lichtpartikel (Photonen), die von einer Lichtquelle aus emittiert werden, entlang gerader Linien durch den Raum bewegen, und dass Lichtpartikel nicht mit anderen Lichtpartikeln interagieren. Jedoch Interaktion mit massebehafteten Partikeln Streuung und Absorption. Vielmehr geht man davon aus, dass Lichtpartikel mit massebehafteten Partikeln interagieren und es zu Phänomenen wie Streuung und Absorption kommt. Es ergeben sich Pfade - i. Allg. von Interesse sind diejenigen vom Licht zum Betrachter. Häufig ist das zu aufwendig - daher paart man Strahlverfolgung oft mit lokaler Beleuchtung.

Symmetrie Aufgrund von Symmetrieeigenschaften darf man das Problem umformulieren, sodass Pfade vom Betrachter zum Licht gesucht werden (beginne Strahlverfolgung vom Betrachter aus). In der Abbildung: ein direkter Lichtpfad, und ein Pfad, der aufgrund mehrerer Licht/Oberflächeninteraktionen entsteht.

Primärsichtbarkeit Für unsere Betrachtungen wollen wir uns zuerst nur für Pfade mit Länge eins hin zu einer Oberfläche interessieren (Primärstrahlen). An den Interaktionspunkten wird lokales Beleuchtungsmodell ausgewertet. Eingabedaten genau wie bei Rasterisierung. Das optische Ergebnis sollte äquivalent zu Rasterisierung sein.

Strahlen Strahlen definiert man bzgl. Ursprung und Richtung. Den Ursprung drückt man durch eine 3D Position aus, die Richtung durch einen Einheitsvektor: R = {o, d} (27) Die Distanz, die entlang eines Strahls zurückgelegt wurde, parametrisiert man mittels eines Skalars t. Darüber lassen sich z. B. Schnittpunkte mit Geometrie entlang des Strahls berechnen. I = o + dt. (28)

Primärstrahlen Primärstrahlen generiert man so, dass ihr Ursprung beim Betrachter liegt, und dass sie die einzelnen Pixel des Rasters samplen.

Schnitttests Die Basisoperation bei der Strahlverfolgung ist es, zu testen, ob ein Strahl eine Oberfläche schneidet. Dazu setzt man die Strahlgleichung in der parametrischen Form (28) in die Oberflächengleichung ein und löst nach t auf.

Strahl/Ebenen Schnitttest Für den Schnitt zwischen Strahl und Ebene wollen wir dies kurz exemplarisch erläutern. Wir betrachten die Ebenengleichung in Parameterform (x p 0 ) n = 0, (29) p 0 wobei p 0 ein beliebiger Punkt in der Ebene und n ein normalisierter Richtungsvektor senkrecht zur Ebene (geometrische Normale) ist. Wir setzen die Strahlgleichung ein und erhalten (o + dt p 0 ) n = 0. (30)

Strahl/Ebenen Schnitttest (o + dt p 0 ) n = 0 Wir lösen nach t auf und erhalten t = (p p 0 o) n. (31) d n Ist der Nenner 0, wissen wir, dass der Strahl parallel zur Ebene verläuft. Diesen Fall behandeln wir speziell, andernfalls gibt t die Distanz zwischen Strahlursprung und Ebene an. Schnitttests mit einfachen, polynomiellen Oberflächen mit wenig Koeffizienten (z. B. Dreiecke, Quadriken etc.) führt man analog durch.