Thomas Jung t.jung@htw-berlin.de Beleuchtung Schattierung Rasterung 1
Beleuchtung, Schattierung und Rasterung in allen Echtzeit-3D-Umgebungen gleich OpenGL Direct3D 3dsmax,... Letzter Bestandteil der Grafikpipeline Geometrische Transformationen (. VL) Verdeckungsbehandlung (letzte VL) Später: Integration von Texturierung Oberflächen Ambiente Reflexion Diffuse Reflexion Spiegelnde Reflexion Lichtquellen Gerichtetes Licht Punktlichtquellen Spots/Lichtkegel
Globales Beleuchtungsmodell für Fotorealistische Darstellungen Emission und Reflexion von Licht in Szenen Raytracing: Spiegelnde Inter-Objekt-Reflexion Radiosity: Diffuse Inter-Objekt-Reflexionen Lokales Beleuchtungsmodell.. für Realzeitanforderungen Verwendung in OpenGL, VRML,... Vernachlässigung von Inter-Objekt-Reflexionen Normale N Augvektor. A Halbvektor H Reflektanzvektor R Lichtvektor L Normale liegt in der Mitte zwischen Licht- und Reflektanzvektor Halbvektor liegt in der Mitte zwischen Licht- und Augvektor (Bildquelle: Al. Watt, M. Watt: Advanced Animation and Rendering Techniques, Addison Wesley 199) 3
Ambiente Reflexion Sorgt für generelle Szenenaufhellung Diffuse Reflexion Hebt Profil eines Objektes hervor Spiegelnde Reflexion Sorgt für Glanzlichter Abhängig vom Winkel zwischen Lichtvektor und Oberflächennormale Johann Heinrich Lambert Unabhängig vom Betrachterstandpunkt (Bildquelle: Wikipedia) Gemäß Lambertschem Gesetz Je spitzer der Winkel der Fläche zur Lichtquelle desto weniger Lichtenergie gelangt auf die Oberfläche kd = 0.4 0.55 0.7 0.85 1.0 4
Konstant pro Oberfläche Um zu garantieren, daß Objekt sichtbar ist Repräsentiert diffuse Inter-Objekt-Reflexion Genauere Betrachtung im Radiosity-Verfahren ka = 0.0 0.15 0.3 0.45 0.6 (Diffuse Reflexion kd = 0.4) Abhängig vom Betrachterstandpunkt Sorgt nur für Glanzlicht ks bestimmt Intensität (Helligkeit) Shininess kn bestimmt Fokussierung (Größe) (Ambiente Reflexion ka=0.1 Diffuse Reflexion kd=0.45) k s 0.1 0.5 0.5 k n 3 5 10 7 18 5
Diffuse Reflexion Zwischen Lichtvektor und Oberflächennormale Spiegelnde Reflexion Zwischen Augvektor und Reflektanzvektor bzw. Halbvektor und Oberflächennormale A cos B A* B len( A)* len( B) cos 1 ( 0 x) cos 4 ( x) cos( x) cos ( x) 90 I k k *( L* N) k ( H * N) a d s k n Tuong-Phong, Bui (194-1975) (Quelle http://thepcpioneers.com) arccos( R* A) *arccos( N * H) I, k a, k d und k s sind Intensitäten Augvektor. A Normale N Halbvektor H Bei farbiger Reflexion Intensitäten für R, G und B Reflektanzvektor R Lichtvektor L (Bildquelle: Al. Watt, M. Watt: Advanced Animation and Rendering Techniques, Addison Wesley 199) 6
Lichtenergie von Punktlichtquellen nimmt ab mit dem Quadrat der Entfernung (dl) Lineare Abschwächung erzielt akzeptable Bildqualität f att 1 min, 1 c1 cdl c3d L c 1 c c 3 001 dl = 1.0 1.375 1.75.15.5 Depth Cueing modelliert atmosphärische Effekte, Nebel lineare Abschwächung von Frontplane zu Backplane ¼ ¼ ½ 010 7
c ecm acm * acs n 1 srm att * spot *( a * a ( N VP )* d * d f ( N h ) * s * s ) i0 i i cm cli pli cm cli i i cm cli N = Normale, V = Beleuchteter Punkt 1, N VPpli 0 fi 0, sonst T VPpli V (0 0 0), Perspektive hi T VPpli (0 0 1), Parallelprojektion 1, Punktlicht atti k0i k1 i VPpli ki VPpli 1.0, Richtungslicht srli ( PpliV sdli ), crli 180.0, PpliV sdli cos( crli ) spoti 0.0, crli 180.0, PpliV sdli cos( crli ) 1.0, crli 180.0 AB AB, normiert A Länge von A a = ambient, d = diffus s = spiegelnd, e = emmisiv c = Farbe, p = Position, d = Richtung m = Material, s = Szene, li = Licht s d = Spotrichtung, s r = Spotexponent (0..18), c r = Spotwinkel (0..90, 180) k 0 = Konstante -, k 1 = Lineare - und k = quadr. Abschwächung Nierenstein unter dem Rasterelektronenmikroskop (Quelle :Wikipedia) Oberfläche wird durch viele kleine Facetten (Spiegel) approximiert F D* G s ( N * A)( N * L) Fresnel-Gleichung: Reflektionsverhältnis 1 ( g c) c( g c) 1 F * g c 1 ( ) c g c ( ) 1 c L * H g n c 1 n Brechungsverhältnis Beckmannsche Microfacettenverteilung 1 [(tan ) / m ] D e 4 4m cos arccos( N * H ) m Rauhheit Geometrische Abschattung der Microfacetten G min1, ( N * H )( N * A), A* H ( N * H )( N * L) A* H (Bildquelle: Al. Watt, M. Watt: Advanced Animation and Rendering Techniques, Addison Wesley 199) 8
Steiler Einfallswinkel Flacher Einfallswinkel Phong Torrance und Sparrow (Bildquelle: Al. Watt, M. Watt: Advanced Animation and Rendering Techniques, Addison Wesley 199) Fixed-Function-Pipeline (bis OpenGL) bot einfach zu benutzende Befehle glmaterial, gllight, etc. war beschränkt auf Gouraud-Shading unterstützte viele moderne Shading-Effekte nicht Ist weiterhin über Compability-Extension verfügbar! Programmierbare Pipeline (ab OpenGL) Erlaubt nahezu beliebige Shading-Effekte inclusive Phong- Shading Bietet aber kein dediziertes API mehr Achtung: OpenGL1-Befehle dann also nicht mehr nutzbar! 9
Lokale Beleuchtungsmodelle ohne Inter-Objekt- Reflexion Materialien und Lichtquellen Ambiente, Diffuse und Spiegelnde Reflexion Abschwächung mit der Entfernung Physikalisch-basierte Beleuchtung Anwendung (CPU) (Quelle: https://www.opengl.org/wiki/file:renderingpipeline.png ) 10
Aufteilung der Polygone in Dreiecke Dreiecke sind garantiert konvex und planar Nach der Projektion Aufteilung der Dreiecke in obere und untere Hälfte Setup Bestimmung der Steigungen und Ableitungen für Parameterinterpolationen Rasterung mit Hilfe von Doppelschleife Rasterisierung erfolgt zeilenweise Veränderungen des Startpixels (dl) und des Endpixels (dr) pro Scanline bestimmen Hier dl = -1, dr = 0.48 xstart = xende = x1 dl = (xl x1) / (yende ystart) dr = (xr x1) / (yende ystart) für y von ystart bis yende für x = xstart bis xende generierepixel(x,y) xstart = xstart + dl xende = xende + dr x y yende ystart x1 11
Ausschnitt Klipping an Rechteck: Scissoring Maskieren nach Muster: Stenciling Z-Speicher für korrekte Sichtbarkeit Einfärbung Schattierung Texturierung Transparenz Blending zur Berücksichtigung von Transparenz Logische Verknüpfung mit Pixel im Bildspeicher Konstante Schattierung (CPU) Beleuchtung anhand der Flächennormalen Alle Pixel erhalten diesen Farbwert Facettenstruktur wird betont Gouraud-Schattierung (Rasterer) Beleuchtung anhand der Eckpunktnormalen im Vertex Shader Farbwerte der Eckpunkte werden interpoliert Phong-Schattierung Nicht zu verwechseln mit Beleuchtungsmodell! Interpolation der Normalen (Rasterer) Beleuchtung anhand der interpolierten Normalen pro Pixel im Fragment Shader 1
Konstantschattierung anhand der Flächennormalen Gouraudschattierung: Normale pro Eckpunkt Interpolation der Eckpunktfarben Phong- Schattierung: Normale pro Pixel xstart = xende = x1 dl = (xl x1) / (yende ystart) dr = (xr x1) / (yende ystart) fl = f1 dfl = (fl fs) / (yende ystart) df = (fr fl) / (xr xl) für y von ystart bis yende f = fl für x = xstart bis xende f = f + df generierepixel(x,y,f) xstart = xstart + dl xende = xende + dr fl = fl + dfl x x1 y yende ystart 13
Konstant Gouraud Phong Glanzlichter innerhalb eines Dreiecks Korrekte Darstellung von Spots Voraussetzung für echtes Bumpmapping Spots auf Viereck Häufigere Auswertung der Beleuchtungsformel Höherer Aufwand Bumpmapping 14
Renderingpipeline beinhaltet Geometrische Transformationen, Verdeckungsbehandlung, Beleuchtung und Schattierung Beleuchtung wird durch Lichtquellen und Materialien beeinflußt: Phong-Modell Rasterung von Polygonen Pro Pixel Stenciling, Z-Speicher, Schattierung und Texturierung Konstante, Gouraud- oder Phong-Schattierung 15