Zum Inhalt springen

Reflexionsmodelle und Shading-Verfahren

In den vorherigen Kapiteln haben wir das Lambert- und das Phong-Reflexionsmodell sowie Gouraud- und Phong-Shading kennengelernt.

Diese Begriffe gehören zu zwei unterschiedlichen Bereichen der Grafikprogrammierung. Weil in beiden Bereichen der Name Phong vorkommt, kann man sie leicht miteinander verwechseln.

Wir wollen deshalb noch einmal klar unterscheiden, was berechnet wird und an welcher Stelle die Berechnung stattfindet.

Reflexionsmodelle: Wie reagiert eine Oberfläche auf Licht?

Abschnitt betitelt „Reflexionsmodelle: Wie reagiert eine Oberfläche auf Licht?“

Ein Reflexionsmodell beschreibt mathematisch, wie eine Oberfläche einfallendes Licht reflektiert. Es legt fest, welche Eigenschaften der Oberfläche und welche Richtungen bei der Berechnung berücksichtigt werden.

Zwei Reflexionsmodelle kennen wir bereits:

Lambert-Reflexionsmodell

Das Lambert-Modell beschreibt die diffuse Reflexion. Die reflektierte Lichtintensität hängt vom Winkel zwischen der Oberflächennormale und der Richtung zur Lichtquelle ab.

Je direkter das Licht auf die Oberfläche trifft, desto stärker ist die diffuse Reflexion. Spiegelnde Glanzlichter werden mit dem Lambert-Modell nicht berechnet.

Phong-Reflexionsmodell

Das in unseren Beispielen verwendete Phong-Modell kombiniert drei Anteile:

  • Ambient: eine vereinfachte Grundbeleuchtung, die wir zusätzlich berücksichtigen
  • Diffuse: die diffuse Reflexion nach Lambert
  • Specular: die spiegelnde Reflexion, die Glanzlichter erzeugt

Das Phong-Reflexionsmodell ermöglicht damit eine differenziertere Darstellung der Oberfläche.

Beide Modelle beantworten dieselbe Frage: Wie berechnen wir die Lichtreflexion an einem Punkt der Oberfläche?

Shading-Verfahren: Wo wird die Oberflächenfarbe berechnet?

Abschnitt betitelt „Shading-Verfahren: Wo wird die Oberflächenfarbe berechnet?“

Ein Shading-Verfahren beschreibt in diesem Zusammenhang, an welcher Stelle der Grafikpipeline die Beleuchtungsberechnung ausgeführt wird und welche Werte zwischen den Vertices interpoliert werden.

Gouraud-Shading

Beim Gouraud-Shading berechnet der Vertex-Shader für jeden Vertex eine Farbe anhand des gewählten Reflexionsmodells.

Diese Vertex-Farben werden über die Dreiecksflächen interpoliert. Der Fragment-Shader übernimmt die interpolierte Farbe und gibt sie aus.

Phong-Shading

Beim Phong-Shading berechnet der Vertex-Shader noch keine endgültige beleuchtete Oberflächenfarbe.

Stattdessen werden die Oberflächennormalen über die Dreiecksflächen interpoliert. Der Fragment-Shader verwendet diese Normalen, um die Lichtreflexion anhand des gewählten Reflexionsmodells für jedes Fragment zu berechnen.

Beide Verfahren beantworten eine andere Frage als die Reflexionsmodelle: Wo führen wir die Berechnung aus, und was wird interpoliert?

Reflexionsmodell und Shading-Verfahren kombinieren

Abschnitt betitelt „Reflexionsmodell und Shading-Verfahren kombinieren“

Ein Reflexionsmodell ist nicht an eine bestimmte Shader-Stufe gebunden. Wir können sowohl die Lambert- als auch die Phong-Berechnung im Vertex-Shader oder im Fragment-Shader ausführen.

Reflexionsmodell Shading-Verfahren Berechnung und Interpolation
Lambert Gouraud-Shading Diffuse Reflexion pro Vertex berechnen, Farben interpolieren
Lambert Phong-Shading Normalen interpolieren, diffuse Reflexion pro Fragment berechnen
Phong Gouraud-Shading Ambient-, Diffuse- und Specular-Anteile pro Vertex berechnen, Farben interpolieren
Phong Phong-Shading Normalen interpolieren, Ambient-, Diffuse- und Specular-Anteile pro Fragment berechnen

Das Beispiel aus dem Originalbuch verwendet Lambert als Reflexionsmodell und Gouraud als Shading-Verfahren. Die diffuse Reflexion wird also im Vertex-Shader berechnet.

Unsere beleuchtete Kugel verwendet dagegen das Phong-Reflexionsmodell zusammen mit Phong-Shading. Die Normalen werden interpoliert, und der Fragment-Shader berechnet die Oberflächenfarbe einschließlich der Glanzlichter.

Reflexionsmodell: Beschreibt, wie eine Oberfläche Licht reflektiert. Beispiele sind Lambert und Phong.

Shading-Verfahren: Bestimmt, wo die Beleuchtungsberechnung ausgeführt wird und welche Werte zwischen den Vertices interpoliert werden. Beispiele sind Gouraud- und Phong-Shading.

Der Name Phong bezeichnet somit zwei unterschiedliche Dinge: ein Reflexionsmodell und ein Shading-Verfahren. Beide können zusammen verwendet werden, müssen es aber nicht.