Kapitel 9: Visualisierungstechniken
Vom exakten aber datenintensiven BRDF-Modell zum approximierenden Phong'schen Reflexionsmodell (ambient + diffus + spekular + optional emissiv), physikalisch hergeleitet (Reflexionsgesetz, Absorption, Rauheit, Lambertsches Kosinusgesetz), plus Shading-Verfahren (Flat/Gouraud/Phong), Normal Mapping, Lichtquellen und die konkrete GLSL-Umsetzung. Kernthema der Klausur.
Überblick
Dieses Kapitel behandelt, wie das Aussehen (appearance) eines Objektes berechnet und dargestellt wird. Drei Faktoren bestimmen das Aussehen:
- Position und Orientierung des Betrachters (viewer) relativ zum beleuchteten Objekt.
- Position, Orientierung und Typ der Lichtquelle (light source).
- Oberflächenmaterial (surface material) des Objektes.
Roter Faden:
- Die BRDF beschreibt Reflexion exakt, ist aber zu datenintensiv zum Speichern.
- Beleuchtungs-/Reflexionsmodelle approximieren die BRDF durch einfache mathematische Funktionen -> das Phong'sche Reflexionsmodell.
- Physikalische Herleitung der Terme (Reflexionsgesetz, Absorption, Rauheit, Lambert).
- Shading-Verfahren (Flat/Gouraud/Phong) unterscheiden sich in der Granularität der Normalen (Flächen-/Ecken-/Pixelnormalen).
- Normal Mapping, Material als Texturen, Lichtquellentypen und die konkrete GLSL-Shader-Implementierung.
Hinweis (mögliche Unstimmigkeit): Das Klausur-Briefing nannte gluLookAt und depth test. Diese Themen kommen in Kapitel 9 laut Quellenextraktion NICHT vor (sie gehören zu Kamera-/Rasterisierungskapiteln). Aus diesem Kapitel prüfungsrelevant sind vor allem die GLSL/OpenGL-Shader und die Phong-Beleuchtung (beide unten ausführlich).
BRDF (Bidirectional Reflectance Distribution Function)
Die BRDF (bidirectional reflectance distribution function) beschreibt, wie viel des einfallenden Lichts in eine bestimmte Richtung reflektiert wird. Es ist eine 4D-Funktion: die Richtung des einfallenden Lichts und die Richtung des reflektierten Lichts , beide jeweils 2D in Kugelkoordinaten (spherical coordinates).
- Nachteil: enorme Datenmengen.
- Reale BRDFs werden mit einem Gonio-Reflektometer (gonioreflectometer) gemessen, das die Probe mit mehreren Bewegungsachsen aus verschiedenen Winkeln abtastet.
Raytracing liefert den physikalischen Kontext: Von der Kamera wird durch die Bildebene (image plane) ein Sehstrahl (view/eye ray) bis zum Objekt verfolgt; von dort geht ein Schattenstrahl (shadow ray) zur Lichtquelle, um Verschattung zu prüfen.
Motivation für Reflexionsmodelle
Die explizite Speicherung der BRDF für jede ein- und ausgehende Richtung ist zu speicherintensiv.
Worked Example (Speicherbedarf): Für nur Richtungen benötigt EIN Material bereits ca. 1,2 GB. Deshalb sucht man eine einfache mathematische Funktion, die ähnliche Ergebnisse liefert. Solche Funktionen heißen Reflexionsmodelle bzw. Beleuchtungsmodelle (reflection / illumination model).
Phong'sches Reflexionsmodell (Überblick)
Nach Bui-Tuong Phong, "Illumination for Computer Generated Pictures" (Communications of the ACM, 1975). Die Lichtquelle wird als Punktlichtquelle (point light source) angenommen. Die in Richtung des Betrachters abgegebene Lichtintensität ist die Summe von drei Komponenten:
- Diffuse Reflexion (diffuse reflection)
- Ambiente Beleuchtung (ambient lighting)
- Spiegelnde / Spekulare Reflexion (specular reflection)
Optional erweitert um einen vierten Term: Emission (self-emission).
Physikalische Herleitung
Licht als elektromagnetische Wellen: Farbe entsteht durch die Wellenlänge (wavelength); sichtbares Licht liegt etwa zwischen 390 und 760 nm.
Reflexionsgesetz (law of reflection): Einfallswinkel = Ausfallswinkel; beide Winkel werden zur Oberflächennormale gemessen. Annahmen: Punktlichtquelle und reflektierende Oberfläche.
Absorption: Es werden nicht alle Wellenlängen reflektiert. Dadurch ändert sich die Farbe des reflektierten Lichts (reflektiert z.B. eine Fläche nur grün, absorbiert sie den Rest).
Rauheit / Mikrogeometrie (roughness / microgeometry): Bei nicht ideal spiegelnden Oberflächen streut die Mikrogeometrie das Licht. Das reflektierte Licht nimmt mit zunehmender Abweichung vom Reflexionswinkel ab (Reflexionskeule / lobe um die ideale Reflexionsrichtung).
Lambertsches Kosinusgesetz
Für perfekt diffus reflektierendes Material sieht die Oberfläche aus allen Richtungen gleich hell aus. Die Intensität ist direkt proportional zum Kosinus des Winkels zwischen Normale und Lichtvektor.
Begründung (zwei Interpretationen desselben Effekts):
- Die beleuchtete Fläche nimmt mit dem Neigungswinkel zu -> die gleiche Photonenanzahl verteilt sich auf eine größere Fläche -> die Fläche wird dunkler.
- Alternativ: die projizierte Fläche (projected area) nimmt mit dem Neigungswinkel ab.
- : projizierte (wirksam beleuchtete) Fläche
- : tatsächliche Oberflächenfläche
- : Winkel zwischen Oberflächennormale und Lichtvektor
Typischer Fehler: Die Begründung ist NICHT "es kommt weniger Licht an", sondern die gleiche Photonenzahl trifft auf eine größere bzw. projizierte Fläche ().
Diffuse Reflexion
Die diffuse Reflexion hängt ab von: Lichtfarbe, Materialfarbe und dem Winkel zwischen der Oberflächennormale und dem Lichtaustrittsvektor (dem Vektor zur Lichtquelle). Farben werden komponentenweise (component-wise, Hadamard-Produkt) multipliziert.
Komponentenweise Formulierung (RGB):
- : Materialfarbe (rot/grün/blau)
- : Lichtfarbe (rot/grün/blau)
- : Lambert-Faktor
- Der Punkt zwischen den Farbvektoren ist die komponentenweise Multiplikation, kein Skalarprodukt.
Diffuses Reflexionsmodell (Summe über alle Lichtquellen):
- : resultierende Farbe (outgoing radiance)
- : diffuses Material (Materialfarbe)
- : Lichtfarbe der -ten Lichtquelle
- : Winkel zwischen Oberflächennormale und Lichtaustrittsvektor
- Die Summe läuft über jede Lichtquelle.
Skalarprodukt als Grundlage für cos alpha
Das wird rechnerisch über das Skalarprodukt (dot product) bestimmt:
Sind beide Vektoren normiert, vereinfacht sich das zu:
- : die beiden Vektoren (im Shading: Normale und Lichtvektor )
- : ihre Längen (Beträge)
- : eingeschlossener Winkel
Deshalb müssen und im Shader normalisiert werden, damit dot(N,L) direkt liefert.
Spekulare Reflexion
Die spekulare (spiegelnde) Reflexion erzeugt das spekulare Glanzlicht (specular highlight). Sie hängt ab von:
- Lichtfarbe
- Materialfarbe (kann von der diffusen Materialfarbe abweichen, ist oft weiß)
- Winkel zwischen dem Sichtvektor und dem reflektierten Lichtvektor
- Glanzfaktor / Shininess
Die Vektoren und Winkel im Überblick
Für die Beleuchtungsberechnung an einem Oberflächenpunkt braucht man vier Vektoren (alle als Einheitsvektoren):
- : Oberflächennormale (surface normal), senkrecht zur Fläche.
- : Lichtvektor, zeigt vom Oberflächenpunkt zur Lichtquelle.
- : reflektierter Lichtvektor, Spiegelung von an .
- : Sichtvektor (view direction), zeigt vom Oberflächenpunkt zur Kamera.
Die zwei zentralen Winkel:
- = Winkel zwischen und -> steuert die diffuse Reflexion ().
- = Winkel zwischen und -> steuert die spekulare Reflexion ().
Spekulare Reflexion, komponentenweise:
- : spekulare Materialfarbe
- : Lichtfarbe
- : Winkel zwischen Sichtvektor und reflektiertem Lichtvektor
- : Shininess (Glanzfaktor)
- : Potenzierung mit macht das Highlight schmaler
Shininess k
Der Exponent parametrisiert die spiegelnde Reflexion:
- Hohe Shininess -> kleinere, härtere Highlights (Eindruck eines "harten" Materials).
- Niedrige Shininess -> großes, weiches Highlight.
Worked Example (Shininess-Reihe): Für wird das Glanzlicht mit steigendem zunehmend kleiner und härter: ergibt ein großes, weiches Highlight, ein kleines, hartes.
Diffuses + spekulares Modell
Kombiniert man beide Terme innerhalb der Summe über die Lichtquellen:
- : resultierende Farbe
- : diffuses Material
- : spekulares Material
- : Winkel zwischen und (diffus)
- : Winkel zwischen und (spekular)
- : Shininess
- : Lichtfarbe der -ten Lichtquelle
Ambiente Beleuchtung
Die ambiente Beleuchtung (ambient lighting) imitiert grob die indirekte Beleuchtung, also Licht, das von anderen Oberflächen reflektiert wird. Ohne Ambient bleiben nicht direkt beleuchtete Bereiche komplett schwarz. Ambient ist richtungsunabhängig (kein -Faktor).
Vollständiges Phong'sches Reflexionsmodell
- : resultierende Farbe in Richtung des Betrachters
- : ambienter Term, steht außerhalb der Summe (wird einmal global addiert)
- : diffuses Material
- : globale ambiente Lichtfarbe
- : diffuser Lambert-Faktor
- : spekulares Material
- mit zwischen und : spekularer Faktor
- : Shininess
- : Lichtfarbe der -ten Lichtquelle
- Summe: über alle Lichtquellen
Worked Example (Wirkung des Ambient-Terms): Ohne Ambient (nur diffus + spekular) ist die abgewandte Schattenseite eines Objekts komplett schwarz. Mit Ambient () wird die Schattenseite gleichmäßig aufgehellt.
Emissive Oberflächen (Phong + Emission)
Selbstleuchtende Oberflächen tragen einen zusätzlichen Term bei, der unabhängig von externen Lichtquellen ist:
- : emissiver Term (selbstleuchtend)
- alle übrigen Symbole wie oben
Transformation der Normalen (Normalmatrix)
Nach einer nicht-uniformen Modelltransformation ist eine einfach mittransformierte Normale falsch: sie steht nicht mehr senkrecht auf der transformierten Fläche.
Zahlenbeispiel für die falsche (naive) Transformation mit der Modellmatrix bei Skalierung um Faktor 2 in x-Richtung:
Korrektheitsbedingung: die Normale muss senkrecht auf der transformierten Fläche bleiben, d.h. das Skalarprodukt aus transformierter Normale und transformiertem Flächenvektor bleibt null:
Über , und folgt:
Ergebnis: die Normale wird korrekt mit der Normalmatrix
(inverse transponierte Matrix) transformiert.
- : Modelltransformation (bzw.
viewMatrix * modelMatrix) - : Normalmatrix
- : Normale, : Flächen-/Tangentenvektor
- : Identitätsmatrix
Hinweis: Die Herleitung der Normalmatrix ist laut Vorlesung ausdrücklich "Nicht klausurrelevant!" markiert. Die praktische Anwendung
transpose(inverse(viewMatrix * modelMatrix))erscheint dagegen im Shader-Code und ist klausurrelevant.
Weitere Reflexionsmodelle
Über Phong hinaus (nur zur Einordnung):
- Ward (1992): isotrope und anisotrope BRDF (z.B. Metall, poliertes Holz).
- LaFortune (1993): komplexe Reflexionseigenschaften, Retro-Reflexion.
- Cook-Torrance (1982): physikalisch basierte Mikrofacetten (microfacets) mit Fresnel-Term und Abschattungsfaktor (shadowing-masking).
Shading-Verfahren
Ohne Normalen ist keine Beleuchtungsberechnung möglich. Die drei Verfahren unterscheiden sich in der Granularität der Normalen:
- Flächennormalen (face normals): eine Normale pro Fläche, steht senkrecht auf der Fläche.
- Eckennormalen (vertex normals): stehen senkrecht auf der Tangentialebene (NICHT auf der Fläche); berechnet durch Interpolation der Flächennormalen der benachbarten Flächen.
- Pixelnormalen (per-pixel normals): für jeden Pixel eine eigene Normale.
Flat Shading
Für jede Fläche gibt es genau eine Normale -> jede Facette erhält eine einheitliche Beleuchtung / nur eine Farbe.
- Vorteil: sehr einfach und schnell.
- Nachteil: bei gekrümmten Oberflächen oft schlechte, facettierte Qualität.
Gouraud Shading
Beleuchtungsberechnung pro Eckpunkt -> pro Dreieck drei Farben; die Farben der Pixel innerhalb des Dreiecks werden durch bilineare Interpolation ermittelt.
- Vorteil: optische Glättung ohne Geometrieänderung.
- Nachteil: kaschiert Kanten, die nicht zur Kontur gehören; Glanzlichter innerhalb eines Dreiecks können verloren gehen.
Worked Example (Grenze von Gouraud): Trifft ein Glanzlicht die Mitte eines Dreiecks, geht es verloren, weil die Beleuchtung nur an den Ecken berechnet wird. Erst mit sehr feiner Tessellierung (Reihe 2 -> 8 -> 18 -> 50 -> 200 -> 3200 Dreiecke) wird das Highlight korrekt sichtbar. Das zeigt die Kosten-/Qualitätsabwägung von Gouraud.
Phong Shading
Beleuchtungsberechnung pro Pixel/Fragment; für jeden Pixel wird eine Normale benötigt (aus Eckennormalen interpoliert oder aus einer Normal Map).
- Vorteil: korrekte Glanzlichter und gutes visuelles Ergebnis ohne zusätzliche Tessellierung.
- Nachteil: teuer (Normale pro Pixel interpolieren).
Wichtig (typische Falle): Phong Shading Phong's Reflexionsmodell. Das Reflexionsmodell beschreibt, was berechnet wird (ambient + diffus + spekular). Shading beschreibt, wo bzw. wie oft (pro Fläche / pro Vertex / pro Pixel). Man kann das Phong-Reflexionsmodell mit Flat-, Gouraud- oder Phong-Shading auswerten.
Normal Mapping
Baut auf Phong Shading auf. Ziel: Simulation von Unebenheiten (Bumps) durch reine Anpassung der Oberflächennormalen - die Geometrie bleibt unverändert (flach).
- Normalen werden pro Pixel als RGB-Farben in einer Textur gespeichert (typisch bläulich-violett).
- Grenze: Kippfiguren (ambiguous / reversible figures) wie der Necker-Würfel oder "junges Mädchen oder alte Frau"; der wahrgenommene Eindruck kann kippen.
Worked Example (Klausur WS 16/17, Phong-Shading-Querschnitte): Aus eingezeichneten Pixel-/Flächennormalen soll der visuelle Eindruck abgeleitet werden. Musterlösung:
- Normalen alle gerade nach oben -> "Geometrie erscheint eben".
- Normalen nach innen gekippt -> "Geometrie hat Schlaglöcher".
- Normalen gleichmäßig geneigt -> "Geometrie bildet eine Treppe". Sehr wahrscheinlicher Aufgabentyp.
Materialbeschreibung als Textur
Jede Materialeigenschaft kann in einer eigenen Textur gespeichert werden: Diffus, Ambient, Spiegelnd/Spekular, Emissiv, Normalen-/Tiefenkarte.
- Vorteil: entkoppelt Materialeigenschaften von den Geometriedaten.
- Nachteil: evtl. erhöhter Speicherbedarf.
Beispiel (Teekanne): eine Spekular-Maske in Smiley-Form erzeugt Glanzlicht nur an den Smiley-Pixeln; grüne Emissiv-Punkte leuchten auch ohne externe Beleuchtung.
Lichtquellen
- Gerichtete Lichtquelle (directional light): unendlich weit entfernt, parallel einfallende Strahlen.
- Punktlichtquelle (point light): lokalisierter Punkt strahlt in alle Richtungen; unterschiedliche Einfallswinkel auf einer ebenen Fläche.
- Spotlichtquelle (spotlight): Licht nur innerhalb eines bestimmten Winkels um eine angegebene Richtung; je weiter von der Achse entfernt, desto schwächer.
- Lichtabschwächung (light attenuation): Die Intensität nimmt mit der Entfernung ab (die Kurve fällt von 1 gegen 0).
Beispielprogramm: GLSL-Beleuchtungsshader
Per-Vertex vs. Per-Fragment
Die blickabhängige Beleuchtungsberechnung sollte im Fragment-Shader erfolgen: Per-Fragment liefert scharfe, korrekte Highlights, während Per-Vertex sie durch die Interpolation verschmiert.
Basis-Shader: Ohne Beleuchtung
// Vertex Shader
#version 330
layout(location = 0) in vec3 vertex;
layout(location = 1) in vec3 vertex_color;
uniform mat4 modelMatrix;
uniform mat4 viewMatrix;
uniform mat4 projMatrix;
out vec3 colorVS;
void main() {
gl_Position = projMatrix * viewMatrix * modelMatrix * vec4(vertex, 1.0);
colorVS = vertex_color;
}
// Fragment Shader
#version 330
in vec3 colorVS;
out vec4 color;
void main() {
color = vec4(colorVS, 1.0);
}
Reihenfolge der Matrizen: proj * view * model * vertex (von rechts nach links angewendet).
Diffuser Term
// Vertex Shader
[...]
layout(location = ...) in vec3 vertex_normal;
uniform vec3 lightPos;
out vec3 normal, lightDir;
void main() {
[...]
// Normale in den View Space transformieren //
vec4 n = vec4(vertex_normal, 0.0); // w=0: Richtungsvektor
mat4 normalMat = transpose(inverse(viewMatrix * modelMatrix)); // Normalmatrix
normal = (normalMat * n).xyz;
// Lichtrichtung im View Space //
vec4 lp = vec4(viewMatrix * vec4(lightPos, 1.0)); // lightPos in view space
vec4 P = vec4(viewMatrix * modelMatrix * vec4(vertex, 1.0)); // Vertexpos in view space
lightDir = (lp - P).xyz; // Richtung P -> Licht
}
// Fragment Shader
[...]
in vec3 normal, lightDir;
uniform vec3 lightColor;
void main() {
[...]
// alles Nötige normalisieren //
vec3 N = normalize(normal);
vec3 L = normalize(lightDir);
// diffuse component //
float cosa = max(0.0, dot(N,L)); // cos(alpha), abgeschnitten bei 0
vec3 diffuseTerm = colorVS * lightColor; // komponentenweise
color = vec4(diffuseTerm * cosa, 1.0);
}
Entspricht . Das max(0.0, ...) verhindert negative Beleuchtung (Licht von der Rückseite).
Interpolation der Normalen
Da es weniger Vertices als Fragmente gibt, werden die Normalen zwischen den Vertices interpoliert. Die interpolierten Vektoren sind nicht mehr normalisiert. Deshalb muss normalize() erneut im Fragment-Shader aufgerufen werden, nicht schon im Vertex-Shader.
Spekularer Term
// Vertex Shader
[...]
uniform vec3 lightPos;
out vec3 Normal, LightDir, viewDir;
void main() {
[...]
// specular term //
viewDir = -P.xyz; // Blickrichtung = negative Vertexposition im View Space
}
Frage/Antwort: "Warum ist die Blickrichtung die negative Vertexposition im View Space? -> Weil sich die Kamera im View Space im Ursprung befindet!"
// Fragment Shader
[...]
in vec3 normal, lightDir, viewDir;
uniform vec3 matSpecular;
uniform float matShininess;
void main() {
[...]
// specular component //
vec3 V = normalize(viewDir);
vec3 R = normalize(reflect(-L, N)); // reflektierter Lichtvektor
float cosBeta = max(0.0, dot(R, V)); // cos(beta)
float cosBetak = pow(cosBeta, matShininess); // cos^k(beta)
vec3 specularTerm = matSpecular * lightColor;
color += vec4(specularTerm * cosBetak, 1.0); // additiv zum diffusen Term
}
Entspricht . Wichtig: reflect(-L, N), weil das GLSL-Builtin reflect den einfallenden Vektor erwartet ( zeigt zur Lichtquelle, also ).
Ambienter Term
// Vertex Shader
[...]
uniform vec3 lightPos;
out vec3 normal, lightDir;
void main() {
[...]
}
// Fragment Shader
[...]
in vec3 normal, lightDir;
uniform vec3 lightColor;
void main() {
[...]
// ambient component //
float ambientStrength = 0.2;
vec3 ambientColor = colorVS; // koennte auch eine globale Ambient-Farbe sein
vec3 ambientTerm = ambientColor * lightColor * ambientStrength;
color += vec4(ambientTerm, 1.0); // additiv
}
Ambient wird konstant addiert (unabhängig von /, kein Winkel); hier mit ambientStrength = 0.2.
Worked Example (kompletter Phong-Shader): Im Fragment-Shader werden die Terme schrittweise aufsummiert:
color = diffus;danncolor += spekular;danncolor += ambient;(Per-Fragment). So "wächst" die Teekanne von der schwarzen Silhouette (ohne Beleuchtung) über diffus und + spekular (Glanzlicht) bis + ambient (aufgehellte Schattenseite).
Prüfungsrelevanz
- Phong-Beleuchtung (alle Terme + vollständige Formel): sicher beherrschen inkl. Bedeutung von und der vier Vektoren .
- GLSL/OpenGL-Shader: Struktur von Vertex-/Fragment-Shader,
#version 330,layout(location=...),uniform/in/out,gl_Position = proj*view*model*vec4(vertex,1.0). - Shading-Verfahren unterscheiden (Flat/Gouraud/Phong) und mit der Granularität der Normalen (Flächen-/Ecken-/Pixelnormalen) verknüpfen.
- Phong-Shading-Querschnitts-Aufgabe (Altklausur WS 16/17) - sehr wahrscheinlicher Aufgabentyp.
- Warum Per-Fragment und warum erneut normalisieren im Fragment-Shader.
- Lambertsches Kosinusgesetz und seine Begründung ().
Typische Fehler
- Phong-Shading mit Phong's Reflexionsmodell verwechseln. Reflexionsmodell = was (ambient+diffus+spekular); Shading = wo/wie oft (pro Fläche/Vertex/Pixel).
- Normale nach Modelltransformation naiv mit transformieren statt mit (falsch bei nicht-uniformer Skalierung).
- negativ zulassen: im Shader
max(0.0, dot(N,L))nicht vergessen (sonst "negatives" Licht von der Rückseite). - Normalisierung im Vertex-Shader statt Fragment-Shader: interpolierte Normalen sind keine Einheitsvektoren mehr ->
normalize()gehört in den Fragment-Shader. reflect(-L, N)mit falschem Vorzeichen: GLSLreflecterwartet den einfallenden Vektor; zeigt zur Lichtquelle, also verwenden.- Blickrichtung falsch: im View Space ist die Kamera im Ursprung ->
viewDir = -P.xyz. - Farben skalar statt komponentenweise multiplizieren (Material x Licht ist das Hadamard-Produkt).
- Ambient mit -Faktor versehen: Ambient ist richtungsunabhängig (, kein Winkel).
- Gouraud + kleines Glanzlicht in Flächenmitte: geht ohne feine Tessellierung verloren; Phong Shading löst das.
- Lambert-Begründung verwechseln: nicht "weniger Licht", sondern gleiche Photonenzahl auf größere/projizierte Fläche ().
Glossar
| Deutsch | English |
|---|---|
| Aussehen | appearance |
| Betrachter | viewer |
| Lichtquelle | light source |
| Oberflächenmaterial | surface material |
| BRDF | bidirectional reflectance distribution function |
| Kugelkoordinaten | spherical coordinates |
| Gonio-Reflektometer | gonioreflectometer |
| Reflexionsmodell / Beleuchtungsmodell | reflection / illumination model |
| Phong'sches Reflexionsmodell | Phong reflection model |
| Raytracing | ray tracing |
| Sehstrahl | view / eye ray |
| Schattenstrahl | shadow ray |
| Bildebene | image plane |
| Reflexionsgesetz | law of reflection |
| Oberflächennormale | surface normal |
| Absorption | absorption |
| Wellenlänge | wavelength |
| Rauheit / Mikrogeometrie | roughness / microgeometry |
| Lambertsches Kosinusgesetz | Lambert's cosine law |
| projizierte Fläche | projected area |
| diffuse Reflexion | diffuse reflection |
| spekulare / spiegelnde Reflexion | specular reflection |
| Glanzlicht | specular highlight |
| Shininess / Glanzfaktor | shininess |
| ambiente Beleuchtung | ambient lighting |
| Emission | emissive term |
| Skalarprodukt | dot product |
| komponentenweise Multiplikation | component-wise (Hadamard) multiplication |
| Normalmatrix | normal matrix |
| Identitätsmatrix | identity matrix |
| Mikrofacetten / Fresnel / Abschattungsfaktor | microfacets / Fresnel / shadowing-masking |
| Shading | shading |
| Flächennormale | face normal |
| Eckennormale | vertex normal |
| Pixelnormale | per-pixel normal |
| Tangentialebene | tangent plane |
| Flat Shading | flat shading |
| Gouraud Shading | Gouraud shading |
| Phong Shading | Phong shading |
| bilineare Interpolation | bilinear interpolation |
| Tessellierung | tessellation |
| Normal Mapping | normal mapping |
| Unebenheit / Bump | bump |
| Kippfigur | ambiguous / reversible figure |
| Material als Textur | texture-based material |
| gerichtete Lichtquelle | directional light |
| Punktlichtquelle | point light |
| Spotlichtquelle | spotlight |
| Lichtabschwächung | light attenuation |
| Vertex Shader / Fragment Shader | vertex shader / fragment shader |
| Per-Vertex vs. Per-Fragment | per-vertex vs. per-fragment lighting |
| View Space / Kamerakoordinatensystem | view space |