4. Lichtstrahl trifft auf eine Oberfläche:
Aufspaltung in einen gebrochenen (refraction) und einen reflektierten Teil
Reflektierte Teil:
Tritt nicht in die Oberfläche ein, wird direkt zurückgeworfen => spiegelndes Licht
Gebrochene Teil:
Licht, welches in die Oberfläche eindringt und absorbiert wird => diffuses Licht.
Annahme:
Alles gebrochene Licht wird in sehr kleinem Einflussbereich absorbiert oder gestreut
Physikalisch basiertes Rendering
04
21.10.2021
5. Theorie der Mikrofacetten
mikroskopische Ebene:
Fläche bestehen aus winzig kleine perfekt reflektierende Spiegeln => Mikrofacetten
Rauheit der Oberfläche Ausrichtung der Spiegel
raue Oberflächen
=> breite Streuung der Lichtstrahlen
Glatte Oberfläche
=> Mehr Lichtstrahlen werden in die gleiche Richtung reflektiert
=> Schärfere Spiegelung
raue Oberfläche glatte Oberfläche
05
21.10.2021
6. fr 𝑝, 𝑙, 𝑣 :Anteil des Lichts, der aus Richtung l in Richtung v
an bestimmten Oberflächenpunkt reflektiert wird
Die bidirektionale Reflektanzverteilungsfunktion BRDF
l v
n
BRDF = ideal diffuse + ideal spiegelnd + unvollkommen spiegelnd
06
21.10.2021
7. Cook Torrance BRDF: Spiegelnder Teil
fcook−torrance =
𝐷𝐹𝐺
4(𝑣 ⋅ 𝑛)(𝑙 ⋅ 𝑛)
Basis: Mikrofacettentheorie
NDF D: approximiert Menge an Mikrofacetten, welche je nach Rauheit in
Richtung des Halfway-Vektors ausgerichtet sind
Fresnel Gleichung F: Beschreibt Anteil der Flächenreflektion für verschiedene
Winkel
Geomtriefunktion G: Beschreibt Selbstverschattung der Microfactetten
Verschiedene Versionen abhängig vom Ziel (Effizienz / Realismus)
07
21.10.2021
8. Normal Distribution Function (NDF): Trowbridge-Reitz GGX
NDFGGXTR(n,h,α) =
α2
𝜋( 𝑛 ⋅ ℎ 2 α2 − 1 + 1)2
h : Halfway-Vektor der
Mikrofacette
α : Maß für Rauheit der
Oberfläche
Geringe Rauheit
(glatte Oberfläche)
=> hohe Konzentration an Mikrofacetten in Richtung h ausgerichtet
Hohe Rauheit
=> Mikrofacetten zufällig ausgerichet
08
21.10.2021
9. Fresnel Gleichung F
𝐹𝑆𝑐ℎ𝑙𝑖𝑐𝑘(ℎ, 𝑣, 𝐹0) = 𝐹0 + (1-F0)(1- (h ⋅ v))5
Beschreibt den Anteil des reflektierten Lichts zum gebrochenen Licht abhängig von der
Blickrichtung zur Oberfläche
Reflektionsanteil und Energie-
erhaltung liefern Anteil
gebrochenen Lichts aus
verbleibender Energie
𝐹0 : Basisreflektivität der
Oberfläche
09
21.10.2021
10. Geometriefunktion G
GSchlickGGX(n, v, k) =
𝑛 ⋅ v
𝑛 ⋅ v 1−k + 𝑘
𝑘 =
𝛼2
2
Approximiert statistisch den relativen
Flächenanteil, deren Mikrofacetten
einander überschatten oder
Lichtstrahlen verdecken
Einbeziehung von Blick- + Lichtrichtung:
G(n, v, k) = G(n, v, k) ⋅ G(n, l, k)
10
21.10.2021
11. Testen / Ausprobieren
11
21.10.2021
Entwickeln eigener Code Fragmente mittels GLSL
Sie benötigen einen Windows 10 PC und einen Texteditor mit Zeilenanzeige oder Visual Studio
1. Bitte laden Sie die Datei PBR.zip von folgendem Link:
https://uni-koeln.sciebo.de/s/nmalRDBGL37KLPn
2. Bitte entpacken Sie die Datei PBR.zip
3. Bitte wechseln Sie in das Verzeichnis PBRWorkshop
4. Bitte starten Sie das Programm PBR.exe
13. Entwickeln mittels GLSL
11
21.10.2021
Vertex Shader , Fragment Shader
Java/C++ Syntax
Datentypen:
bool, int, float, double, …
vec2, vec3, vec4
mat2, mat3, mat4, mat2x3, mat3x4
in <varType> <varName> Hereinkommende Daten
out <varType> <varName> Zu schreibende Daten
Operatoren +,-, *, …
vec3 a = vec3(1.0, 0.0, 0.0), b = vec3(0.0, 1.0, 0.0), c;
c = a * b; ergibt c = vec3(a.x*b.x, a.y*b.y, a.z*b.z);
14. Implementierung
12
21.10.2021
Build-In Functions
float sin(float radians) // Trigonometrische Funktion(en)
vec4 cos(vec4 radians) // Kosinus komponentenweise
float pow(float x, float y) // berechnet x^y
float sqrt(float x) // Berechnet Wurzel aus x
float length(vec4 x) // Betrag eines Vektors
float dot(vec4 a, vec4 b) // Skalarprodukt aus a und b
vec4 normalize(vec4 x) // Liefert normalisierten Vektor
vec3 cross(vec3 a, vec3 b) // Kreuzprodukt a x b (nur für vec3)
mat4 inverse(mat4 a) // Inverse Matrix, ab GLSL 1.50 / GL 3.2
15. float GeometrySchlickGGX (float NdotV, float roughness)
{
float r = (roughness + 1.0);
float k = (r*r) / 8.0;
// bitte den fehlenden Code einfügen
return // bitte den fehlenden Code einfügen
}
GSchlickGGX(n, v, k) =
𝑛 ⋅ v
𝑛 ⋅ v 1−k + 𝑘
Implementierung mit GLSL
13
21.10.2021
Anleitung unter PBRWorkshopAnleitungBreakout.pdf
Datei brdf.fs, Zeile 47
Datei pbr.fs, Zeile 38
16. Testen / Ausprobieren
11
21.10.2021
Mittels Shadertoy
https://www.shadertoy.com
iPhone: App Store laden und installieren
Innerhalb der ST-App nach PBR suchen
Physically Based Shading (knarkowicz)
Im Shadertoy Menu
Umschalten zwischen Metall und Dielektrikum
Slider zum Verändern der Rauheit
Auswahl zwischen den Funktionen
Normal Distribution Funktion Dist
Fresnel Fres
Geometrie Geom
17. In Eigenregie:
VS- Projektmappe PBR.sln im Verzeichnis PBRBuild
Das Projekt 6.pbr.2.2.2_ibl_specular-textured ausprobieren
Äpfel und Kugeln durch eigene (animierte) Objekte ersetzen
Cubemap durch eigene HDR-Bilder ersetzen
Ergebnis
17
21.10.2021
18. PBR ermöglicht Steigerung des Realismus
Abstraktion: Mikrofacettenmodell
Streuung, Spiegelung
Überschattung, Verdeckung
Implementierung in Shader-Code
Verfügbar in zahlreichen Anwendungen
3D Visualisierung
Game Engines
Modellier- und Animationswerkzeuge
Fazit
21.10.2021 01
19. Matt Pharr and Greg Humphreys:
“Physically Based Rendering from Theory to Implementation“
https://www.pbrt.org/
Akenine-Möller, Tomas, Eric Haines, and Naty Hoffman:
„Real-Time Rendering“ http://realtimerendering.com/
https://learnopengl.com
https://www.shadertoy.com
SIGGRAPH & EUROGRAPHICS
Course Notes
Papers
Literatur
18
21.10.2021
Notas del editor
Die Mikrofacetten Approximation beinhaltet eine Form der Energieerhaltung:
Die Energie ausgehenden Lichts darf niemals die Energie des eingehenden Lichts übersteigen. Zu diesem Zweck wird klar zwischen diffusen und spiegelnden Licht unterschieden.
Trifft ein Lichtstrahl auf eine Oberfläche, so wird dieser in einen gebrochenen (refraction) und einen reflektierten Teil aufgespalten. Der reflektierte Teil ist das Licht, welches direkt zurückgeworfen wird, nicht in die Oberfläche eintritt und welches wir als spiegelndes Licht kennen. Der gebrochene Teil ist das verbleibende Licht, welches in die Oberfläche eindringt und absorbiert wird – bekannt als diffuses Licht.
Jedes Material besteht aus winzig kleinen Partikeln mit denen das Licht kollidiert und Energie verliert, die in Wärme umgewandelt wird. Lichtstrahlen, die wieder aus der Oberfläche auftauchen tragen zum diffusen Farbanteil der Fläche bei.
In PBR wird die vereinfachende Annahme getroffen, dass alles gebrochenes Licht in einem sehr kleinem Einflussbereich absorbiert oder gestreut wird. Dabei werden Effekte, wie das Austreten von gestreuten Licht an anderer Stelle (Subsurface Scattering) ignoriert
Alle PBR Techniken basieren auf der Theorie der Mikrofacetten.
Diese Theorie besagt, dass auf mikroskopischer Ebene jede Fläche durch winzig kleine perfekt reflektierende Spiegeln genannt Mikrofacetten besteht.
Je nach Rauheit der Oberfläche unterscheidet sich die Ausrichtung diese Spiegel:
Je rauer eine Oberfläche ist, desto chaotischer sind die Mikrofacetten auf der Oberfläche angeordnet.
Auf rauen Oberflächen steigt damit für eingehende Lichtstrahlen die Wahrschein-lichkeit der Streuung in völlig unterschiedliche Richtungen, was sich in einer breiteren Streuung der spiegelnden Reflektion auswirkt.
Im Gegensatz dazu ist auf einer glatten Oberfläche die Wahrscheinlichkeit größer, dass die Lichtstrahlen in die gleiche Richtung reflektiert werden, womit wir kleinere und schärfere Spiegelungen erhalten.