Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Seppel Moseman Geändert vor über 9 Jahren
1
Die Welt der Shader Universität zu Köln WS 14/15 Softwaretechnologie II (Teil 1) Prof. Dr. Manfred Thaller Referent: Lukas Kley Fortgeschrittene Techniken III
2
Gliederung 1.Was ist ein Shader? 2.Verschiedene Shader 2.1 Vertex-Shader 2.2 Pixel-Shader 3. Einsatzbeispiele 3.1 Per-Pixel-Beleuchtungsmodell 3.2 Realistische Wasseroberflächen
3
1. Was ist ein Shader? ● Kleines Programm, das einmal pro Vertex oder Pixel aufgerufen wird ● Wird vom Grafikprozessor ausgeführt => sehr schnell
4
● Geschrieben in speziellen Shader- Assembler-Sprachen ● Seit DirectX 9 innnerhalb einer Effektdatei auch in gewöhnlicher C(++)- Syntax -> High Level Shader Language (HLSL)
5
● Einsatzgebiet: Aufwändige Spezialeffekte Fixe Rendering-Pipeline wird durch Shadereinsatz selbst definierbar
6
2. Verschiedene Shader 2.1 Vertex-Shader Beispiel: Glow-Effekt: “Hülle” mit Alpha-Blending in der Glühfarbe Entstehung der Hülle: Jeder Vertex wird entlang seines Normalenvektors verschoben
8
2.2 Pixel-Shader Meist kleiner als Vertex-Shader => werden öfter aufgerufen Interessant für Per-Pixel Beleuchtung (Bump- Mapping) Darstellung detaillierter Oberflächen (Wasser, Haut)
10
3. Einsatzbeispiele 3.1 Per-Pixel Beleuchtungsmodell Nachteile des Direct3D-Beleuchtungsmodells: Nur auf Vertexbasis Keine eigenen Lichtberechnungen (Normal-Mapping) Begrenzte Anzahl von Lichtquellen
11
Multi-Pass-Verfahren Anzahl an Registern bei frühen Pixel-Shader Versionen stark begrenzt => mehrere Durchgänge (Passes) nötig Ambient-Pass Pro Lichtquelle ein weiterer Pass (mit Alpha- Blending)
13
Single-Pass-Verfahren (spätere Vers.) Einschränkungen der früheren Versionen werden gelockert =>Mehrere Lichtquellen in einem Pass Seperate Pixel-Shader für 1,2,3,4 Lichtquellen Vorteil ggü. Multi-Pass: Vertex-Shader wird nur ein Mal aufgerufen
14
Normal-Mapping Normalenvektor bestimmt, wie viel Licht eine Oberfläche empfängt x-, y- und z-Komponenten eines Normalenvektors in den drei Farbkanälen der Textur kodieren: Vektor (1,0,-0,5) => Farbe (255,127,63) Transformation der Normalenvektoren in Weltkoordinaten:
16
3.2 Realistische Wasseroberflächen Wasseroberflächen reflektieren und brechen Licht Je flacher der Einfallswinkel des Lichtstrahls auf die Oberfläche, desto höher der Reflexionsanteil Ansatz: Zwei Render-Targets (Reflexion und Brechung), ein Pixel-Shader Pixel-Shader sampelt beide Render-Targets und rechnet gewichtet nach Lichtanteil zusammen Zufällige Verschiebung der Texturkoordinaten für Welleneindruck
17
Reflexion Clipping-Ebene: Clipping-Ebene an der Wasseroberfläche Vertex-Shader übergibt Entfernung jedes Vertex zur Clipping-Ebene an Pixel-Shader Wenn Wert <0: Pixel wird verworfen (s. HLSL- Funktion clip )
18
Spiegelung: Transformationsmatrix: D3DXMatrixReflect Culling-Modus umkehren: D3DCULL_CCW auf D3DCULL_CW Spiegelung der sichtbaren Objekte und Lichtquellen Alpha-Kanal des Render-Targets: Entfernung des Pixels zur Wasseroberfläche
20
Brechung Entfernung zur Clipping-Ebene >0: Verwerfen Stauchung der Szene entlang der y-Achse mit Wasseroberfläche als Zentrum Auch alle Lichtquellen stauchen Alpha-Kanal: Entfernung zur Oberfläche Trübheitseffekt mit Nebel; Nebelstärke abhängig von der Teilstrecke Wasseroberfläche-Pixel
21
Zusammenfügen der Szenen Wasseroberfläche aus zwei Dreiecken Pixel-Shader berechnet Winkel zwischen Normalenvektor und Verbindungsvektor Kamera- Pixel Sampeln der Render-Targets mit vPos. Welleneindruck durch Verschiebung der Koordinaten anhand einer Normal-Map
23
Alpha-Kanal des Pixels als Faktor für Verschiebung durch die Wellen Reflektierte und gerenderte Szene mit leicht vergrößertem FoV rendern zur Vermeidung von Fehlern am Rand Glitzern auf Wasseroberfläche durch Specular Highlighting mit hoher Glanzkraft
24
Weiterführende Infos zu Shadern im DirectX-SDK, auf msdn.microsoft.com oder in der DirectX- Dokumentation Vielen Dank für die Aufmerksamkeit!
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.