prev up next

Previous: Material Up: Arbeitsgruppe Renderer Next: Kamera

Unterabschnitte


Beleuchtung

Können wir!

Lichtquellen

Der Renderer verarbeitet folgende vier Sorten von Lichtquellen: 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.

Punktlicht

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.

Parameter

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.

gif

). 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.

Normalenvektoren

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.


prev up next
Previous: Material Up: Arbeitsgruppe Renderer Next: Kamera