Computergrafik
Raymarching Mit Open GL
← Signed Distance Functions | ● | Bounding Volume Hierarchy →
OpenGL passt nicht 100%ig auf Raytracing, deshalb muss man die einzelnen Schritte entsprechend abbilden.
Strahlenerzeugung
- Man zeichnet einen Quad mit den x- und y-Koordinaten $\pm 1$, ohne Transformation $\rightarrow$ bildschirmfüllend.
- Man ermittelt/übermittelt die Welt-Koordinaten des Augpunkts
- Aus (untransformierten) Vertex-Koordinaten oder Screenspace-Koordinaten (
glFragCoord
), View-Matrix und Projektionsinformationen (Fovy, Aspect Ratio) berechnet man den Augstrahl (View-Vektor)
Algorithmus
- Entweder Raycasting oder Raymarching z.B. mit Sphere Tracing.
- Raycasting: Berechnung aller Schnittpunkte mit der Geometrie, der vorderste gewinnt
- Raymarching: Berechnung aller SDFs pro Abtastpunkt, niedrigster gewinnt, negativ $\rightarrow$ Treffer
- Geometrie: Entweder explizit im Shader, oder über Texturen
Bei Treffern
- Beleuchtungsberechnung
- Ggf. abschicken von Schattenstrahlen zu den Lichtquellen
- Verfolgen eines Reflexions- oder Refraktionsstrahls;
beide zusammen sind in OpenGL nicht einfach möglich, im Shader ist keine Rekursion erlaubt
Es gibt weitere aufeinander aufbauende Beispiele auf ShaderToy.
← Signed Distance Functions | ● | Bounding Volume Hierarchy →