Was ist ein OpenGL® Shadow?

Ein Open Graphics Library® (OpenGL®) -Schatten ist eine visuelle Annäherung in einer dreidimensionalen (3D) OpenGL®-Szene, wie ein Schatten unter ähnlichen Lichtbedingungen im wirklichen Leben geworfen würde. Schatten sind eine komplexe visuelle Funktion, die in OpenGL® implementiert werden muss, vor allem, weil das Werfen von Schatten in einer Szene nicht von Haus aus unterstützt wird. Stattdessen gibt es eine Vielzahl von Techniken, mit denen mithilfe verschiedener Werkzeuge Schatten aus den Objekten und der Geometrie in einer Szene erzeugt werden können, z. B. die verschiedenen verfügbaren Puffer, Shader und in einigen Fällen Erweiterungen, mit denen auf bestimmte Grafikfunktionen zugegriffen werden kann Karten. In den meisten Fällen hängen Qualität, Genauigkeit und Geschwindigkeit der OpenGL®-Schattenwiedergabe direkt von der Verarbeitungsleistung und dem Speicher der Grafikhardware in einem Computer oder Gerät ab. Zu den gängigsten Methoden zum Implementieren eines OpenGL®-Schattens gehören Schattenvolumen, Schattenzuordnung und Raytracing.

Das Erstellen einer Anwendung mit OpenGL®-Schattenunterstützung erfordert mathematische Kenntnisse und ein tiefes Verständnis der Funktionsweise von OpenGL®. OpenGL® wird hauptsächlich zur Erstellung von dynamischen und in Echtzeit gerenderten 3D-Szenen verwendet. Daher müssen die Algorithmen zur Erstellung von Schatten nicht nur auf Geschwindigkeit optimiert, sondern auch sorgfältig auf ihren Ressourcenverbrauch und etwaige Störungen hin gemessen werden könnte in der für das Rendern verwendeten Grafikpipeline auftreten. Aus diesen Gründen ist die grundlegendste Methode zum Erstellen eines Schattens, die so genannte Strahlverfolgung, für vollständige 3D-Szenen häufig nicht praktikabel, da sie sehr lange dauern kann.

Die Strahlverfolgung folgt im Wesentlichen einer imaginären Linie oder einem Strahl von der Betrachtungsebene oder Position der Kamera durch eine Szene zur Oberfläche eines Objekts und berechnet dann die Farbe der Oberfläche basierend auf der Position einer oder mehrerer Lichtquellen und anderen Faktoren. Während des Rasterungsprozesses, bei dem die 3D-Szene auf eine zweidimensionale (2D-) Oberfläche gezeichnet wird, damit sie angezeigt werden kann, muss der Raytracing-Prozess für jedes Pixel ausgeführt werden, das gezeichnet wird, insbesondere für Texturen oder andere Bei Oberflächeneigenschaften müssen möglicherweise dieselben Pixel mehrmals bewertet werden. Dies bedeutet, dass Raytracing in Echtzeit in der Regel nicht praktikabel ist, obwohl es genau Schatten rendern würde.

Eine andere Methode, die zum Erstellen eines OpenGL®-Schattens verwendet werden kann, ist das Shadow Mapping. Diese Methode verwendet den Tiefen- oder Schablonenpuffer, um eine Szene aus dem Winkel der Lichtquelle als eine Reihe von Abständen von der Lichtquelle zu den Oberflächen verschiedener Objekte in der Szene zu rendern. Die Szene wird dann ein zweites Mal aus dem richtigen Betrachtungswinkel gerendert und überprüft, ob jedes Pixel in einen bestimmten Entfernungsbereich innerhalb des Puffers fällt, um anzuzeigen, ob das Pixel beleuchtet oder abgeschattet ist. Die Verwendung der Schattenzuordnung kann speicherintensiv sein und bei Szenen mit mehr als einer Lichtquelle das Erstellen mehrerer Karten aus mehreren Blickwinkeln erfordern.

Schatten-Volumes sind eine Möglichkeit, einen OpenGL®-Schatten zu erstellen, der genauer als einige andere Methoden ist, jedoch seine eigenen Probleme aufweist. Ein Schattenvolumen ist im Wesentlichen ein unsichtbares Stück Geometrie in einer Szene, das sich von der beleuchteten Oberfläche eines Objekts weg von der Lichtquelle ausdehnt. Dieses Volumen kann mit anderen Objekten verglichen werden, um festzustellen, ob sie in den Schatten der Oberfläche fallen, von der das Volumen stammt. Dieses Verfahren kann sehr komplex sein und letztendlich visuelle Artefakte erzeugen, wenn es auf Geschwindigkeit optimiert ist.

ANDERE SPRACHEN

War dieser Artikel hilfreich? Danke für die Rückmeldung Danke für die Rückmeldung

Wie können wir helfen? Wie können wir helfen?