Computer Graphics Shader

Werbung
Computer Graphics: Shader
Computer Graphics
Shader
Computer Graphics: Shader
Inhalt
•
Pipeline
–
–
–
–
–
–
–
•
Shader
–
Beispiel
Texturen
–
–
–
•
Memory Resources
Input-Assembler
Vertex-Shader
Geometry-Shader & Stream-Output
Rasterizer
Pixel-Shader
Output-Merger
•
Mipmaps
Koordinaten
Filtering
3D Räume
–
–
–
–
–
Object Space
World Space
View Space
Projection Space
Screen Space
2
Computer Graphics: Shader
Pipeline
•
Drei programmierbare Stufen
–
–
–
•
Vertex-Shader
Geometry-Shader
Pixel-Shader
Alle anderen Stufen sind nur über
Zustände einstellbar
Quelle: [DX07]
3
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]
4
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]
5
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]
6
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]
7
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]
8
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]
9
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]
10
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
11
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
12
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]
13
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]
14
Computer Graphics: Shader
3D Räume
•
Object Space
•
World Space
•
View Space
•
Projection Space
•
Screen Space
15
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
...
16
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
17
Computer Graphics: Shader
Projection Space & Screen Space
•
Bestimmt die inneren Kameraeinstellungen
–
•
Führt eine perspektivische Transformation bzw. Projektion aus
–
–
•
Field of View, Near Clip Plane und Far Clip Plane
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
18
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
19
Computer Graphics: Shader
Beispiel
20
Computer Graphics: Shader
Quellen
[DX07] Direct X Documentation 2007
[AMD07] Harnessing the Power of DirectX 10
21
Herunterladen