Der Vertex-Shader ist die erste programmierbare Stufe der Grafik-Pipeline. Er läuft für jeden Vertex (Eckpunkt) eines 3D-Modells und ist dafür zuständig, dessen Position im Raum zu transformieren — zum Beispiel durch Drehung, Verschiebung oder Kamera- und Projektionsmatrix.
Was der Vertex-Shader tut
Jedes 3D-Modell besteht aus Vertices, die über Kanten zu Dreiecken verbunden sind. Ein Vertex trägt Attribute wie Position, Normale oder Texturkoordinaten. Der Vertex-Shader bekommt diese Attribute als Eingabe und muss eine Ausgabe liefern: die Position des Vertex im einheitlichen Clip-Raum. In GLSL (siehe GLSL-Befehle) schreibt er dazu in die Variable gl_Position.
#version 330 core
layout (location = 0) in vec3 aPos;
uniform mat4 model, view, projection;
void main() {
gl_Position = projection * view * model * vec4(aPos, 1.0);
}
Was hier noch passiert
- Der Vertex-Shader läuft einmal pro Eckpunkt — bei einem Modell mit einer Million Dreiecken also Millionen Male pro Bild, hochparallel auf den Shader-Kernen der GPU.
- Er eignet sich für Skelett-Animation (Skinning), Verformungen oder das Versetzen von Geländehöhen — alles, was die Geometrie eines einzelnen Punkts verändert.
- Nach dem Vertex-Shader folgen feste Stufen: Primitive Assembly (Zusammensetzen zu Dreiecken), Clipping (Abschneiden außerhalb des Sichtbereichs) und Culling (Verwerfen rückseitiger Flächen).
Grenzen
Der Vertex-Shader kann keine neuen Vertices erzeugen und keine Nachbarschaftsbeziehungen sehen — er kennt immer nur seinen einen Eckpunkt. Geometrie erzeugen oder verfeinern können erst Geometry- und Tessellation-Shader.
Verwandte Grundlagen: Grafik-Pipeline, Rasterisierung, Fragment-Shader, Shader.