computer graphics: shader computer graphics shader
Post on 05-Apr-2015
356 Views
Preview:
TRANSCRIPT
Computer Graphics: Shader
Computer GraphicsShader
2
Computer Graphics: Shader
Inhalt
• Pipeline– Memory Resources– Input-Assembler– Vertex-Shader– Geometry-Shader & Stream-Output– Rasterizer– Pixel-Shader– Output-Merger
• Texturen– Mipmaps– Koordinaten– Filtering
• 3D Räume– Object Space– World Space– View Space– Projection Space– Screen Space
• Shader– Beispiel
3
Computer Graphics: Shader
Pipeline
• Drei programmierbare Stufen– Vertex-Shader– Geometry-Shader– Pixel-Shader
• Alle anderen Stufen sind nur über Zustände einstellbar
Quelle: [DX07]
4
Computer Graphics: Shader
Memory Resources
• Symbolisiert den Arbeitsspeicher der Grafikkarte
• Ressourcen:– Vertex Buffer– Index Buffer– Texturen– Shaderkonstanten– Stateblocks– ...
• Stateblocks werden unterteilt in:– Rasterizer States– Depth-Stencil States– Sampler States– Blend States
Quelle: [DX07]
5
Computer Graphics: Shader
Input-Assembler
• Liest Daten aus einem Index Buffer und ein oder mehreren Vertex Buffern
• Setzt die gelesenen Daten zu Primitiven zusammen (assemble):
– Linien– Dreiecken– ...
• Fügt systemgenerierte Daten hinzu, z.B. Vertex ID
• Gibt die Daten an die Pipeline weiter
Quelle: [DX07]
6
Computer Graphics: Shader
Vertex-Shader
• Bearbeitet die vom Input Assembler übergebenen Vertices
• Daraus folgt, dass der Vertex-Shader für jeden Vertex einmal ausgeführt wird
• Zu den Aufgaben gehören:– Transformation der Position– Bearbeitung der Texturkoordinaten– Per Vertex Lichtberechnungen– Displacement Mapping– ...
Quelle: [DX07]
7
Computer Graphics: Shader
Geometry-Shader & Stream-Output
• Bearbeitet die vom Vertex-Shader ausgegebenen Vertices, die zu Primitiven zusammengesetzt werden
• Der Geometry-Shader wird für jedes Primitiv (Linie, Dreieck, ...) einmal ausgeführt
• Der Geometry-Shader kann Geometrie hinzufügen bzw. aus der Pipeline entfernen (limited geometry amplification und de-amplification)
• Über den Stream-Output können Geometrie Daten in die Memory Resources geschrieben werden
– Diese Vorgang unterbricht nicht die Pipeline, sondern findet parallel dazu statt
Quelle: [DX07]
8
Computer Graphics: Shader
Rasterizer
• Zuständig für „Clipping“• Abbilden auf den Viewport• Rasterung in Pixel• Interpolation der Vertex Daten• Reicht die interpolierten Daten an
den Pixel-Shader weiter
Quelle: [DX07]
9
Computer Graphics: Shader
Pixel-Shader
• Bearbeitet die vom Rasterizer übergebenen Pixel
• Der Pixel-Shader wird für jeden Pixel einmal ausgeführt
• Zu den Aufgaben gehören:– Color Transformationen– Per Pixel Lichtberechnungen– Texturen samplen– Bump Mapping– Evtl. Tiefenwert bearbeiten– ...
Quelle: [DX07]
10
Computer Graphics: Shader
Output-Merger
• Kombiniert die vom Pixel-Shader ausgegebenen Farben mit den bereits vorhanden Farben des Buffers (Blending)
• Schreibt den neuen Wert auf den Buffer
Quelle: [DX07]
11
Computer Graphics: Shader
Texturen
• Ansammlung von “Texel“• Ein Texel bildet die kleinste Einheit einer Textur
– Besteht aus 1 bis 4 Komponenten (je nach Format: RGBA, R, GR, ...)
• Texturen können im Shader „beliebig“ oft gelesen (fetch oder sample) werden
• Es existieren vier verschiedene Textur-Typen:– 1D-Texturen– 2D-Texturen– 3D-Texturen (Volumetextures)– Cubemaps
12
Computer Graphics: Shader
Mipmaps
• Stammt aus dem lateinischen „multum in parvo“, bedeutet übersetzt soviel wie „Viel in Kleinem“
• Bilden eine Anreihung von Texturen, bei der jede Folgetextur immer das gleiche Bild repräsentiert
• Mit jedem neuen Mipmap-Level wird die Auflösung der Textur halbiert• Die Grafikkarte kann feststellen welcher Mipmap-Level die nächste
Auflösung zur gewünschten Ausgabe besitzt• Verringert Aliasing und erhöht damit die Bildqualität• Erhöhter Speicherverbrauch
13
Computer Graphics: Shader
Texturkoordinaten
• Zum Adressieren einer Textur werden je nach Typ 1 bis 3 Koordinaten benötigt
• Die Koordinaten werden meistens als u, v und w bezeichnet• Linear adressiert von:
– 0 bis 1 bei 1D-Texturen– (0, 0) bis (1, 1) bei 2D-Texturen– (0, 0, 0) bis (1, 1, 1) bei 3D-Texturen
• Unterschied zwischen DX9 und DX10 in der Adressierung. Unter DX10 befindet sich der erste Texel auf der Koordinate (0, 0)
Quelle: [DX07]
Quelle: [AMD07]
14
Computer Graphics: Shader
Filtering
• In den meisten Fällen wird die Textur beim Lesen „magnified“ oder „minified“
• Magnification: Mehrere Pixel werden auf einen Texel abgebildet– Ergebnis ist grob– Lösung durch Linear- bzw. Bilinear-Filtering
• Minification: Ein einzelner Pixel wird auf mehrere Texel abgebildet– Ergebnis besitzt starkes Aliasing– Lösung durch Mipmap-Filtering
Quelle: [DX07]
15
Computer Graphics: Shader
3D Räume
• Object Space
• World Space
• View Space
• Projection Space
• Screen Space
16
Computer Graphics: Shader
Object Space & World Space
• Object Space– Oft Model Space genannt– Wird bevorzugt zur Erstellung der Objekte verwendet– Objekt wird um den Nullpunkt erstellt, dadurch können Transformationen
(z.B. Rotation) leichter ausgeführt werden
• World Space– Raum den sich alle Objekte teilen
• Modelle• Licht• Kamera• ...
17
Computer Graphics: Shader
View Space
• Auch oft Camera Space genannt• Bestimmt die äußeren Kameraeinstellungen
– Position und Ausrichtung• Die Kamera bildet den Ursprung im View Space• Die Ausrichtung der Kamera bildet die z-Achse des View Space
Quelle: [DX07]
World Space View Space
18
Computer Graphics: Shader
Projection Space & Screen Space
• Bestimmt die inneren Kameraeinstellungen– Field of View, Near Clip Plane und Far Clip Plane
• Führt eine perspektivische Transformation bzw. Projektion aus– Objekte näher an der Kamera erscheinen größer als weiter entfernte Objekte– Objekte werden anhand ihrer Entfernung zur Kamera (z-Wert im View Space)
transformiert
• View Frustum wird auf einen „Einheitswürfel“ abgebildet– In diesem besitzen alle sichtbaren Objekte:
• x- und y-Werte zwischen -1 und +1• z-Werte zwischen 0 und 1
• Screen Space– Bestimmt die Position auf dem Frame Buffer– Die linke, obere Ecke bildet den Ursprung mit der Koordinate (0, 0)– Der letzte Punkt im Raum wird durch Koordinate (w-1, h-1) definiert, wobei w die Breite
des Frame Buffers und h die Höhe des Frame Buffers (in Pixel) angibt– Positive x-Achse verläuft nach rechts– Positive y-Achse verläuft nach unten
19
Computer Graphics: Shader
Shader
• Eingabedaten werden in zwei Kategorien unterteilt:– Varying Inputs:
• Variieren für jeden Vertex bzw. Pixel• Per Vertex Daten: Position, Normale, Texturkoordinaten, ...• Per Pixel Daten: Texturkoordinaten, Normale, ...• Werden über spezielle Eingaberegister an den Shader übergeben
– Uniform Inputs: • Sind für alle Vektoren, Pixel und Primitive gleich und variieren beim Durchlaufen
der Pipeline nicht• Shaderkonstanten
– Lichtposition– Kameraposition– Transformationsmatrizen– ...
• Texturen
• Ausgabedaten werden über spezielle Ausgaberegister an die Pipeline weitergegeben
20
Computer Graphics: Shader
Beispiel
21
Computer Graphics: Shader
Quellen
[DX07] Direct X Documentation 2007
[AMD07] Harnessing the Power of DirectX 10
top related