In den spekularen Anteil geht die Intensität der Lichtquelle ein, der Kosinus des Winkel zwischen dem reflektierten Strahl R und dem Vektor A in Richtung Augenpunkt und die Rauheit.
Texture Mapping
Zur realistischen Gestaltung von Oberflächen verwendet man ein
zweidimensionales Musterfeld (texture map), aus dem für jedes
Pixel die zugehörige Farbe ermittelt werden kann.
Zugrunde gelegt sind zwei Abbildungen
Musterraum | (u,v) | |
Abbildung des Musters | ||
Objektraum | (x0,y0,z0) | |
Projektion | ||
Bildraum | (x,y) |
Die Verknüpfung der zugehörigen inversen Transformationen liefert die zum Einfärben eines Pixels benötigte Information.
Bildraum
Musterraum
Zum Einfärben im Bildraum wird die gewichtete Durchschnittsintensität
aller überdeckten Pixel im Musterraum benutzt.
Bump Mapping
Um den Eindruck von unebenen Oberflächen zu erwecken, werden in einem
Graubild Informationen zur Veränderung des Normalenvektors abgelegt.
Die Schattierungsalgorithmen unterscheiden sich bzgl. des
Aufwandes zur Bestimmung
der Helligkeitswerte im Innern eines 2D-Dreiecks.
Flat Shading
Alle Punkte des Dreiecks erhalten dieselbe Farbe.
Berücksichtigt werden Hintergrundbeleuchtung und
diffuse Reflexion.
Gouraud Shading
Es seien pro Dreieck an den Eckpunkten die Normalen in Weltkoordinaten
bekannt (d.h. bei einer gekrümmten
Fläche sind die drei Normalenvektoren verschieden).
Für jedes Pixel im Innern des Dreiecks wird nun durch doppelte
Interpolation die Intensität approximiert:
Phong Shading
Es seien pro Dreieck an den Eckpunkten die Normalen
in Weltkoordinaten bekannt.
Für jedes Pixel im Innern des Dreiecks wir nun durch doppelte
Interpolation seine individuelle Normale approximiert und dann der
Farbwert berechnet.
Sichtbarkeit
Nicht sichtbare Flächen oder Flächenanteile werden wie
folgt entfernt:
Beim Back Face Culling wird aufgrund des Normalenvektors einer
Fläche entschieden, ob sie vom Betrachter abgewandt ist und somit
vom Rendern ausgeschlossen werden kann.
Beim z -Buffer-Algorithmus wird zusätzlich
zum Bildwiederholspeicher bild ein 2-dimensionales Feld
tiefe gehalten, welches für jedes Pixel
den z -Wert des in diesem Punkt dem Betrachter
am nächsten liegenden Objekts enthält.
Fuer jede Flaeche tue: Fuer jedes Pixel (x, y) auf dieser Flaeche tue: berechne Farbe x und Tiefe z falls z < tiefe[x, y] dann bild [x, y] := c tiefe [x, y] := zBeim Spanning-Scan-line-Algorithmus durchläuft eine Scan-Line von oben nach unten das Bild und stützt sich auf eine nach y -Koordinaten sortierten Liste von Polygonen. Alle Kanten der aktiven Polygone befinden sich in einer nach x -Koordinaten sortierten Liste. Jeweils am Schnittpunkt der Scan-Line mit einer Polygonkante wird über die Sichtbarkeit der nächsten Polygonfläche entschieden.
Schatten
Zur Berechnung von Schatten eignen sich alle
Hidden-Surface-Algorithmen, da die verdeckten
Flächen einer Szene genau den beschatteten Flächen entsprechen, wenn
die Position der Lichtquelle und des Betrachters zusammenfallen.
Zunächst wird daher als Phase 1 aus der Sicht der Lichtquelle
die Szene in einen Schattentiefenpuffer abgebildet.
Phase 2 berechnet dann für den jeweiligen Betrachtungsstandpunkt
die Szene mit einem modifizierten Tiefenpuffer-Algorithmus:
Ergibt die Überprüfung des z -Wertes mit dem Eintrag
tiefe[x, y] im Tiefenpuffer, daß dieses Pixel
sichtbar ist, so wird der Punkt P(x,y,z)
in den Koordinatenraum von Phase 1 transformiert.
Ist die z -Koordinate z' des transformierten
Punktes P kleiner oder gleich dem Eintrag [x',y']
im Schattentiefenpuffer, dann liegt der Punkt P
nicht im Schatten, andernfalls liegt er im Schatten, und seine
Intensität muß entsprechend reduziert werden.