Was ist ein OpenGL® -Schatten?
Ein Open Graphics Library® (OpenGL®) -Schadow ist eine visuelle Näherung in einer dreidimensionalen (3D) OpenGL®-Szene, in der ein Schatten unter ähnlichen Beleuchtungsbedingungen im wirklichen Leben gegossen werden würde. Shadows sind eine komplexe visuelle Funktion, die in OpenGl® implementiert ist, vor allem, weil es keine angeborene Unterstützung für das Gießen von Schatten in einer Szene gibt. Stattdessen gibt es eine Vielzahl von Techniken, mit denen Schatten aus den Objekten und Geometrie in einer Szene mit verschiedenen Werkzeugen erstellt werden können, z. In den meisten Fällen stehen Qualität, Genauigkeit und Geschwindigkeit des OpenGL® -Schattenwechsels in direktem Zusammenhang mit der Verarbeitungsleistung und dem Speicher der Grafikhardware, die in einem Computer oder Gerät vorhanden sind. Einige der beliebtesten Methoden zur Implementierung eines OpenGl® -Schattens sind Schattenvolumina, Schattenzuordnung und Strahlenverfolgung.
Erstellen einer Anwendung mit OpenGL® -Schattenunterstützung erfordert mathematisches Wissen und ein tiefes Verständnis dafür, wie OpenGL® funktioniert. OpenGL® wird größtenteils verwendet, um 3D -Szenen zu erstellen, die in Echtzeit dynamisch und gerendert werden. Daher müssen die Algorithmen, mit denen Schatten erstellt werden, nicht nur für Geschwindigkeit optimiert werden, sondern müssen auch sorgfältig für den Verbrauch von Ressourcen und alle Störungen gemessen werden, die in der Grafikpipeline verursacht werden können, die zum Rendering verwendet werden. Aus diesen Gründen ist die grundlegendste Methode zum Erstellen eines Schattens, der als Ray Tracing bezeichnet wird, für vollständige 3D -Szenen oft unpraktisch, da es sehr lange dauern kann.
Strahlenverfolgung folgt im Grunde genommen einer imaginären Linie oder Strahl von der Betrachtungsebene oder Position der Kamera über eine Szene bis zur Oberfläche eines Objekts und berechnet dann die Farbe der Oberfläche basierend auf der Position einer oder mehrerer Lichtquellen und anderer Faktoren. Während des Rastrierprozesses, wo dieDie 3D-Szene wird auf eine zweidimensionale (2D) Oberfläche angezogen, sodass sie angezeigt werden kann. Der Prozess der Strahlenverfolgung muss an jedem Pixel durchgeführt werden, das gezogen wird, und insbesondere mit Texturen oder anderen Oberflächeneigenschaften müssen möglicherweise mehrmals dieselben Pixel bewerten. Dies bedeutet, dass Echtzeit-Strahlenverfolgung, obwohl sie genau die Schatten rendern, normalerweise nicht praktisch ist.
Eine andere Methode, mit der ein OpenGL® -Schatten erstellt werden kann, wird als Shadow -Mapping bezeichnet. Diese Methode verwendet den Tiefen- oder Schablonenpuffer, um eine Szene aus dem Winkel der Lichtquelle als eine Reihe von Entfernungen von der Lichtquelle zu den Oberflächen verschiedener Objekte innerhalb der Szene zu rendern. Die Szene wird dann ein zweites Mal aus dem richtigen Betrachtungswinkel gerendert und prüft, ob jedes Pixel innerhalb eines bestimmten Abstandsbereichs innerhalb des Puffers fällt, was angibt, ob das Pixel beleuchtet oder beschattet ist. Die Verwendung von Schattenzuordnungen kann Speicherintensiv sein und mit Szenen mit mehr als einer Lichtquelle m eingehen mmehrere Karten aus mehreren Blickwinkeln außen.
Schattenvolumina sind eine Möglichkeit, einen OpenGL® -Schatten zu erstellen, der genauer ist als bei einigen anderen Methoden, aber seine eigenen Probleme aufweist. Ein Schattenvolumen ist im Wesentlichen ein unsichtbares Stück Geometrie in einer Szene, die von der beleuchteten Oberfläche eines Objekts von der Lichtquelle entfernt ist. Dieses Volumen kann gegen andere Objekte überprüft werden, um festzustellen, ob sie in den Schatten der Oberfläche fallen, aus dem das Volumen stammt. Dieses Verfahren kann sehr komplex sein und letztendlich visuelle Artefakte erstellen, wenn sie für die Geschwindigkeit optimiert werden.