Vertex- und Pixel-Shader
-
Materialien in Maya und Cinema 4D
-
diffuse Farbe
-
Glanzfarbe
-
Form des Glanzlichts
-
Farbsteuerung über Texturen
-
Bump
-
Alpha
-
Echtzeit-Renderpipeline
-
klassisch: konfigurierbare Pipeline
-
Transformation, Beleuchtung, Projektion
-
Clipping
-
perpektivische Division
-
Triangle Setup, Rasterung
-
Texturierung
-
Tiefentest, Alpha
-
aktuell: [teilweise] programmierbare Pipeline
-
Vertex-Shader
-
Clipping
-
perpektivische Division
-
Triangle Setup, Rasterung
-
Pixel-Shader
-
Tiefentest, Alpha
-
Vertex-Shader
-
Einsatz
-
Verformung
-
Verzerrung von Textur-Koordinaten
-
großflächige Farbänderung (nichts für Glanzlichter)
-
Vorberechnungen für Pixel-Shader (Besser nicht pro Pixel rechnen,
was man schon pro Vertex rechnen kann!)
-
mehrere entsprechende Recheneinheiten arbeiten völlig parallel, deshalb:
-
bearbeitet genau einen Vertex, kann den nicht vernichten und keinen weiteren
Vertex erzeugen
-
kein Zugriff auf andere Vertizes
-
erst mit nächster Grafikkarten-Generation Zugriff auf Texturen im
Vertex-Shader
-
Pixel-Shader
-
Einsatz
-
Belechtungsberechnung
-
Farbberechnung
-
Texturabfrage
-
mehrere entsprechende Recheneinheiten arbeiten völlig parallel, deshalb:
-
bearbeitet genau ein Pixel, kann kein weiteres Pixel erzeugen, das eine
aber vernichten (=vergessen)
-
kein Zugriff auf andere Pixel (aber Ableitungen)
-
Position des Pixels auf Bildschirm unveränderlich
-
Beispiele für Einsatz
-
Nvidia Cg Browser
-
Vertex Noise
-
Procedural Terrain
-
Matrix Palette Skinning
-
Fresnel Demo
-
Detail Normal Maps
-
Bump Reflection Mapping
-
Refractive Dispersion
-
Skizzen-Umrisse und Halos
-
Programmierung
-
Hochsprache (HLSL, Cg) in Nvidia FX Composer
-
alternative Hochsprache neuerdings: OpenGL SLang
-
siehe auch Microsoft EffectEdit (Teil des DirectX-SDK) und ATI RenderMonkey
-
Assembler in Nvidia FX Composer
-
Typische Datenstruktur: float4 = ein Vektor aus vier 32-Bit-Gleitkommazahlen;
Grafikkarte verarbeitet solche Vektoren auf einen Schlag
-
Write Mask: a.xz = ... // schreibe nur die x- und z-Komponenten;
statt xyzw auch rgba
-
Swizzle: ... = ... a.wxzw ... // vertausche/verdopple die
Komponenten; statt xyzw auch rgba
-
+ - * / werden komponentenweise gerechnet
-
Geometrie: dot, reflect, length, normalize, ...
-
int und bool gibt es derzeit in der Hardware nicht wirklich
-
Zahl der Register und Zahl der Befehle deutlich beschränkt (je nach
Version verschieden)
-
Schleifen, Sprünge, Unterprogramme mit Einschränkungen (je nach
Version verschieden)
-
Erste Schritte in der Shader-Programmierung
-
Verzerrung der Vertexkoordinaten
-
Einfärbung mit Normalenvektor
-
Verformen der Texturkoordinaten