Shader, auch als Schattierer bezeichnet, sind Hardware- oder Softwaremodule, die bestimmte Renderingeffekte bei der 3D-Computergrafik implementieren. Aus technischer Sicht bezeichnet „Shader“ denjenigen Teil eines Renderers, der für die Ermittlung der Farbe eines Objektes zuständig ist – im Gegensatz zu dem Teil, der die Sichtbarkeit des Objektes ermittelt. Shader wurden ursprünglich für das Shading, also die Beleuchtungs-Berechnung, entwickelt, werden aber mittlerweile auch für andere Dinge verwendet.
Hardware-Shader
Hardware-Shader sind kleine Recheneinheiten in aktuellen Grafikchips (seit
DirectX-Version 9). Die beiden Einheiten heißen
Pixel- und
Vertex-Shader. Shader können zur Erzeugung von 3D-Effekten programmiert werden.
Pixel-Shader können die Bildpunkte verändern und berechnen auch die Pixelfarbe.
Vertex-Shader dienen zu geometrischen Berechnungen und dynamischen Veränderungen von Objekten. So erzeugen beide Shader kombiniert den Wassereffekt in dem
Computerspiel Far Cry. Sie können auch zur Berechnung von
Lava,
Lack, usw. eingesetzt werden.
Pixel- und Vertexshader dürfen nicht als separate Recheneinheit verstanden werden. Der Vertexshader ist lediglich eine programmierbare T&L-Einheit, der Pixelshader entstand historisch aus dem Combiner – der genaue Aufbau der Shader-Hardware ist geheim. Konformität zum DirectX-Standard wird über den Grafiktreiber hergestellt.
Die Verarbeitungskette ist – vereinfacht – wie folgt:
- Die CPU sendet Steuerbefehle und Geometrie-Daten an die Grafikkarte.
- Im Vertex-Shader wird die Geometrie transformiert, außerdem werden bestimmte Licht-Berechnungen ausgeführt.
- Die Geometrie gelangt in das Triangle Setup. Dreiecke werden in Quads zerlegt (ein Quad besteht aus 2 × 2 Pixeln.)
- Die erste Stufe des Pixel-Shaders ist der Interpolator. Hier werden bestimmte, nur pro Eckpunkt (Vertex) vorliegende Informationen über die Dreiecksfläche interpoliert.
- Im Pixelshader gibt es arithmetische Rechenwerke (Shader Units) und Textur-Einheiten (Texture Mapping Units, TMUs.)
- Nachdem die Pixelberechnung abgeschlossen ist, wird der Test auf Sichtbarkeit (Z-Test) ausgeführt. Bei Sichtbarkeit findet ein Schreibvorgang in den Framebuffer statt.
Programmierung
In
OpenGL ist seit Version 2.0 eine eigene
C-ähnliche Shader-Sprache integriert (
OpenGL Shading Language, kurz GLSL); davor war Shaderprogrammierung nur durch herstellerabhängige
Schnittstellen möglich. Durch den Einsatz von GLSL ist man nicht mehr auf die Verwendung
proprietärer Technologie sowie dem Einsatz auf der Windows-Plattform beschränkt und kann Shader nun auf unterschiedlichsten Plattformen, wie
Mac OS X oder
Linux, benutzen.
Shader gibt es in mehreren Versionen:
| Pixel-Shader
|
| Vertex-Shader
| bgcolor="#FFFFFF"
| PS-Version | DirectX-Version | | VS-Version | DirectX-Version
| bgcolor="#FFFFFF"
| 1.0, 1.1 | 8.0 | | 1.0 | 8.0
| bgcolor="#FFFFFF"
| 1.2 - 1.4 | 8.1 | | 1.1 | 8.0
| bgcolor="#FFFFFF"
| 2.0, 2.x (2_A, 2_B) | 9.0 | | 2.0, 2.x | 9.0
| bgcolor="#FFFFFF"
| 3.0 | 9.0 | | 3.0 | 9.0
| bgcolor="#FFFFFF"
|
Pixel- und Vertexshader 1.0 waren für den 3dfx Rampage vorgesehen, der jedoch nie auf den Markt kam. Pixelshader 1.2 wird von bestimmten 3D-Karten von 3DLabs genutzt, Pixelshader 1.3 von der Nvidia GeForce 4 Ti und Matrox Parhelia unterstützt.
Weblinks
3D-Computergrafik
Shader | Shader | Shader | Shader | Шейдер