Una sombra de Open Graphics Library® (OpenGL®) es una aproximación visual en una escena OpenGL® tridimensional (3D) de cómo se proyectaría una sombra en la vida real bajo condiciones de iluminación similares. Las sombras son una característica visual compleja de implementar en OpenGL®, en gran parte porque no existe un soporte innato para proyectar sombras en una escena. En cambio, hay una variedad de técnicas que se pueden usar para crear sombras a partir de los objetos y la geometría dentro de una escena utilizando varias herramientas, como los distintos búferes, sombreadores y, en algunos casos, extensiones que dan acceso a características especiales en ciertos gráficos. tarjetas. En la mayoría de los casos, la calidad, precisión y velocidad del renderizado de sombras OpenGL® está directamente relacionada con la potencia de procesamiento y la memoria del hardware gráfico presente en una computadora o dispositivo. Algunos de los métodos más populares para implementar una sombra OpenGL® incluyen los volúmenes de sombra, el mapeo de sombras y el trazado de rayos.
La creación de una aplicación compatible con la sombra de OpenGL® requiere conocimientos matemáticos y una comprensión profunda de cómo funciona OpenGL®. OpenGL® se utiliza en gran medida para crear escenas 3D que son dinámicas y renderizadas en tiempo real, por lo que los algoritmos que se utilizan para crear sombras no solo deben optimizarse para la velocidad, sino que también deben medirse cuidadosamente para determinar su consumo de recursos y cualquier interrupción que se produzca. podría deberse a la canalización de gráficos utilizada para la renderización. Por estas razones, el método más básico para crear una sombra, llamado trazado de rayos, a menudo no es práctico para escenas en 3D completas, porque puede llevar mucho tiempo.
El trazado de rayos básicamente sigue una línea imaginaria, o rayo, desde el plano de visión o la posición de la cámara a través de una escena hasta la superficie de un objeto y luego calcula el color de la superficie en función de la posición de una o más fuentes de luz y otros factores. Durante el proceso de rasterización, donde la escena 3D se dibuja en una superficie bidimensional (2D) para que pueda mostrarse, el proceso de trazado de rayos debe realizarse en cada píxel que se está dibujando y, especialmente con texturas u otros propiedades de la superficie, es posible que deba evaluar los mismos píxeles varias veces. Esto significa trazado de rayos en tiempo real, aunque representaría sombras con precisión, por lo general no es práctico.
Otro método que se puede utilizar para crear una sombra OpenGL® se conoce como mapeo de sombras. Este método utiliza el búfer de profundidad o plantilla para representar una escena desde el ángulo de la fuente de luz como una serie de distancias desde la fuente de luz a las superficies de diferentes objetos dentro de la escena. Luego, la escena se renderiza por segunda vez desde el ángulo de visión correcto, verificando si cada píxel cae dentro de un cierto rango de distancia dentro del búfer, lo que indica si el píxel está iluminado o sombreado. El uso de mapas de sombras puede consumir mucha memoria y, con escenas que tienen más de una fuente de luz, puede implicar la creación de múltiples mapas desde múltiples ángulos.
Los volúmenes de sombra son una forma de crear una sombra OpenGL® que es más precisa que algunos otros métodos, pero presenta sus propios problemas. Un volumen de sombra es esencialmente una pieza invisible de geometría en una escena que se expande desde la superficie iluminada de un objeto lejos de la fuente de luz. Este volumen se puede comparar con otros objetos para ver si están cayendo en la sombra de la superficie de donde se originó el volumen. Este procedimiento puede ser muy complejo y, en última instancia, crear artefactos visuales cuando se optimiza para la velocidad.