O que é uma sombra OpenGL®?
Uma Sombra Open Graphics Library® (OpenGL®) é uma aproximação visual em uma cena tridimensional (3D) OpenGL® de como uma sombra seria lançada na vida real sob condições de iluminação semelhantes. As sombras são um recurso visual complexo a ser implementado no OpenGL®, em grande parte porque não há suporte inato ao lançar sombras em uma cena. Em vez disso, existem uma variedade de técnicas que podem ser usadas para criar sombras a partir dos objetos e geometria dentro de uma cena usando várias ferramentas, como os vários buffers disponíveis, shaders e, em alguns casos, extensões que fornecem acesso a recursos especiais em determinadas placas gráficas. Na maioria dos casos, a qualidade, a precisão e a velocidade da renderização do OpenGL® Shadow estão diretamente relacionadas ao poder de processamento e à memória do hardware gráfico presente em um computador ou dispositivo. Alguns dos métodos mais populares de implementação de uma sombra OpenGL® incluem volumes de sombra, mapeamento de sombras e rastreamento de raios.
Criar um aplicativo com suporte de sombra OpenGL® requer conhecimento matemático e um profundo entendimento de como o OpenGL® funciona. O OpenGL® é amplamente usado para criar cenas 3D dinâmicas e renderizadas em tempo real; portanto, os algoritmos usados para criar sombras devem não apenas ser otimizados para velocidade, mas também devem ser cuidadosamente medidos para o consumo de recursos e quaisquer interrupções que possam ser causadas no pipeline de gráficos usados para render. Por esses motivos, o método mais básico de criar uma sombra, chamado Ray Rasting, geralmente é impraticável para cenas 3D completas, porque pode levar muito tempo.
O rastreamento de raios segue basicamente uma linha imaginária, ou raio, desde o plano de visualização ou a posição da câmera através de uma cena até a superfície de um objeto e calcula a cor da superfície com base na posição de uma ou mais fontes de luz e outros fatores. Durante o processo de rasterização, onde oA cena 3D é atraída para uma superfície bidimensional (2D) para que possa ser exibida, o processo de rastreamento de raios deve ser realizado em todos os pixels que estão sendo desenhados e, especialmente com texturas ou outras propriedades de superfície, podem precisar avaliar os mesmos pixels várias vezes. Isso significa rastreamento de raios em tempo real, embora isso tornasse sombras com precisão, geralmente não é prático.Outro método que pode ser usado para criar uma sombra OpenGL® é conhecido como mapeamento de sombras. Este método usa o buffer de profundidade ou estêncil para renderizar uma cena do ângulo da fonte de luz como uma série de distâncias da fonte de luz às superfícies de diferentes objetos na cena. A cena é então renderizada pela segunda vez a partir do ângulo de visualização correto, verificando se cada pixel se enquadra em uma certa faixa de distância dentro do buffer, indicando se o pixel está iluminado ou sombreado. Usar o mapeamento de sombras pode ser intensivo em memória e, com cenas que têm mais de uma fonte de luz, podem envolver MAking vários mapas de vários ângulos.
Os volumes de sombra são uma maneira de criar uma sombra OpenGL® mais precisa do que alguns outros métodos, mas apresenta seus próprios problemas. Um volume de sombra é essencialmente uma peça de geometria invisível em uma cena que se expande da superfície iluminada de um objeto para longe da fonte de luz. Este volume pode ser verificado contra outros objetos para ver se eles estão caindo na sombra da superfície da qual o volume se originou. Este procedimento pode ser muito complexo e, finalmente, criar artefatos visuais quando otimizado para velocidade.