Der Fragment-Shader (in DirectX Pixel-Shader genannt) ist die zweite große programmierbare Stufe der Grafik-Pipeline. Er läuft für jedes Fragment, das die Rasterisierung erzeugt hat, und berechnet dessen endgültige Farbe.
Was der Fragment-Shader tut
Ein Fragment repräsentiert einen Bildpunkt-Kandidaten mit interpolierten Attributen (Position, Texturkoordinate, Normale). Der Fragment-Shader nutzt diese Werte, um die Ausgabefarbe zu bestimmen: Er sampelt Texturen, berechnet Licht- und Schatteneffekte, Normal Mapping oder Materialeigenschaften. In GLSL schreibt er das Ergebnis auf eine Ausgabevariable:
#version 330 core
out vec4 FragColor;
uniform sampler2D ourTexture;
in vec2 TexCoord;
void main() {
FragColor = texture(ourTexture, TexCoord);
}
Typische Aufgaben
- Textur-Sampling: Farbwert aus einer Textur an der interpolierten UV-Koordinate holen.
- Beleuchtung: pro Pixel gerechnetes Licht (Phong, PBR) mit Normalen-Interpolation für glatte Oberflächen.
- Verwerfen per
discard: Das Fragment wird verworfen und nicht in den Puffer geschrieben — etwa für Löcher in Blättern oder feine Gitter. - Effekte wie Fog, Kantenglättungstechniken oder prozedurale Muster direkt im Shader.
Nach dem Fragment-Shader
Das fertige Fragment geht an den Output Merger: Tiefen- und Stencil-Test entscheiden über die Sichtbarkeit, Alpha-Blending mischt es mit dem bereits im Framebuffer liegenden Inhalt. Der Fragment-Shader ist die rechenintensivste Stufe vieler Spiele — je höher die Auflösung, desto mehr Fragmente müssen verarbeitet werden.
Verwandte Grundlagen: Grafik-Pipeline, Rasterisierung, Vertex-Shader, Mesh-Shader, Shader.