Previous: Material
Up: Arbeitsgruppe Renderer
Next: Kamera
Unterabschnitte
Können wir!
Der Renderer verarbeitet folgende vier Sorten von Lichtquellen:
- Globales Licht
- Punktlicht
- Spotlicht
- Gerichtetes Licht
Die vier Lichtquellen unterscheiden sich vor allem in Hinblick auf zwei
wesentliche Merkmale: kann die Richtung ermittelt werden, aus der das Licht
kommt, und wie stark nimmt die Intensitaet mit zunehmender Entfernung vom zu
beleuchtenden Objekt ab? Wenn die Richtung ermittelt werden kann, muss man
die Normalen auf den Flächen mit in die Berechung einbeziehen. Spielt die
Entfernung eine Rolle, dann kommen Abschwächungsfaktoren ins Spiel. Das
globale Licht ist das einzige, dessen Richtung sich nicht ermitteln lässt,
und bei globalem und gerichtetem Licht hat die Entfernung keinen Einfluss
auf die Intensität.
Die endgültige Farbe eines Objektes hängt sowohl von der Kombination
dieser Lichquellen ab, als auch von seinen Materialeigenschaften (Kap.
3.0.5), so dass ein blau
beschienener roter Körper schwarz wird!
Globales Licht
Man geht davon aus, dass die Körper eines Raumes das auf sie treffende
Licht teilweise in alle Richtungen reflektieren, wodurch im Endeffekt eine
bestimmte Intensität von überall zu kommen scheint. Globales, oder
ambientes, Licht beschreibt also, wieviel Licht jedes Objekt unabhängig
von seiner Position und der Position anderer Lichtquellen abbekommt. In
unserem Fall wird die Eigenschaft dadurch erreicht, dass man in die Szene
ein globales Licht einsetzt, welches als Parameter eine Farbe bekommt. Die
Farbwerte der Körper, die sich durch die Berechnung der anderern
Lichtquellen ergeben, werden dann mit diesem globalen Licht verrechnet. Man
könnte also auch eine bestimmte Hintergrundatmosphäre in einer
bestimmten Farbe erzeugen, indem man das globale Licht nicht als einen
Grauwert definiert. Man beachte, dass das globale Licht zu der direkten
Beleuchtung hinzukommt. Wenn man also die Farbe weiss als globale Farbe
nimmt, werden alle Objekte unabhängig von den ande!
!
ren Lichtquellen komplett weiss
dargestellt.
Ein Punktlicht ist eine im Raum positionierte Lichtquelle, die in alle
Richtungen gleichmäßig strahlt. Die Abschwächung wird durch drei
Faktoren angegeben: konstante, lineare und quadratische Abschwächung. Der
Farbwert eines Punktes hängt vom Winkel ab, unter dem das Licht auf die
Fläche trifft, und von der Entfernung: je flacher der Winkel und je weiter
entfernt, desto schwächer das reflektierte Licht. Ein Beispiel fur ein
Punktlicht wäre eine Kerze oder ein Lagerfeuer.
Spotlicht
Das Spotlicht verhaält sich wie ein Scheinwerfer. Es ist im Prinzip ein
Punktlicht, das aber nur einen Lichtkegel abgibt. Es hat also eine
bevorzugte Richtung und einen Winkel für die Breite des Lichtkegels. Neben
den Abschwächungsfaktoren, die auch beim Punktlicht vorkommen, gibt es
hier auch noch einen Faktor, der angibt, wie stark das Licht von der Mitte
des Strahls bis hin zum äußersten sichtbaren Bereich des Kegels an
Intensität verliert(Spotlichtexponent).
Gerichtetes Licht
Gerichtetes Licht kommt für alle Körper aus der gleichen Richtung, die
Strahlen kommen also parallel an. Dies entspricht einer unendlich weit
entfernten Lichtquelle, was durch eine null als viertem Wert der homogenen
Koordinate erreicht wird. Natürlich macht ein Abschwächungsfaktor hier
keinen Sinn mehr. Die anzugebende Position stellt jetzt auch nicht mehr die
Position der Lichtquelle dar, sondern den Richtungsvektor.
ALLE Werte sind vom Datentyp float.
Die Positionen sind als homogene Koordinaten in einem Array anzugeben.
Alle Farbwerte sind ebenfalls als Arrays mit Werten zwischen 0.0 und 255.0
anzugeben. Sie werden dann intern in Werte zwischen 0.0 und 1.0 umgerechnet,
die für OpenGl nötig sind. Die ersten dei Werte stehen für den Rot-,
Grün- und Blauanteil, der vierte für den Alphawert, der aber bei uns
keine Verwendung gefunden hat.
Die Abschwächungskoeffizienten haben Werte von 0.0 bis 1.0, der
Spotlichtexponent Werte von 0.0 aufwärts.
Die Winkelangabe für das Spotlicht ist sinnvollerweise zwischen 0.0 und
360.0 zu wählen.
Geometrieprobleme
Bei der Benutzung von Punktlichtern und Spotlichtern kann es zu
Darstellungsfehlern kommen, wenn die Untereinheiten eines Objektes nicht
korrekt zusammengesetzt sind. Wenn ein Eckpunkt einer Untereinheit an eine
andere Untereinheit angrenzt, muss sie an einen Eckpunkt dieser angrenzen.
Das liegt daran, dass die Farbwerte einer Fläche bei uns über die
Eckpunkte bestimmt werden. Grenzt ein Eckpunkt einer Untereinheit nicht an
einen Eckpunkt einer anderen, dann stimmen die Farbwerte der benachbarten
Pixel nicht mehr (siehe Abb.
). Praktisch gesehen bedeutet das einfach, dass man seine Objekte aus mehr
Untereinheiten bauen muss, als man intuitiv annimmt. Ein korrektes P aus
Balken besteht nämlich jetzt eben nicht aus vier Balken, sondern aus neun!
Da beim gerichteten Licht kein Farbverlauf entsteht, gibt es das Problem
hier nicht. Bei sophistizierteren Rendermethoden wie dem Phongshading,
welches OpenGl aber nicht vorsieht, tritt das Problem übrigens auch nicht
auf, da dort für jedes Pixel die Normalen und damit die korrekte
Beleuchtung berechnet werden.
Ein weiteres, verwandtes Problem ist, dass Spotlichter bei grossen Flächen
nicht korrekt dargestellt werden können. Auch dies ließe sich über
Phongshading beheben.
Unbedingt zu vermeiden sind konkave Polygone, da wir kein
Tesselation(Zerlegung von konkave in konvexe Polygone) anwenden!
Links eine Anordnung von Polygoneckpunkten, die zu vermeidenist. Rechts dagegen das korrekte Beispiel.
|
|
Links ein P bei dem die Boxen ungünstig plaziert sind, sodass die Beleuchtung nicht korrekt ist. Rechts dazu ein P, bei dem nurEcken aufeinander treffen und die Beleuchtung korrekt ist. Nicht direktsichtbar ist, dass dieses P aus neun Boxen zusammengesetzt ist.
Die Normalenvektoren spielen eine entscheidende Rolle bei der Beleuchtung
von Flächen. Leider konnten wir sie nicht mehr von aussen einlesen lassen,
obwohl das von Seiten der AG VRML/X3D optional vorgesehen ist. Der Renderer
berechnet die Normalenvektoren für jede Fläche selbst. Eine sonst
notwendige gesonderte Transformation für die Normalen ist in diesem Fall
überflüssig, da sie gar nicht von Modell- in Weltkoordinaten
überführt werden, sondern erst aus den Weltkoordinatenflächen
berechnet werden.
Previous: Material
Up: Arbeitsgruppe Renderer
Next: Kamera