Was ist ein Shader?
Bei Shadern, auch Streamprozessoren oder CUDA Cores genannt, handelt es sich um kleine Hardware-Einheiten, die in Grafikchips verwendet werden. Ihre Aufgabe besteht darin, 3D-Modelle und Spezialeffekte zu berechnen. Da diese Prozesse äußerst komplex sind, arbeiten GPUs mit auf diesen Einsatzzweck optimierten Shadereinheiten. Die Shaderleistung einer Grafikkarte ist von der Anzahl sowie der Geschwindigkeit der Shader abhängig und wird in GFLOPS angegeben.
Inhaltsverzeichnis
Allgemeine Informationen zu Shadern
Wenn von Shadern die Rede ist, unterscheiden wir zwischen vielen Arten. Im Laufe der Jahre haben sich nämlich immer mehr Formen entwickelt, die alle ihre eigene Aufgabe übernehmen:
- Fragment-Shader, auch Pixel-Shader genannt, gehören zu den 2D-Shadern. Sie können Fragmente verändern und die Eigenschaften einzelner Pixel modifizieren. Darunter fallen beispielsweise die Farbe und die Transparenz.
- Der Vertex-Shader übernimmt die geometrische Berechnung dynamischer Objekte. Er beschreiben dabei die Position, die Koordinaten und die Struktur der Eckpunkte.
- Der Geometry-Shader erhält die vom Vertex-Shader ausgegebenen Polygondaten und kann diese weiter verändern. Die Besonderheit: Der Geometry-Shader ist in der Lage, noch weitere Geometrien zur Szene hinzuzufügen.
- Tessellation-Shader dienen dazu, die Geometrie zwischen den Vertex- und Geometry-Shadern weiter zu verfeinern.
Integration und Programmierung
Bei Shadern handelt es sich nicht um vom Rest der GPU getrennte Recheneinheiten, sondern um einen festen Bestandteil der Rendering-Pipeline des Grafikchips. Die Programmierung erfolgt in speziellen Sprachen, heutzutage hauptsächlich in Cg, GLSL und HLSL.
Während die 3D-Anwendung läuft, übersetzt der Grafikkartentreiber diese in einen für die GPU verständlichen Maschinencode, der dann von den Shadern ausgeführt wird. Aufgrund der hohen Komplexität ist außerdem eine Softwareschnittstelle erforderlich. Zu den gängigsten zählen DirectX® und OpenGL. Es existieren zahlreiche Versionen, wobei keine Abwärtskompatibilität gegeben ist.
Geschichte und Entwicklung der Shader
Shader wurden ursprünglich für die Schattierung genutzt. Etwas später kam dann mit dem Vertex-Shader der erste 3D-Shader hinzu. Der dritte Typ, der Geometry-Shader, wurde mit DirectX® 10 beziehungsweise OpenGL 3.2 eingeführt. Den Tessellation-Shader gibt es seit DirectX® 11 beziehungsweise OpenGL 4.0.
Aufgrund des wachsenden Funktionsumfangs wurde schließlich das Konzept der Unified-Shader umgesetzt. Seitdem verschwanden die hardwareseitigen Unterschiede zwischen den verschiedenen Typen. Dadurch kann der Grafikchip zu jedem Zeitpunkt selbst entscheiden, wie er die Shadereinheiten nutzen möchte, was mit einer potenziellen Performance-Steigerung einhergeht. Ein weiterer Vorteil: neue Shaderarten benötigen keine spezielle Hardware.
Anwendungsbeispiele von Shadern
- Spezialeffekte in Computerspielen
- Realistische Darstellung von Oberflächen- und Materialeigenschaften
- Schattierungen in 3D-Szenen
- Berechnung von Wasser-, Lava- und Fell- beziehungsweise Haareffekten