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.