Simulation of Light Refraction on modern Graphics Hardware

  • Slides: 48
Download presentation
Simulation of Light Refraction on modern Graphics Hardware (or: Rendering really pretty pools) Florian

Simulation of Light Refraction on modern Graphics Hardware (or: Rendering really pretty pools) Florian Hänel

Übliche Verfahren • Mehrere Renderbuffer • Originalszene rendern • Tiefe des Wassers rendern

Übliche Verfahren • Mehrere Renderbuffer • Originalszene rendern • Tiefe des Wassers rendern

Übliche Verfahren II • Für Spiegelung – Szene an Wasseroberfläche spiegeln • Blickstrahl an

Übliche Verfahren II • Für Spiegelung – Szene an Wasseroberfläche spiegeln • Blickstrahl an der Wasseroberfläche brechen • Normale aus Wasseroberfläche für Wellen • „gebrochener“ Sehstrahl zum auslesen aus Textur

Übliche Verfahren III • Pro: – Effizient – Geringe Hardwareanforderungen – Implementierung einfach •

Übliche Verfahren III • Pro: – Effizient – Geringe Hardwareanforderungen – Implementierung einfach • Aber: – Nicht physikalisch korrekt – Keine Wellen – kein Wasser?

Zum Vergleich

Zum Vergleich

Brechungseindruck • Je flacher man auf die Oberfläche blickt, desto seichter wirkt das Wasser

Brechungseindruck • Je flacher man auf die Oberfläche blickt, desto seichter wirkt das Wasser • Teile Unterwasser Sichtbar, die ohne Brechung nicht sichtbar sind

Brechungsgesetz • Begründet im Brechungsgesetz • Snell’s Law (rechts) • Nicht linear

Brechungsgesetz • Begründet im Brechungsgesetz • Snell’s Law (rechts) • Nicht linear

Umkehrung möglich. . ? • Einfache Formel • Idee: Umkehrung auf Vertices in Vertex

Umkehrung möglich. . ? • Einfache Formel • Idee: Umkehrung auf Vertices in Vertex Shader anwenden • „Gegeben die Wasseroberfläche und Punkte Unterwasser, berechne Eintrittspunkt des Sichtstrahls in die Wasseroberfläche“

…nicht trivial • Verschiedene Ansätze – z. B. Pfadminimierung (Fermat) • Mathematica: 5 Seiten

…nicht trivial • Verschiedene Ansätze – z. B. Pfadminimierung (Fermat) • Mathematica: 5 Seiten • Physiker: ohne Erfolg

nicht sinnvoll • Brechung ist nicht linear • Linien werden je nach Blickwinkel gekrümmt

nicht sinnvoll • Brechung ist nicht linear • Linien werden je nach Blickwinkel gekrümmt • Resultat – keine Dreiecke – Konkav

Wellen • beeinflussen die Blickstrahlen • Visuelle Fragmentierung • Reine Projektion also ohnehin unzureichend

Wellen • beeinflussen die Blickstrahlen • Visuelle Fragmentierung • Reine Projektion also ohnehin unzureichend

Lösung: „Brute Force“ • Raycasting im Fragment Shader • Zum Beispiel in eine Heightmap:

Lösung: „Brute Force“ • Raycasting im Fragment Shader • Zum Beispiel in eine Heightmap: – Baboud, Lionel and D'ecoret, Xavier: Realistic Water Volumes in Real-Time

Geometrie erwünscht • Einsatzgebiet von Heightmaps begrenzt – Auflösung? – Interaktivität? – Animation? –

Geometrie erwünscht • Einsatzgebiet von Heightmaps begrenzt – Auflösung? – Interaktivität? – Animation? – Tiefe? • Idee: Hybrides Verfahren – Raycasting + Geometrie

Ansatz: Sichtstrahlen Quantisieren • Quantisierung: Unterteilung der Blickrichtungen in Quanten • Für jeden Richtungsabschnitt

Ansatz: Sichtstrahlen Quantisieren • Quantisierung: Unterteilung der Blickrichtungen in Quanten • Für jeden Richtungsabschnitt Geometrie erzeugen • Geometry Shader

Richtungsbereich • • Durch Brechungsindex bestimmt Anschaulich: „Snell‘s Window“ Schränkt zu quantisierenden Bereich ein

Richtungsbereich • • Durch Brechungsindex bestimmt Anschaulich: „Snell‘s Window“ Schränkt zu quantisierenden Bereich ein Spielraum für Wellen beachten

Analyse • Effektiv: visueller Eindruck überzeugt • Effizient? – Erzeugte Geometrie überlappt stark –

Analyse • Effektiv: visueller Eindruck überzeugt • Effizient? – Erzeugte Geometrie überlappt stark – Viel Overdraw mit teurem Fragment Shader – Für jedes Dreieck n-Durchgänge

Ansatz: Single-Pass • • Ein Dreieck pro Unterwasserdreieck Sichtbarkeit des gebr. Dreiecks abdecken Je

Ansatz: Single-Pass • • Ein Dreieck pro Unterwasserdreieck Sichtbarkeit des gebr. Dreiecks abdecken Je tiefer unter Wasser desto größer „Inkreis-Expansion“

„Inkreis Expansion“ • Verschiebung aus Richtung des Mittelpunkts des Inkreises des Dreiecks verschoben

„Inkreis Expansion“ • Verschiebung aus Richtung des Mittelpunkts des Inkreises des Dreiecks verschoben

Inkreis-Expansion II • Vertikale Dreiecke erzeugen degenerierte Dreiecke • Projektion aller Punkte auf eine

Inkreis-Expansion II • Vertikale Dreiecke erzeugen degenerierte Dreiecke • Projektion aller Punkte auf eine Linie

Quads statt Dreiecke • Statt eines Dreiecks ein Quad pro Dreieck Unterwasser • Geringerer

Quads statt Dreiecke • Statt eines Dreiecks ein Quad pro Dreieck Unterwasser • Geringerer Overdraw

Abschätzung der Sichtbarkeit • Licht nimmt den schnellsten Weg (Fermat‘s Principle) • Es gibt

Abschätzung der Sichtbarkeit • Licht nimmt den schnellsten Weg (Fermat‘s Principle) • Es gibt einfache Oberund Untergrenzen

Abschätzung der Sichtbarkeit II • Keine Brechung – Licht nimmt direkten Weg • Sehr

Abschätzung der Sichtbarkeit II • Keine Brechung – Licht nimmt direkten Weg • Sehr dichtes Medium – Licht nimmt kürzesten Weg zur Oberfläche • Wasser dazwischen • 3 Eckpunkte • 6 Vergleichspunkte

Abschätzung der Sichtbarkeit III • bessere Abschätzung in Screenspace

Abschätzung der Sichtbarkeit III • bessere Abschätzung in Screenspace

Probleme • Screenspace + Geometry Shader – Kein Hardware Clipping – Eigener Clipping Algorithmus

Probleme • Screenspace + Geometry Shader – Kein Hardware Clipping – Eigener Clipping Algorithmus • Depth-buffer – Erzeugte Geometrie liegt in Wasseroberfläche – Z-Wert muss in Fragment Shader geschrieben werden – Was ist der richtige Z-Wert nach Brechung?

Depth-Buffer: Probleme • Original Z-Wert des ungebrochenen Dreiecks? • Kann zu Unstimmigkeiten führen

Depth-Buffer: Probleme • Original Z-Wert des ungebrochenen Dreiecks? • Kann zu Unstimmigkeiten führen

Ergebnis sa_final. avi

Ergebnis sa_final. avi

Ergebnis

Ergebnis

Erweiterung auf Kaustiken (nicht Teil der Studienarbeit)

Erweiterung auf Kaustiken (nicht Teil der Studienarbeit)

Licht, bitte! • Bisher noch etwas steril • Kaustiken können den visuellen Eindruck verbessern

Licht, bitte! • Bisher noch etwas steril • Kaustiken können den visuellen Eindruck verbessern

Kaustik – erster Versuch • Neuer Kaustik-Pass aus Licht-Perspektive • Statt in den Frontbuffer,

Kaustik – erster Versuch • Neuer Kaustik-Pass aus Licht-Perspektive • Statt in den Frontbuffer, in einen Renderbuffer • Statt Farbwert, Weltkoordinate • Entspricht „Auftreffpunkt eines Photons“ • =>„Photon-Map“

Kaustik – erster Versuch • Weiterer Pass und weiterer Renderbuffer • Aus Kamerasicht •

Kaustik – erster Versuch • Weiterer Pass und weiterer Renderbuffer • Aus Kamerasicht • Darin die Weltkoordinaten als Punktmenge splatten • Man erhält die Kaustik ohne Brechung =>“Kaustik-Map“

Kaustik – erster Versuch • Frontbuffer-Pass: – Position auf original-Dreieck Projizieren – Man erhält

Kaustik – erster Versuch • Frontbuffer-Pass: – Position auf original-Dreieck Projizieren – Man erhält Bildschirmkoordinate ohne Brechung – Darüber in Kaustik-Map zugreifen und Kaustik auslesen

 • Ergebnisse vielversprechend • Videos – refractrioncaustic. avi – refractioncaustic_filtered_specular. avi

• Ergebnisse vielversprechend • Videos – refractrioncaustic. avi – refractioncaustic_filtered_specular. avi

Kaustik – erster Versuch • Probleme: Alle die das Ursprüngliche Verfahren lösen wollte, insbesondere:

Kaustik – erster Versuch • Probleme: Alle die das Ursprüngliche Verfahren lösen wollte, insbesondere:

Kaustik - zweiter Versuch • Statt Weltkkordinaten im ersten Pass, Texturkoordinaten • Erfordert Geometrie

Kaustik - zweiter Versuch • Statt Weltkkordinaten im ersten Pass, Texturkoordinaten • Erfordert Geometrie die eindeutig auf eine Lightmap „abgerollt“ ist (UV-mapping) • Splatten der Photonen in eine Lightmap • Beim Frontbuffer-Pass Zugriff darin über Texturkoordinaten

Kaustik – zweiter Versuch • Es klappt… fast – Bisher unerklärliche Verschiebung – Strange.

Kaustik – zweiter Versuch • Es klappt… fast – Bisher unerklärliche Verschiebung – Strange. avi • Offene Fragen: – Objektgröße beim Splatten in die Lightmap berücksichtigen – Kleine Objekte können unverhältnismäßig große Lightmap besitzen

Vielen Dank für Ihre Aufmerksamkeit

Vielen Dank für Ihre Aufmerksamkeit