Shader Programmierung Flashcards
(24 cards)
Was sind Shader?
Shader sind Programme, die auf der GPU ausgeführt werden, um Grafikeffekte wie Beleuchtung, Texturierung und Oberflächeneffekte effizient zu berechnen.
Wo werden Shader in der Grafikpipeline verwendet?
- Vertex Shader – Verarbeitet jeden Vertex, transformiert ihn und interpoliert Attribute.
- Fragment Shader (Pixel Shader) – Berechnet für jedes Pixel die endgültige Farbe basierend auf Licht, Texturen und Materialien.
Wie ist die Interaktion zwischen CPU und GPU bei Shadern?
- CPU: Definiert die Geometrie, setzt Shader-Parameter und sendet Zeichenbefehle.
- GPU: Führt die Vertex Shader und Fragment Shader aus, um das endgültige Bild zu berechnen.
Wie ist ein typischer Ablauf in einer Shader-basierten Anwendung?
- Initialisierung: Vertex-Shader und Fragment-Shader werden kompiliert und an die GPU übergeben.
- Vertex-Transformation: Die Vertex-Daten werden verarbeitet und in Bildschirmkoordinaten umgerechnet.
- Rasterisierung: Polygone werden in Pixel umgewandelt.
- Fragment-Shader: Berechnung der Farbwerte pro Pixel.
Welche Shader-Sprachen gibt es?
- GLSL (Graphics Library Shading Language) OpenGL/WebGL
- HLSL (High-Level Shader Language) DirectX
- WGSL (WebGPU Shader Language) WebGPU
Welche speziellen Datentypen gibt es in GLSL?
- vec2, vec3, vec4 – Vektoren
- mat2, mat3, mat4 – Matrizen
- sampler2D – Textur-Sampler
Welche wichtigen GLSL-Funktionen gibt es?
- dot(v1, v2) – Skalarprodukt
- normalize(v) – Normierung eines Vektors
- reflect(I, N) – Reflexionsberechnung
Welche Variablentypen gibt es in GLSL?
- attribute (in WebGL1) / in (WebGL2)
-> Eingabedaten für den Vertex Shader (Position, Texturkoordinaten). - uniform
-> Konstante Werte, die für alle Vertices oder Pixel gelten (z. B. Transformationsmatrizen, Lichtquellen). - varying (WebGL1) / out (WebGL2)
-> Übergangsvariablen zwischen Vertex- und Fragment-Shader.
Was ist gl_Position?
Eine Pflichtvariable im Vertex Shader, die die Bildschirmposition eines Vertexes angibt.
Was ist gl_FragColor?
Eine Pflichtvariable im Fragment Shader (WebGL1), die die endgültige Farbe eines Pixels angibt.
In WebGL2 wird gl_FragColor durch out vec4 fragColor ersetzt.
Was ist die Aufgabe eines Vertex Shaders?
- Transformiert Vertex-Koordinaten in Bildschirmkoordinaten.
- Interpoliert Normalen, Texturkoordinaten und andere Attribute.
Welche Transformationen finden im Vertex Shader statt?
- Modelltransformation 𝑀_Model– Bringt das Objekt ins Weltkoordinatensystem.
- View-Transformation 𝑀_View– Transformiert Weltkoordinaten in Kamerakoordinaten.
3.Projektions-Transformation 𝑀_Proj– Wandelt Kamerakoordinaten in Bildschirmkoordinaten um.
Wie sieht eine Vertex-Shader-Funktion aus?
uniform mat4 modelViewProjectionMatrix;
attribute vec3 position;
void main() {
gl_Position = modelViewProjectionMatrix * vec4(position, 1.0);
}
Was ist die Aufgabe eines Fragment Shaders?
- Berechnet die Farbe jedes Pixels.
- Nutzt Lichtquellen, Texturen und Materialien für die Farbwerte.
Wie sieht eine einfache Fragment-Shader-Funktion aus?
precision mediump float;
uniform vec4 color;
void main() {
gl_FragColor = color;
}
Was ist ein Diffuse Shader?
Berechnet nur die diffuse Reflexion nach dem Lambert’schen Reflexionsgesetz:
𝐼_𝑑=𝐼_𝑙⋅𝑘_𝑑⋅max(0,𝑛⃗⋅𝑙⃗)
Was ist ein Phong Shader?
Kombiniert ambiente, diffuse und spekuläre Beleuchtung nach dem Phong-Reflexionsmodell:
𝐼=𝐼_𝑎+𝐼_𝑑+𝐼_𝑠
Was ist ein Bump Mapping Shader?
Simuliert Oberflächenunebenheiten durch Modifikation der Normalen mit einer Textur.
Was ist ein Discard Shader?
Entfernt Pixel basierend auf einer Bedingung, z. B. Transparenz:
if (texture2D(tex, uv).a < 0.1)
discard;
Warnung: Zu viele discard-Operationen können die Performance negativ beeinflussen.
Was ist ein Wave Shader?
Erzeugt wellenartige Effekte, indem die Vertex-Position verändert wird:
float wave = sin(time + position.x) * 0.1;
gl_Position.y += wave;
Anwendungen: Wasseranimationen, organische Bewegungen.
Wie optimiert man Shader für bessere Performance?
- Vermeidung von zu vielen Berechnungen pro Pixel.
- Nutzen von Lookup-Tabellen statt teurer Berechnungen (z. B. Sinuswerte aus einer Textur).
- Reduzierung von Texture-Lookups in Schleifen.
- Vermeidung unnötiger Discard-Operationen.
Was ist der Unterschied zwischen Low-, Medium- und High-Precision in GLSL?
- lowp – Geringste Genauigkeit, spart Rechenleistung.
- mediump – Gute Balance zwischen Leistung und Präzision.
- highp – Höchste Präzision, aber teuer in der Berechnung.
Welche Shader-Typen gibt es in der Grafikpipeline?
- Vertex Shader – Transformiert Geometrie.
- Fragment Shader – Berechnet Pixel-Farben.
- Geometry Shader – Erstellt zusätzliche Geometrie (nicht in WebGL verfügbar).
- Compute Shader – Führt GPU-Berechnungen außerhalb der Grafikpipeline aus (nur WebGPU).
Was sind die Vorteile von Shadern?
- Ermöglichen realistische Grafikeffekte in Echtzeit.
- Nutzen die massive Parallelverarbeitung der GPU.
- Flexibel für viele Anwendungsfälle (z. B. Beleuchtung, Wasser, Schatten).