# Bildsynthese ## Vulkan Ray-Tracing-Pipeline *(2 Fragen)* ### Shader-Übersicht image-20220724143050721 - **Ray Generation Shader** - erstellt Strahlen und sendet sie durch `traceRayEXT(...)` - nicht programmierbar - `payload` enthält Informationen des Strahls - nach abgeschlossener Strahlverfolgung wird `payload` ausgewertet - **Intersection Shader** - wird aufgerufen, wenn **Schnittpunkt Stahl mit Bounding-Box/Dreiecksnetz** erkannt wird. - kann Daten in `payload` schreiben - für Dreiecksnetz bereits vorimplementiert - liefert **baryzentrische Koordinaten** (genaue Koordinaten innerhalb eines Dreiecks) - **Any-Hit Shader** - **optional, *wenn implementiert:*** aufgerufen nach Intersection Shader - bestimmt, ob Treffer gewertet oder ignoriert *(Strahlverfolgung abgebrochen)* wird *(z.B. Blätter bei Bäumen)* - **Closest-Hit Shader** - wird beim **ersten Treffer** eines Stahls aufgerufen *(nach Intersection Shader)* - falls kein Treffer $\rightarrow$ **Miss Shader** - kann `payload` manipulieren - kann rekursiv weitere Strahlen erzeugen *(z.B.: Senden von Schatten-Strahlen)* - **Miss Shader** - wird aufgerufen, falls **kein Primitiv getroffen** wird - kann `payload` manipulieren *(z.B. Setzen der Hintergrundfarbe)* ### TLAS (top layer acceleration structure) und BLAS (bottom layer acceleration structure) image-20220724145641937 - **BLAS** sind entweder Dreiecksnetze oder Menge an **AABBs** *(axis aligned bounding boxes)* - BLAS hat `gl_InstanceID` *(gesamtes Objekt)* - `gl_PrimitiveID` *(konkretes Dreieck bzw. einzelte AABB)* - jedes **BLAS** hat **Transformation von Welt- in Objektkoordinatensystem *(bzw. umgekehrt)*** ### Reflexionen - Strahldichte an einem Punkt = Summe aus **direktem Licht der Lichtquelle** und **Strahldichte durch reflektierten Strahl** - **Reflextionsgesetz:** Einfallswinkel = Reflextionswinkel - Ray-Tracing bricht nur ab, wenn Oberfläche nicht reflexiv, daher **Wiederholungen beschränken** ### Distributed Ray-Tracing ### Anti-Aliasing - Versenden von **mehreren Strahlen pro Pixel** - gleichverteilte **Zufälligkeit der Unterposition** innerhalb des Pixels - **Halton-Sequenz:** Verhindert wiederholte Abtastung der gleichen Position - **Hammersley-Sequenz:** effizienter als Halton, wenn Abtastwert im Vorfeld bekannt - **Mittelung der Einflüsse** der einzelnen Strahlen #### Soft Shadows - Ansatz: Position der Lichtquelle wird zufällig (gleichverteilt) variiert $\rightarrow$ **Flächenlichtquelle** ## Intersection Shader *(2 Fragen)* - Schnittpunkt kann auch im **Objektkoordinatensystem** berechnet werden ***(effizienter)*** - Ansatz: Statt Objekt in Welt- wird **Strahl in Objektkoordinatensystem transformiert** - funktioniert, weil: Parameter `t` bleibt gleich bei parametrisiertem Strahl in Welt- und Objektkoordinatensystem - `t` = Länge von Ursprung des Strahls zu Ein-/Austrittsschnittpunkt mit Objekt - **Wichtig:** Bei Transformationen die **Skalierungen** enthalten, funktioniert der Ansatz nur, weil transformierter Richtungsvektor **von der Ray Tracing Pipeline nicht auf die Länge 1 normiert** wird. Daher `gl_ObjectRayDirectionEXT` nicht im Intersection Shader normieren! (Strahl = $s + t * r$) ### Schnittpunkt Strahl mit Kugel - Kugelgleichung + Strahlgleichtung: Schnittpunktermittlung mittels **pq-Formel** ### Schnittpunkt Strahl mit AABB - **Slab**-Methode: **Slab *(= Intervall in eine Raumrichtung)*** wird von zwei parallelen Ebenen begrenzt - es kann geprüft werden, ob und wenn ja, in welchem Slab ein Schnittpunkt aufgetreten ist - kein, ein oder zwei Schnittpunkte pro Intervall - Strahlgleichung: $p = s + t * r$ - mit $s$ = Strahlursprung, $t$ = Stahllänge, $r$ = Strahlrichtung ### Schnittpunkt Strahl mit Dreieck - Prüfung, ob Schnittpunkt Strahl mit Dreiecks-Ebene - Dreieck wird durch Ebenengleichung dargestellt: $x(w, u, v)=wa+ub+vc$ mit $w=(1-u-v)$ - $w, u, v$ sind **baryzentrische Koordinaten** - wenn $w, u, v > 0$: Punkt $x(w, u, v)$ liegt innerhalb des Dreiecks ### Baryzentrische Koordinaten - Punkt $x(w, u, v)$ teilt Dreieck in 3 **Unterdreiecke** - baryzentrische Koordinate: **Verhältnis** von Fläche des **gegenüberliegenden Unterdreiecks** zu **Gesamtfläche** image-20220724160455948 - werden genutzt, um Vertex-Daten zu **interpolieren** *(z.B. Farbe, Texturkoordinaten)* ### CSG (Constructive Solid Geometry) image-20220724160647184 ## Rendering Gleichung - berechnet die reflektierte Strahldichte $L_o (v)$ im Oberflächenpunkt $x$ mit Normalen $n$ in Richtung $v$ - wie strahlt das Licht an einem bestimmten Punkt in eine bestimmte Richtung zurück - $ausgehende\ Strahldichte = selbst\ emittiert + \int{BRDF,\ eingehende\ Strahldichte}$ - $L_O(v) = L_e(v) + \int_{\Omega}f_r(v,l)\ \underbrace{L_i(l)\ cos(\Theta)d\omega}_{dE(l)}$ - $L_O(v) \rightarrow$ ausgehende Strahldichte - $L_e(v) \rightarrow$ von Fläche selbst emittierte Strahldichte - $L_i(l) \rightarrow$ eingehende Strahldichte - $E(l) \rightarrow$ Bestrahlungsstärke - $f_r(v,l) \rightarrow$ BRDF - $\Omega \rightarrow$ Gesamtheit aller Winkel der Hemisphäre über der Oberfläche ### Raumwinkel - Dreidimensionales Gegenstück zum 2D-Winkel - Raumwinkel $\Omega$ einer Fläche $A$ entspricht **Quotienten** der Fläche $S$, wenn $A$ auf eine Kugel vom Radius $r$ projiziert wird - $\Omega = {S \over r^2}$ - Bei konstanter Größe nimmt der Raumwinkel einer Fläche quadratisch mit dem Abstand vom Zentrum ab - Einheit **Steradiant** (sr) ### Strahlungsfluss - Strahlungsfluss $\Phi$ = **Strahlungsenergie pro Zeit** - Summe der Photonen-Energien, die pro Zeitraum $\Delta t$ emittiert werden - Einheit: **Watt** ### Strahlstärke - Strahlstärke $I$= **Strahlungsfluss pro Raumwinkel** - Summe der Photonen-Energien die pro **Zeit und Raumwinkel** emittiert werden - Wird benötigt, wenn Lichtquelle beispielsweise nicht in alle Richtungen gleich stark abstrahlt - Einheit: **Watt pro Steradiant** ### Bestrahlungsstärke - Bestrahlungsstärke $E$ = **Strahlungsfluss pro Flächenelement** - einfallende Photonen-Energie **pro Zeit pro Flächenelement** - Strahlungsfluss kommt aus allen Richtungen der Hemisphäre über der Fläche - Einheit **Watt pro Quadratmeter** ### Strahldichte - Strahldichte $L$ = **Strahlungsfluss pro Raumwinkel und sichtbarer Fläche** - Strahlungsfluss in Richtung Auge - Entspricht beobachteter Helligkeit - Einheit: **Watt pro Steradiant pro Quadratmeter** ### BRDF (Bidirectional Reflection Distribution Function) - Beschreibt den **winkelabhängigen spektralen Reflexionsfaktor einer Oberfläche** durch das Verhältnis von **reflektierter Strahldichte $L_o$** zur **einfallenden Bestrahlungsstärke $E$** - $f_r(v,l)$ - $v \rightarrow$ ausgehende Richtung - $l \rightarrow$ eingehende Richtung - $v$ und $l$ können mit Winkeln parametrisiert werden - 4-dimensionale Funktion, welche die **Reflexionseigenschaften einer Fläche** sehr genau beschreiben - Reflexionseigenschaften sind in Materialdatenbanken (4D-Tabellen) abgelegt - Da 4D-Tabellen viel Speicher benötigen und Materialien sich nicht direkt editieren lassen $\rightarrow$ Verwendung von parametrischen BRDF-Modellen (Phong, Blinn-Phong, Cook-Torrance, etc) #### BRDF Eigenschaften - Immer positiv - **Helmholtz Reziprozität $\rightarrow$** eingehende und ausgehende Richtung können vertauscht werden - Energieerhaltung ist $\leq 1$ ## Path Tracing - Ziel: **Effizientes, optisch korrektes Approximieren der Rendering Gleichung** - Ansatz: Weiterverfolgung **nur eines zufälligen Strahls** - nicht alle Punkte gleichermaßen berechnen, sondern priorisiert die, die den größten optischen Einfluss haben $\rightarrow$ *abhängig von passender WDF* - Erste Möglichkeit: Approximation mittels Riemann-Summe - Integral wird in Summenformel umgewandelt - immernoch **ineffizient, da gleichförmige Abtastung** ### Importance Sampling - Durch **Importance Sampling Theorie** kann jedes Integral auch durch eine Summe approximiert werden - benutzt beliebige **Wahrscheinlichkeitsdichtefunktion** (WDF), welche die Bedingung $\int_a^b p(x) dx = 1$ erfüllen muss - beste WDF wäre, wenn diese der Form der Funktion folgt - $p(x)=\int_a^b{f(x)}$ - Dichte sollte höher sein, wenn Funktionswerte höher sind - **verhindert Spikes** - **Inversionsmethode** - Ziel: Möglichst gutes Ergebnis nach wenig Abtastwerten $\rightarrow$ WDF so wählen, dass sie Form der Funktion folgt - Ermöglicht die Erzeugung von **Zufallszahlen nach WDF (nicht linear) aus gleichverteilten Zufallszahlen** ### Auswerten der Rendering-Gleichung - Problem bisherigen Ansatzes - rekursive Strahlverfolgung **bei diffuser BRDF und kleiner Lichtquelle** ineffizient/qualitativ schlecht - Beitrag nur dann, wenn Strahl Lichtquelle trifft image-20220726105118028 - **Lösung**: Aufteilen der Rendering-Gleichung in **direkten und indirekten Anteil** - direkter Anteil: **direkter Beitrag der Lichtquelle** *(Überprüfung mittels Schattenstrahl)* - nicht mehr über kompletten Halbraum integrieren, sondern **nur über Raumwinkel der Lichtquelle** - indirekter Anteil: Weiterverfolgen **zufälliger Richtung im Halbraum** - Beitrag von direkter Lichtquelle hier verwerfen, um ihn nicht doppelt zu zählen ## PBR (physically-based Rendering) Materialen - Materialen werden beschrieben durch eine Kombination von **transmittivem, reflektivem und streuendem** *(scattering)* Anteil - Koponenten der **BSRF**: - BRDF Dielektrika *(R = reflection)* - BRDF Metalle - BTDF *(T = transmission)* - Emission - Klarlack (clear coat) - Glanz (sheen) - Subsurface scattering ### Micofacetten BRDF - Oberfläche wird aus Microfacetten beschrieben image-20220726112048237 - zusammengesetzt aus **diffusem** *(konsant)* - und **spekularem** Anteil - **Fresnel**-Reflexionsgrad - Verteilung der Microfacetten ***(Rauheit)*** - Geometriefaktor ***(Selbstbeschattung)*** image-20220726113706894 ### Fresnel Reflexion - reflexiver und transmittiever Anteil hängen von Einfallswinkel und Brechungsindex des Materials ab - **Refraktion:** Brechung an Oberfläche - optisch dünner $\rightarrow$ optisch dichter: Brechung zur Normalen hin - optisch dichter $\rightarrow$ optisch dünner: Brechung von Normalen weg - **Berechungsmöglichkeiten:** **Cook Torrance** oder **Schlick** *(Approximation, schneller)* #### Fresnel Reflexion: Dielektrika - winkelabhängig wird entweder reflektiert, transmittiert oder absorbiert - **reflektiver Anteil** wird an Microfacetten gestreut $\rightarrow$ **spekularer Anteil** der Reflexion - **transmittiver Anteil** wird bei opaken *(durchsichtigen)* unter der Oberfläche zufällig abgelenkt *(tlws. absorbiert)* $\rightarrow$ **diffuser Anteil** der Reflexion - mehr Licht reflektiert $\rightarrow$ weniger Licht transmittiert $\rightarrow$ geringerer diffuser Anteil - reflexiver und transmittiever Anteil hängen von Einfallswinkel und Brechungsindex des Materials ab image-20220726112952050 #### Fresnel Reflexion: Metalle - transmittiver Anteil wird absorbiert $\rightarrow$ **keine diffuse Reflexion** - **spekularer Anteil** ist **farbig**, da reflektierter Anteil abhängig von Wellenlänge image-20220726113146497 ## Bildbasierte Beleuchtung - **emmitierte Strahldichte** $L_i$ der Umgebung wird **durch sphärisches Umgebungsbild** *(Environment Map)* angegeben - Zusammenhang zwischen Textur- und Kugelkoordinaten ### Importance Sampling der Environment Map - Umbegungsbild wird in **Grauwertbild** $g(s,t)$ umgewandelt - Parametrisierung in Texturkoordinaten: $s, t \in [0,1]$ - Verteilungsfunktion kann nicht invertiert werden, da nicht nach Zufallsvariable aufgelöst werden kann, daher: - **zeilenweises** Durchlaufen, bis Zufallsvariable erreicht $\rightarrow$ Zeile, in der Abtastwert genommen wird - **spaltenweises** Durchlaufen, bis Zufallsvariable erreicht $\rightarrow$ Abtastpunkt ## Multiple Importance Sampling - **Problem:** Da **BRDF** druch **WDF** geteilt wird, entstehen extrem hohe Sample-Werte, wo **WDF** sehr gering $\rightarrow$ Noise - also wenn **BRDF** bzw. $f$ **groß** und **WDF** bzw. $p$ **klein** - grobes Prinzip: Nutzung bisherigen Durchschnitts und Erwartungswerten zur Entscheidung der Sampling-Methode - **Ziel:** Verminderung von Noise durch Kombination verschiedener Sampling-Verfahren - nur **BRDF**-Sampling: - gut auf stark reflektiven Materialien - schlecht bei matteren Materialien - nur **Light**-Sampling - gut auf matteren Materialien - schlecht auf stark reflektiven Materialien