¿Qué es una sombra OpenGL®?
Una sombra Open Graphics Library® (OpenGL®) es una aproximación visual en una escena tridimensional (3D) OpenGL® de cómo se lanzaría una sombra en la vida real en condiciones de iluminación similares. Las sombras son una característica visual compleja para implementar en OpenGL®, en gran parte porque no hay apoyo innato para lanzar 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 diversos buffers, sombreadores disponibles y, en algunos casos, extensiones que dan acceso a características especiales en ciertas tarjetas gráficas. En la mayoría de los casos, la calidad, precisión y velocidad de la representación de la sombra 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 volúmenes de sombra, mapeo de sombras y trazado de rayos.
Crear una aplicación que tenga soporte de sombra OpenGL® requiere un conocimiento matemático y una comprensión profunda de cómo funciona OpenGL®. OpenGL® se usa en gran medida para crear escenas 3D que sean 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 su consumo de recursos y cualquier interrupción que pueda ser causada en la tubería gráfica utilizada para la reproducción. Por estas razones, el método más básico para crear una sombra, llamada rastreo de rayos, a menudo no es práctico para escenas 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 elLa escena 3D se dibuja a una superficie bidimensional (2D) para que se pueda mostrar, el proceso de trazado de rayos debe realizarse en cada píxel que se está dibujando y, especialmente con texturas u otras propiedades de la superficie, podría necesitar evaluar los mismos píxeles varias veces. Esto significa trazado de rayos en tiempo real, aunque con precisión rendería sombras, generalmente no es práctica.
Otro método que se puede usar para crear una sombra OpenGL® se conoce como mapeo de sombras. Este método utiliza la profundidad o el búfer de plantilla para representar una escena desde el ángulo de la fuente de luz como una serie de distancias desde la fuente de luz hasta las superficies de diferentes objetos dentro de la escena. Luego, la escena se presenta 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á encendido o sombreado. El uso del mapeo de sombras puede ser intensivo en la memoria y, con escenas que tienen más de una fuente de luz, pueden involucrar a MAking múltiples mapas desde múltiples ángulos.
Los volúmenes de sombras son una forma de crear una sombra OpenGL® que sea más precisa que otros métodos, pero presenta sus propios problemas. Un volumen de sombra esencialmente es una pieza de geometría invisible en una escena que se expande desde la superficie encendida de un objeto lejos de la fuente de luz. Este volumen se puede verificar contra otros objetos para ver si están cayendo en la sombra de la superficie desde la cual se originó el volumen. Este procedimiento puede ser muy complejo y, en última instancia, crear artefactos visuales cuando se optimiza para la velocidad.
.