Schattierung

Die 1971 von Henri Gouraud entwickelte Gouraud-Schattierung war eine der ersten Schattierungstechniken, die für 3D-Computergrafiken entwickelt wurde.

In der Computergrafik bezieht sich Shading auf den Prozess der Veränderung der Farbe eines Objekts/einer Oberfläche/eines Polygons in der 3D-Szene, basierend auf Dingen wie (aber nicht beschränkt auf) dem Winkel der Oberfläche zu den Lichtern, ihrem Abstand zu den Lichtern, ihrem Winkel zur Kamera und den Materialeigenschaften (z.

Das Shading wird während des Rendering-Prozesses von einem Programm namens Shader durchgeführt.

Winkel der Oberfläche zu einer LichtquelleBearbeiten

Das Shading verändert die Farben der Flächen in einem 3D-Modell basierend auf dem Winkel der Oberfläche zu einer Lichtquelle oder Lichtquellen.

Im ersten Bild unten sind die Flächen der Box gerendert, aber alle in der gleichen Farbe. Auch hier wurden Kantenlinien gerendert, was das Bild übersichtlicher macht.

Das zweite Bild zeigt dasselbe Modell, gerendert ohne Kantenlinien. Es ist schwer zu erkennen, wo eine Seite des Kastens endet und die nächste beginnt.

Das dritte Bild hat eine Schattierung, die das Bild realistischer macht und es einfacher macht zu erkennen, welche Seite welche ist.

Gerendertes Bild eines Kastens. Dieses Bild hat keine Schattierung auf den Flächen, sondern verwendet stattdessen Kantenlinien (auch Drahtgitter genannt), um die Flächen zu trennen, und eine stärkere Kontur, um das Objekt vom Hintergrund zu trennen.

Das ist das gleiche Bild, bei dem die Linien entfernt wurden; der einzige Hinweis auf die innere Geometrie sind die Punkte der Silhouette des Objekts.

Das ist das gleiche Objekt mit flacher Schattierung. Die Farbe der 3 sichtbaren Stirnseiten wurde auf der Grundlage ihres Winkels (bestimmt durch den Normalenvektor) zu den Lichtquellen festgelegt.

BeleuchtungsartenBearbeiten

Schattierungseffekte eines Flutlichts mit einem Raytracer

Wenn ein Shader die Ergebnisfarbe berechnet, verwendet er ein Beleuchtungsmodell, um die Menge des an bestimmten Punkten der Oberfläche reflektierten Lichts zu bestimmen. Verschiedene Beleuchtungsmodelle können mit verschiedenen Schattierungstechniken kombiniert werden – während die Beleuchtung angibt, wie viel Licht reflektiert wird, bestimmt die Schattierung, wie diese Information verwendet wird, um das Endergebnis zu berechnen. So kann beispielsweise die Beleuchtung nur an bestimmten Punkten berechnet und der Rest durch Interpolation ausgefüllt werden. Der Shader kann auch entscheiden, wie viele Lichtquellen berücksichtigt werden sollen usw.

UmgebungslichtBearbeiten

Eine Umgebungslichtquelle stellt eine omnidirektionale Lichtquelle mit fester Intensität und Farbe dar, die alle Objekte in der Szene gleichermaßen beeinflusst (omnipräsent ist). Beim Rendern werden alle Objekte in der Szene mit der angegebenen Intensität und Farbe aufgehellt. Diese Art von Lichtquelle wird hauptsächlich verwendet, um die Szene mit einer grundlegenden Ansicht der verschiedenen Objekte in ihr zu versehen. Sie ist die am einfachsten zu implementierende Beleuchtungsart und modelliert, wie Licht mehrfach gestreut oder reflektiert werden kann, wodurch ein gleichmäßiger Effekt entsteht.

Umgebungsbeleuchtung kann mit Umgebungsokklusion kombiniert werden, um darzustellen, wie belichtet jeder Punkt der Szene ist, was die Menge des Umgebungslichts beeinflusst, die er reflektieren kann. Dies erzeugt eine diffuse, ungerichtete Beleuchtung in der gesamten Szene, die keine klaren Schatten wirft, aber geschlossene und geschützte Bereiche abdunkelt. Das Ergebnis ähnelt in der Regel einem bewölkten Tag.

PunktbeleuchtungBearbeiten

Das Licht geht von einem einzigen Punkt aus und breitet sich in alle Richtungen aus.

SpotlightingBearbeiten

Modelliert einen Spot: Das Licht geht von einem einzigen Punkt aus und breitet sich kegelförmig aus.

FlächenbeleuchtungBearbeiten

Das Licht geht von einem kleinen Bereich auf einer einzigen Ebene aus. (Ein realistischeres Modell als eine punktförmige Lichtquelle.)

Gerichtetes LichtBearbeiten

Eine gerichtete Lichtquelle beleuchtet alle Objekte gleichmäßig aus einer bestimmten Richtung, wie ein flächiges Licht von unendlicher Größe und unendlicher Entfernung von der Szene; es gibt Schattierungen, aber es kann keinen Entfernungsabfall geben. Das ist wie bei der Sonne.

AbstandsabfallBearbeiten

Zwei mit OpenGL gerenderte Boxen. (Man beachte, dass die Farbe der beiden Vorderseiten gleich ist, obwohl die eine weiter entfernt ist.)

Das gleiche Modell, gerendert mit ARRIS CAD, das einen Abstandsabfall implementiert, um Oberflächen, die näher am Auge sind, heller zu machen.

Theoretisch werden zwei parallele Flächen von einer entfernten, ungehinderten Lichtquelle wie der Sonne praktisch gleich stark beleuchtet. Der Abstandsabfall-Effekt erzeugt Bilder, die mehr Schattierungen aufweisen und daher für nahe Lichtquellen realistisch wären.

Das linke Bild verwendet keinen Abstandsabfall. Beachten Sie, dass die Farben auf den Vorderseiten der beiden Kästen genau gleich sind. An der Stelle, an der sich die beiden Vorderseiten direkt überschneiden, scheint es einen leichten Unterschied zu geben, aber das ist eine optische Täuschung, die durch die vertikale Kante unterhalb der Stelle verursacht wird, an der sich die beiden Vorderseiten treffen.

Das rechte Bild verwendet eine Abstandsabweichung. Beachten Sie, dass die Vorderseite des näheren Kastens heller ist als die Vorderseite des hinteren Kastens. Außerdem wird der Boden mit zunehmender Entfernung heller und dunkler.

BerechnungBearbeiten

Der Abstandsabfall kann auf verschiedene Weise berechnet werden:

  • Potenz des Abstands – Für einen bestimmten Punkt in einem Abstand x von der Lichtquelle ist die empfangene Lichtintensität proportional zu 1/xn.
    • Keine (n = 0) – Die empfangene Lichtintensität ist unabhängig vom Abstand zwischen dem Punkt und der Lichtquelle gleich.
    • Linear (n = 1) – Für einen gegebenen Punkt in einer Entfernung x von der Lichtquelle ist die empfangene Lichtintensität proportional zu 1/x.
    • Quadratisch (n = 2) – So nimmt die Lichtintensität in der Realität ab, wenn das Licht einen freien Weg hat (d. h. kein Nebel oder andere Dinge in der Luft, die das Licht absorbieren oder streuen können). Für einen gegebenen Punkt in einer Entfernung x von der Lichtquelle ist die empfangene Lichtintensität proportional zu 1/x2.
  • Eine beliebige Anzahl anderer mathematischer Funktionen kann ebenfalls verwendet werden.

SchattierungstechnikenBearbeiten

Bei der Schattierung wird oft eine Oberflächennormale für die Lichtberechnung benötigt. Die Normalen können für jeden Scheitelpunkt des Modells vorberechnet und gespeichert werden.

Flache SchattierungBearbeiten

Flache Schattierung eines texturierten Quaders

Hier, wird die Beleuchtung nur einmal für jedes Polygon ausgewertet (normalerweise für den ersten Scheitelpunkt im Polygon, aber manchmal für den Schwerpunkt bei Dreiecksnetzen), basierend auf der Oberflächennormale des Polygons und der Annahme, dass alle Polygone flach sind. Die berechnete Farbe wird für das gesamte Polygon verwendet, wodurch die Ecken scharf aussehen. Dies wird in der Regel verwendet, wenn fortgeschrittenere Schattierungstechniken zu rechenintensiv sind. Glanzlichter werden bei flacher Schattierung schlecht wiedergegeben: Wenn am repräsentativen Scheitelpunkt eine große Glanzlichtkomponente vorhanden ist, wird diese Helligkeit gleichmäßig über die gesamte Fläche gezeichnet. Wenn ein spiegelnder Glanzpunkt nicht auf den repräsentativen Punkt fällt, wird er völlig übersehen.

Glatte SchattierungBearbeiten

Im Gegensatz zur flachen Schattierung, bei der sich die Farben an den Polygongrenzen diskontinuierlich ändern, ändert sich bei der glatten Schattierung die Farbe von Pixel zu Pixel, was zu einem sanften Farbübergang zwischen zwei benachbarten Polygonen führt. In der Regel werden die Werte zunächst in den Scheitelpunkten berechnet, und die Werte der Pixel zwischen den Scheitelpunkten der Polygone werden durch bilineare Interpolation ermittelt. Zu den Arten der glatten Schattierung gehören die Gouraud-Schattierung und die Phong-Schattierung.

Gouraud-SchattierungBearbeiten
  1. Bestimmen Sie die Normale an jedem Polygonscheitelpunkt.
  2. Wenden Sie ein Beleuchtungsmodell auf jeden Scheitelpunkt an, um die Lichtintensität aus der Scheitelnormalen zu berechnen.
  3. Interpolieren Sie die Scheitelpunktintensitäten mit bilinearer Interpolation über das Oberflächenpolygon.

Probleme:

  • Da die Beleuchtung nur an den Scheitelpunkten berechnet wird, können die Ungenauigkeiten (insbesondere von Glanzlichtern auf großen Dreiecken) zu offensichtlich werden.
  • T-Übergänge mit angrenzenden Polygonen können manchmal zu visuellen Anomalien führen. Im Allgemeinen sollten T-Übergänge vermieden werden.
Phong-SchattierungBearbeiten

Die Phong-Schattierung ähnelt der Gouraud-Schattierung, mit der Ausnahme, dass anstelle der Interpolation der Lichtintensitäten die Normalen zwischen den Scheitelpunkten interpoliert werden und die Beleuchtung pro Pixel bewertet wird. Auf diese Weise werden die Glanzlichter viel genauer berechnet als beim Gouraud-Schattierungsmodell.

  1. Berechnen Sie eine Normale N für jeden Scheitelpunkt des Polygons.
  2. Bereiten Sie unter Verwendung bilinearer Interpolation eine Normale Ni für jedes Pixel. (Die Normalen müssen jedes Mal neu normalisiert werden.)
  3. Wenden Sie auf jedes Pixel ein Beleuchtungsmodell an, um die Lichtintensität aus Ni zu berechnen.

Deferred shadingEdit

Deferred shading ist eine Schattierungstechnik, bei der die Berechnung der Schattierung auf eine spätere Phase verschoben wird, indem in zwei Durchgängen gerendert wird, was die Leistung potenziell erhöht, da keine teuer schattierten Pixel verworfen werden. Im ersten Durchgang werden nur die Oberflächenparameter (wie Tiefe, Normalen und Materialparameter) erfasst, im zweiten Durchgang erfolgt die eigentliche Schattierung und die Berechnung der endgültigen Farben.:884

Andere AnsätzeBearbeiten

Sowohl die Gouraud-Schattierung als auch die Phong-Schattierung können durch bilineare Interpolation implementiert werden. Bishop und Weimer schlugen vor, eine Taylorreihenerweiterung des Ausdrucks zu verwenden, der sich aus der Anwendung eines Beleuchtungsmodells und der bilinearen Interpolation der Normalen ergibt. Es wurde also eine polynomiale Interpolation zweiten Grades verwendet. Diese Art der biquadratischen Interpolation wurde von Barrera et al. weiter ausgearbeitet, wobei ein Polynom zweiter Ordnung zur Interpolation des diffusen Lichts des Phong-Reflexionsmodells und ein weiteres Polynom zweiter Ordnung für das spiegelnde Licht verwendet wurde.

Die sphärische lineare Interpolation (Slerp) wurde von Kuij und Blake zur Berechnung sowohl der Normalen über dem Polygon als auch des Vektors in Richtung der Lichtquelle verwendet. Ein ähnlicher Ansatz wurde von Hast vorgeschlagen, der eine Quaternionen-Interpolation der Normalen verwendet, mit dem Vorteil, dass die Normalen immer eine Einheitslänge haben und die rechenintensive Normalisierung vermieden wird.

Flache vs. glatte Schattierung smooth shadingEdit

Flat Smooth
Uses the same color for every pixel in a face – usually the color of the first vertex Smooth shading uses linear interpolation of either colors or normals between vertices
Edges appear more pronounced than they would on a real object because in reality almost all edges are somewhat round The edges disappear with this technique
Same color for any point of the face Each point of the face has its own color
Individual faces are visualized Visualize underlying surface
Not suitable for smooth objects Suitable for any objects
Less computationally expensive More computationally expensive