.phongShading

Allgemein

Dieser kurze Überblick über das Phong-Beleuchtungmodell entstand während der GDV I Vorlesung im Rahmen meines Informatik Studiums an der TUD.

Modellüberblick

Das Phong Beleuchtungsmodell wurde 1975 von Bui-Tuong-Phong vorgestellt und stellt ein Berechnungsverfahren zur Ausleuchtung eines Objektes in der 3D-Computergraphik dar.
Wesentlich dabei ist, daß es nicht auf physikalischen Grundlagen aufbaut, also z.B. den Energieerhaltungssatz verletzt oder Phänomena aufgrund des Wellen- oder gar Teilchencharakters des Lichts nicht simulieren kann. Obwohl es relativ langsam zu berechnen ist und bereits neuere Modelle zur Ausleuchtung bekannt sind, wird das Phong Beleuchtungmodell auch heute noch häufig als wichtigstes Beleuchtungsverfahren eingesetzt.

Achtung: Das Phong Beleuchtungsmodell und Phong Shading müssen unterschieden werden! Das Phong Shading ist eine Interpolationsmethode und hat zunächst nichts mit dem Phong Beleuchtungsmodell zu tun.

Das Modell ist recht einfach aufgebaut, doch bevor wir uns die einzelnen Komponenten anschauen, hier zunächst die Einschränkungen:

1. Es wird angenommen, daß Licht nur von punktförmigen Lichtquellen ausgeht - welche natürlich auch unendlich weit entfernt sein können, so daß die Strahlen auch parallel auf die Oberfläche treffen können.
2. Die Beleuchtung wird nur lokal an der Objektoberfläche berechnet, bzw. nur die Objektoberflächengeometrie geht in die Beleuchtungsrechung mit ein.
3. Diffuse und spiegelnde Lichtstrahlen werden auch nur lokal berechnet, es findet keine weitere Interaktion mit anderen Objekten statt.
4. Die ambiente Beleuchtung ist eine globale Konstante (mehr dazu gleich)

 

 
Lichtanteile

Das Phong Beleuchtungsmodell setzt die Beleuchtung einer Oberfläche bzw. besser gesagt das von einer Objektoberfläche reflektierte Licht aus insgesamt 3 Lichtarten zusammen:

reflektiertes Licht = ambientes Licht + diffuse Lichtanteile + spiegelnde Lichtanteile

= + +

Umgebungslicht, Ambientes Licht (ambient light)

Das ambient light ist ein Licht, welches in der gesamten Szene zum tragen kommt, also ein Lichtanteil, der überall konstant vorliegt. Man kann das ambient light als Grundhelligkeit der Szene auffassen. Es geht von keiner Lichtquelle aus (ist also ungerichtet) und ist überall vorhanden.
Da das ambient light sowieso von keiner Richtung ausgeht, wird es auch in keine spezielle Richtung von der Objektoberfläche aus abgestrahlt, es ist ein diffuser Lichtanteil.

Diffuses (ungerichtetes) Licht

Das diffuse Licht ist das Licht, was die Objektoberfläche ungerichtet abstrahlt. Im Gegensatz zum ambient light hängt die Leuchtstärke aber sehr wohl vom Winkel des einfallenden Lichtstrahls ab.
Mit anderen Worten: Der Winkel vom Betrachter zur Oberfläche ist unerheblich, lediglich der Winkel von der Objektoberfläche zum Lichtstrahl ist entscheidend. Egal von wo aus der Betrachter auf das Objekt schaut, es hat immer die gleiche Leuchtintensität.
Volle Leuchtkraft ergibt sich bei 90° zwischen dem einfallenden Licht und der Objektoberfläche. Anhand der Skizze kann man erkennen, dass das einfallende Licht sich bei kleiner werdendem Winkel auf eine größere Fläche verteilen muss und daher die Leuchtkraft von Oberflächen, welche von fast parallel verlaufenden Strahlen angeleuchtet werden nahezu 0 ist.
Es bietet sich also an, diesen Sachverhalt über den Sinus des Lichteinfallswinkels zu implementieren: Volle Intensität bei 90° Einfallsinkel zur Oberfläche (Sinus ergibt dann 1).
Da im 3 Dimensionalen natürlich der rechte Einfallswinkel räumlich gesehen wird und man die Normale als Vektor der Senkrecht zur Oberfläche steht gegeben hat, bzw. sich errechnen kann, wird dieser Sachverhalt kurzerhand transformiert und mann erhält: Volle Intensität, wenn das einfallende Licht parallel zur Normale ist bzw. 0 falls das einfallende Licht senkrecht zur Normale und damit parallel zur Oberfläche ist. Da der Cosinus über das Skalarprodukt definiert ist erhalten wir für die Intensität dieser Lichtkomponente

wobei der Vektor L die Richtung des Lichtes und N die Normale zur Oberfläche angibt. (Anmerkung: L muss nicht zwangsläufig die Richtung des Lichts sein, sondern kann auch der umgekehrte Vektor vom Punkt der Oberfläche O hin zur Lichtquelle L, also L-O sein. Siehe Formel ganz am Ende.)

Reflektierendes Licht (specular light)

Das specular light ist schlussendlich der Lichtanteil, der reflektiert wird. Er hängt sowohl vom Betrachter als auch der Lichtquelle ab.
Das specular Light ist am stärksten, falls der Betrachter exakt in dem Winkel auf die Oberfläche schaut, in dem die Strahlen der Lichtquelle wieder abstrahlen. Schon kleine Abweichungen von diesem Winkel sollten die Leuchtintensität drastisch reduzieren.
Ähnlich dem diffusen Licht errechnet sich die Intensität dann aus:

Wobei R der reflektierte Strahl, B der Winkel zum Betrachter und n die Abschwächung ist. Für n gegen unendlich verhält sich das Objekt wie eine perfekt spiegelnde Oberfläche: Schon leichte Abweichungen erzeugen durch den Cosinus Werte kleiner 1 die durch die hohe Potenz gegen 0 gehen und damit dafür sorgen, dass die Leuchtintensität drastisch abnimmt.
Um nicht extra den reflektierten Strahl berechnen zu müssen verfährt man wie folgt: Man bildet den Bisektor zwischen einfallendem Lichtstrahl und Augstrahl (der Richtung vom Betrachter zur Oberfläche). Dieser ist einfach zu berechnen:

B = (I + A), wobei B der Bisektor, I der Vektor von der Oberfläche zur Lichtquelle und A der Augstrahl bzw. der Vektor von der Oberfläche zum Berachter ist.
Für Augstrahl = Reflektiertem Strahl ergibt sich ein Bisektor, der parallel zur Oberflächennormale steht. Verschiebt sich die Position des Betrachters, vergrößert sich nicht nur der Winkel zwischen Augstrahl und Reflektiertem Strahl, sondern auch der Winkel zwischen Bisektor und Normale.

Man kann die Rechnung auch ausdrücken als:

B ist der Bisektor, der sich aus den Werten von A (Vektor zum Betrachter), L (Vektor zur Leuchtquelle) und O (Vektor zum Ounkt an dem die Beleuchtung stattfindet) zusammensetzt, N ist die Normale zur Oberfläche am Punkt O; n ist wieder die Konstante, die festlegt wie rapide die Lichtintensität abfällt, falls der Winkel zum Betrachter vom Winkel des ideal reflektierten Strahls abweicht.

 

 

Gesamte Formel

Wie bereits gesagt setzt sich die Formel im wesentlichen aus den genannten drei Lichtanteilen zusammen. Allerdings sollte man beachten, dass sich die genannten Formeln auf die Annahme stützen, daß nur eine Lichtquelle vorhanden ist. Bei mehreren Lichtquellen müssen entsprechende Summen gebildet werden.
Der letzte Parameter des Beleuchtungsmodells ist die sogeannte Lichtabdämpfung, die attenuation. Der attenuationfactor gibt an, wie weit eine Lichtquelle vom beleuchteten Objekt entfernt ist, bzw. wie weit das Licht aufgrund der Entfernung zum Objekt abgedämpft wird.
Der attenuationfactor sollte also bei größer werdender Entfernung kleiner werden. Bei physikalisch korrekten Beleuchtungsmodellen ist der attenuationfactor bei Punktlichtquellen die in den gesamten Raum abstrahlen proportional zu 1/r^3.
Zu beachten ist, dass sich diese Attenuation natürlich nur auf den diffusen Lichtanteil und das spekulare Licht, nicht jedoch auf das ambiente Licht beziehen.
Außerdem hat jede Oberfläche noch drei Konstanten, die zusammen 1 ergeben und die Gewichtung der Lichtanteile ambient, diffuse und specular angeben.

Wir erhalten als gesamte Formel:

Igesamt = kAIA + af(kDID + kSIS)

für die Gewichtungskoeffizienten gilt kA + kD + kS = 1

Hier ist IA die Intensität des ambienten Lichtes, ID die Intensität des diffusen Lichts und IS die Intensität des spekularen Lichts.
Da für gewöhnlich ID und IS von der selben Lichtquelle stammen und damit ID = IS gilt, kann man sie zusammenfassen und als IS ausklammern.

Ausgeschrieben ergibt sich für eine Lichtquelle dann die folgende Formel:
(Allgemeiner Fall, alle Vektoren L, N, O und A liegen beliebig im Raum und fallen nicht mit dem Koordinatenursprung zusammen)

Die verwendeten Variablen im einzelnen sind also:
Skalar Bedeutung
kA Koeffizient des ambienten Lichtanteils
kD Koeffizient des diffusen Lichtanteils
kS Koeffizient des spekularen Lichtanteils
af Attenuationfactor; gibt die Abdämpfung des Lichts an und sollte von |L-O| abhängen
n Reflexionskoeffizient; je höher, desto weniger ausgeprägt sind "Spotlights" auf konvexen Oberflächen
IA Intensität des Ambienten Lichts
IS Intensität der Lichtquelle
Vektor Bedeutung
O Vektor vom Ursprung zum Oberflächenpunkt, dessen Beleuchtung berechnet wird
L Vektor vom Ursprung zur Lichtquelle
A Vektor vom Ursprung zum Augpunkt des Betrachters
N Normalenvektor zur Oberfläche am Punkt O

Abschließend

Die Formel selbst ändert sich in Ihrer Gestalt von Autor zu Autor ein wenig, dennoch sollte der Grundgedanke herübergekommen sein. Die Beleuchtungsrechnung wird nach dem Phong Beleuchtungsmodell in drei einzelne Rechnungen aufgesplittet und diese ergeben die endgültige Ausleuchtung.
Die Beleuchtungsrechnung wird in 3D Programmen für gewöhnlich 3 mal (einmal für Rot, Grün und Blau) durchgeführt.
Man erhält also den Rotwert (und analog den Grün- und Blauwert) einer Oberfläche in dem man in die Formel für Igesamt die Parametern IARot und ISRot für IA und IS einsetzt.

Im hier verwendeten Beispiel wurde ein schwarz-weißer Fussball mit weißem Licht beleuchtet, also waren die R,G,B Werte des Lichts alle auf voller Intensität; Lediglich das ambient light war leicht orange/braun gefärbt und bringt damit Farbe in die Szene.