Partilhar via


Técnicas comuns para melhorar os mapas de profundidade de sombra

Os mapas de sombra, introduzidos pela primeira vez em 1978, são uma técnica comum para adicionar sombras aos jogos. Três décadas depois, apesar dos avanços em hardware e software, os artefatos de sombreamento — ou seja, bordas cintilantes, aliasing de perspetiva e outros problemas de precisão — persistem.

Este artigo técnico fornece uma visão geral de alguns algoritmos de mapa de profundidade de sombra comuns e artefatos comuns, e explica várias técnicas — variando em dificuldade do básico ao intermediário — que podem ser usadas para aumentar a qualidade dos mapas de sombra padrão. Adicionar mapas de sombra básicos a um título normalmente é simples, mas entender as nuances dos artefatos de sombra pode ser um desafio. Este artigo técnico foi escrito para o desenvolvedor gráfico intermediário que implementou sombras, mas não entende completamente por que artefatos específicos aparecem e não tem certeza de como contorná-los.

Selecionar as técnicas corretas para mitigar artefatos específicos não é trivial. Quando as deficiências do mapa de sombra são abordadas, a diferença na qualidade pode ser impressionante (Figura 1). A implementação correta dessas técnicas melhora drasticamente as sombras padrão. As técnicas explicadas neste artigo são implementadas no exemplo CascadedShadowMaps11 no SDK do DirectX.

Figura 1. Sombras com artefatos severos (esquerda) e sombras após a implementação das técnicas descritas neste artigo (direita)

sombras com artefatos severos (esquerda) e sombras depois de implementar as técnicas descritas neste artigo (direita)

Revisão de mapas de profundidade de sombra

O algoritmo de mapa de profundidade de sombra é um algoritmo de duas passagens. A primeira passagem gera um mapa de profundidade no espaço de luz. Na segunda passagem, este mapa é usado para comparar a profundidade de cada pixel no espaço de luz com a profundidade correspondente no mapa de profundidade do espaço de luz.

Figura 2. Partes-chave de uma cena de sombra

partes fundamentais de uma cena de sombra

Passe 1

A cena é mostrada na Figura 2. Na primeira passagem (Figura 3), a geometria é transformada em um buffer de profundidade do ponto de vista da luz. Mais especificamente, o sombreador de vértice transforma a geometria em espaço de visão de luz.

O resultado final desta primeira passagem é um buffer de profundidade contendo as informações de profundidade da cena do ponto de vista da luz. Isso agora pode ser usado no passo 2 para determinar quais pixels são ocluídos da luz.

Figura 3. Primeira passagem do mapeamento de sombra básico

primeira passagem do mapeamento básico de sombras

Passe 2

Na segunda passagem (Figura 4), o sombreador de vértice transforma cada vértice duas vezes. Cada vértice é transformado no espaço de visão da câmera e passado para o sombreador de pixel como a posição. Cada vértice também é transformado pela matriz de visão-projeção-textura da luz e passado para o sombreador de pixel como uma coordenada de textura. A matriz vista-projeção-textura é a mesma matriz usada para renderizar a cena no passo 1 com uma transformação adicional. É uma transformação que escala e traduz os pontos do espaço de visão (–1 a 1 em X e Y) para o espaço de textura (0 a 1 em X e 1 a 0 em Y).

O sombreador de pixel recebe a posição interpolada e as coordenadas de textura interpoladas. Tudo o que é necessário para realizar o teste de profundidade está agora nesta coordenada de textura. O teste de profundidade agora pode ser realizado indexando o buffer de profundidade da primeira passagem com as coordenadas de textura X e Y e comparando o valor de profundidade resultante com a coordenada de textura Z.

Figura 4. Segunda passagem do mapeamento de sombra básico

segunda passagem do mapeamento básico de sombras

Artefatos do mapa de sombra

O algoritmo de mapa de profundidade de sombra é o algoritmo de sombreamento em tempo real mais utilizado, mas ainda produz vários artefatos que exigem mitigação. Os tipos de artefatos que podem ocorrer são resumidos a seguir.

Alias de perspetiva

O aliasing de perspetiva, um artefato comum, é mostrado na Figura 5. Ocorre quando o mapeamento de pixels no espaço de visualização para texels no mapa de sombra não é uma proporção um-para-um. Isso ocorre porque os pixels próximos ao plano próximo estão mais próximos uns dos outros e exigem uma resolução de mapa de sombra mais alta.

A Figura 6 mostra um mapa de sombra e um frustum de visualização. Perto do olho, os pixels estão mais próximos, e muitos pixels mapeiam para os mesmos texels sombra. Os pixels pelo plano distante estão espalhados, reduzindo assim o aliasing de perspetiva.

Figura 5. Aliasing de alta perspetiva (esquerda) versus aliasing de baixa perspetiva (direita)

aliasing de alta perspetiva (esquerda) versus aliasing de baixa perspetiva (direita)

Para a imagem à esquerda, o aliasing de perspetiva é maior; muitos pixels de espaço ocular mapeiam para os mesmos texels de mapa de sombra. Na imagem à direita, o aliasing de perspetiva é baixo porque há um mapeamento de 1:1 entre os pixels do espaço-olho e os texels do mapa de sombra.

Figura 6. Ver frustum com mapa de sombra

ver frustum com mapa de sombra

Pixels claros no plano distante representam aliasing de baixa perspetiva e pixels escuros no plano próximo representam aliasing de alta perspetiva.

A resolução do mapa de sombra também pode ser muito alta. Embora uma resolução mais alta seja menos percetível, ela pode resultar em pequenos objetos, como fios telefônicos, que não projetam sombras. Além disso, ter uma resolução muito alta pode causar sérios problemas de desempenho devido aos padrões de acesso de textura.

Os mapas de sombra de perspetiva (PSMs) e os mapas de sombra de perspetiva de espaço de luz (LSPSMs) tentam abordar o aliasing de perspetiva inclinando a matriz de projeção da luz para colocar mais texels perto do olho onde eles são necessários. Infelizmente, nenhuma das técnicas é capaz de resolver o aliasing de perspetiva. A parametrização da transformação necessária para mapear pixels do espaço-olho para texels no mapa de sombra não pode ser limitada por uma inclinação linear. É necessária uma parametrização logarítmica. Os PSMs colocam muitos detalhes perto do olho, fazendo com que sombras distantes sejam de baixa qualidade ou até desapareçam. Os LSPSMs fazem um trabalho melhor em encontrar um meio termo entre aumentar a resolução perto do olho e deixar detalhes suficientes para objetos distantes. Ambas as técnicas degeneram em sombras ortográficas em algumas configurações de cena. Essa degeneração pode ser combatida renderizando um mapa de sombra separado para cada face do frustum de visão, embora isso seja caro. Os mapas de sombra de perspetiva logarítmica (LogPSMs) também renderizam um mapa separado por face do frustum de visualização. Esta técnica usa rasterização não linear para colocar mais texels perto do olho. O hardware de classe D3D10 e D3D11 não suporta rasterização não linear. Para obter mais informações sobre essas técnicas e algoritmos, consulte a seção Referências.

Os mapas de sombra em cascata (CSMs) são a técnica mais popular para lidar com alias de perspetiva. Embora os CSMs possam ser combinados com PSMs e LSPSMs, é desnecessário. O uso de CSMs para corrigir erros de aliasing de perspetiva é abordado no artigo complementar, Mapas de sombra em cascata.

Aliasing projetivo

O aliasing projetivo é mais difícil de mostrar do que o aliasing de perspetiva. As sombras distendidas destacadas na Figura 7 demonstram erros de aliasing projetivo. O aliasing projetivo ocorre quando o mapeamento entre texels no espaço da câmera para texels no espaço de luz não é uma relação um-para-um; Isto é devido à orientação da geometria em relação à câmera de luz. O aliasing projetivo ocorre quando o plano tangente da geometria se torna paralelo aos raios de luz.

Figura 7. Aliasing de alta projeção versus aliasing de baixa projeção

aliasing de alta projeção versus aliasing de baixa projeção

As técnicas usadas para aliviar erros de aliasing de perspetiva também atenuam o aliasing projetivo. O aliasing projetivo ocorre quando a superfície normal é ortogonal à luz; Estas superfícies devem receber menos luz com base em equações de iluminação difusas.

Acne sombra e Self-Shadowing errônea

Shadow acne (Figura 8), um termo sinônimo de auto-sombreamento errôneo, ocorre quando o mapa de sombra quantifica a profundidade sobre um texel inteiro. Quando o sombreador compara uma profundidade real com esse valor, é tão provável que ele seja auto-sombreado quanto que seja dessombreado.

Outra razão para a acne de sombra é que o texel no espaço de luz está tão perto da profundidade do texel correspondente no mapa de profundidade que erros de precisão fazem com que o teste de profundidade falhe erroneamente. Uma razão para essa diferença de precisão é que o mapa de profundidade foi calculado pelo hardware de rasterização de função fixa, enquanto a profundidade que está sendo comparada foi calculada pelo sombreador. O aliasing projetivo também pode causar acne sombra.

Figura 8. Artefato de acne sombra

artefato de acne sombra

Como mostrado na imagem à esquerda, alguns dos pixels falharam no teste de profundidade e criaram artefatos salpicados e padrões de moiré. A fim de reduzir o auto-sombreamento errôneo, os limites no plano próximo e no plano distante para o frustum de visão do espaço luminoso devem ser calculados o mais rigorosamente possível. O viés de profundidade baseado em escala de inclinação e outros tipos de viés são outras soluções usadas para mitigar a acne sombra.

Peter Panning

O termo Peter Panning deriva seu nome de um personagem de livro infantil cuja sombra se desprendeu e que podia voar. Esse artefato faz com que objetos com sombras ausentes pareçam estar separados e flutuar acima da superfície (Figura 9).

Figura 9. Artefato Peter Panning

Artefato de garimpo de Peter

Na imagem à esquerda, a sombra é separada do objeto, criando um efeito flutuante.

Uma técnica para remover a acne superficial é adicionar algum valor à posição do pixel no espaço de luz; Isso é chamado de adição de um deslocamento de profundidade. Peter Panning resulta quando o deslocamento de profundidade usado é muito grande. Neste caso, o deslocamento de profundidade faz com que o teste de profundidade passe erroneamente. Como a acne sombra, Peter Panning é agravado quando há precisão insuficiente no tampão de profundidade. Calcular apertados perto de aviões e aviões distantes também ajuda a evitar Peter Panning.

Técnicas para melhorar mapas de sombra

Adicionar sombras a um título é um processo. O primeiro passo é fazer com que os mapas de sombra básicos funcionem. O segundo é garantir que todos os cálculos básicos sejam feitos da melhor forma: frusta se encaixa o mais firmemente possível, planos próximos/distantes se encaixam firmemente, viés de inclinação é usado, e assim por diante. Uma vez que as sombras básicas são ativadas e parecem tão boas quanto possível, o desenvolvedor tem uma ideia melhor de quais algoritmos são necessários para obter as sombras com fidelidade suficiente. Dicas básicas que podem ser necessárias para obter mapas de sombra básicos olhando para o seu melhor são dadas nesta seção.

Slope-Scale Viés de profundidade

Como mencionado anteriormente, o auto-sombreamento pode levar à acne sombra. Adicionar muito preconceito pode resultar em Peter Panning. Além disso, polígonos com inclinações íngremes (em relação à luz) sofrem mais de aliasing projetivo do que polígonos com inclinações rasas (em relação à luz). Devido a isso, cada valor de mapa de profundidade pode precisar de um deslocamento diferente, dependendo da inclinação do polígono em relação à luz.

O hardware Direct3D 10 tem a capacidade de enviesar um polígono com base na sua inclinação em relação à direção de visualização. Isso tem o efeito de aplicar um grande viés a um polígono que é visto de ponta para a direção da luz, mas não aplicar qualquer viés a um polígono voltado para a luz diretamente. A Figura 10 ilustra como dois pixels vizinhos podem alternar entre sombreados e não sombreados ao testar a mesma inclinação imparcial.

Figura 10. Viés de profundidade dimensionado de inclinação em comparação com profundidade imparcial

inclinação escalonou o viés de profundidade em comparação com a profundidade imparcial

Calculando uma projeção apertada

Ajustar firmemente a projeção da luz ao frustum de visão aumenta a cobertura do mapa de sombra. A Figura 11 ilustra que o uso de uma projeção arbitrária, ou o ajuste da projeção aos limites da cena, resulta em um aliasing de perspetiva mais alto.

Figura 11. Frustum de sombra arbitrário e frustum de sombra ajustado à cena

frustum de sombra arbitrário e frustum de sombra se encaixam em cena

A vista é do ponto de vista da luz. O trapézio representa o frustum da câmara de visão. A grade desenhada sobre a imagem representa o mapa de sombra. A imagem à direita mostra que o mesmo mapa de sombra de resolução cria mais cobertura texel quando é ajustado mais firmemente à cena.

A Figura 12 ilustra os frustums que estão corretamente ajustados. Para calcular a projeção, os oito pontos que compõem o frustum de visão são transformados em espaço de luz. Em seguida, os valores mínimo e máximo em X e Y são encontrados. Estes valores constituem os limites para uma projeção ortográfica.

Figura 12. Ajuste de projeção de sombra para visualizar o frustum

projeção de sombra ajustada para visualizar o frustum

Também é possível prender o frustum à cena AABB para obter um limite mais apertado. Isso não é aconselhável em todos os casos, porque isso pode alterar o tamanho da projeção da câmera de luz de quadro para quadro. Muitas técnicas, como as descritas na seção Movendo a luz Texel-Sized incrementos, dão melhores resultados quando o tamanho da projeção da luz permanece constante em cada quadro.

Calculando o plano próximo e o plano distante

O plano próximo e o plano distante são as peças finais necessárias para calcular a matriz de projeção. Quanto mais próximos estiverem os planos, mais precisos serão os valores no buffer de profundidade.

O buffer de profundidade pode ser de 16 bits, 24 bits ou 32 bits, com valores entre 0 e 1. Geralmente, os buffers de profundidade são ponto fixo, com os valores próximos ao plano próximo agrupados mais estreitamente do que os valores próximos ao plano distante. O grau de precisão disponível para o tampão de profundidade é determinado pela relação entre o plano próximo e o plano distante. Usar o plano de perto/longe mais apertado possível poderia permitir o uso de um buffer de profundidade de 16 bits. Um buffer de profundidade de 16 bits pode reduzir o uso de memória enquanto aumenta a velocidade de processamento.

AABB-Based Avião Próximo e Avião Distante

Uma maneira fácil e ingênua de calcular o plano próximo e o plano distante é transformar o volume delimitador da cena em espaço de luz. O menor valor de coordenada Z é o plano próximo e o maior valor de coordenada Z é o plano distante. Para muitas configurações da cena e da luz, esta abordagem é suficiente. O pior cenário, no entanto, pode resultar em uma perda significativa de precisão no buffer de profundidade; A Figura 13 mostra esse cenário. Aqui, o alcance do plano próximo ao plano distante é quatro vezes maior do que o necessário.

O frustum de visão na Figura 13 foi propositadamente escolhido para ser pequeno. Um pequeno frustum de visão é mostrado em uma cena muito grande que consiste em pilares que se estendem para fora da câmera de visão. Usar o Scene AABB para os planos próximos e distantes não é o ideal. O algoritmo CSM descrito no Cascaded Shadow Maps artigo técnico deve calcular planos próximos e distantes para frustums muito pequenos.

Figura 13. Aviões próximos e distantes baseados em Scene AABB

aviões próximos e distantes com base na cena aabb

Frustum-Based Avião Próximo e Avião Distante

Outra técnica para calcular os planos próximos e distantes é transformar o frustum em espaço leve e usar os valores mínimos e máximos em Z como os planos próximos e distantes, respectivamente. A Figura 14 ilustra os dois problemas desta abordagem. Primeiro, o cálculo é muito conservador, como mostrado quando o frustum se estende além da geometria da cena. Em segundo lugar, o plano próximo pode ser muito apertado, fazendo com que rodízios de sombra sejam cortados.

Figura 14. Planos próximos e distantes baseados apenas em frustum de visão

aviões próximos e distantes baseados apenas na visão frustum

Frustum leve cruzado com cena para calcular aviões próximos e distantes

A maneira correta de calcular os planos próximos e distantes é mostrada na Figura 15. Quatro dos planos do frustum luminoso ortográfico foram calculados utilizando o mínimo e o máximo das coordenadas X e Y do frustum de visão no espaço luminoso. Os dois últimos planos do frustum de visão ortogonal são os planos próximos e distantes. Para encontrar esses planos, os limites da cena são cortados contra os quatro planos frustum leves conhecidos. Os menores e maiores valores Z do limite recém-cortado representam o plano próximo e o plano distante, respectivamente.

O código que executa essa operação está localizado no exemplo CascadedShadowMaps11. Os oito pontos que compõem a AABB do mundo são transformados em espaço de luz. Transformar os pontos em espaço de luz simplifica os testes de recorte. Os quatro planos conhecidos do frustum leve podem agora ser representados como linhas. As cenas que delimitam o volume no espaço de luz podem ser representadas como seis quadriláteros. Estes 6 quadriláteros podem então ser transformados em 12 triângulos para recorte baseado em triângulos. Os triângulos são cortados contra os planos conhecidos do frustum de visão (estas são linhas horizontais e verticais em X e Y no espaço de luz). Quando um ponto de interseção é encontrado em X e Y, o triângulo 3D é cortado nesse ponto. Os valores Z mínimos e máximos de todos os triângulos cortados são o plano próximo e o plano distante. O exemplo CascadedShadowMaps11 mostra como executar esse recorte na função ComputeNearAndFar.

Existem mais duas técnicas que poderiam ser usadas para calcular os planos próximos e distantes mais apertados possíveis. Essas técnicas não são mostradas no exemplo CascadedShadowMaps.

  • Planos próximos e distantes ainda mais apertados poderiam ser calculados cruzando uma hierarquia de uma cena ou objetos individuais em uma cena contra o frustum de luz. Isso seria computacionalmente mais complexo. Embora não ilustrado no exemplo CascadedShadowMaps11, esta pode ser uma técnica válida para alguns blocos.

  • O plano distante pode ser calculado tomando o mínimo de:

    • A maior profundidade da visão frustum no espaço de luz.
    • A maior profundidade da intersecção do frustum vista e da cena AABB.

Esta abordagem pode ser problemática quando usada com mapas de sombra em cascata, onde é possível indexar fora de um frustum de visualização. Neste caso, o mapa de sombra pode estar sem geometria.

Figura 15. Planos próximos e distantes baseados na intersecção dos quatro planos calculados do frustum de luz e na geometria delimitadora da cena

planos próximos e distantes com base na intersecção dos quatro planos calculados do frustum de luz e na geometria delimitadora da cena

Movendo a luz em incrementos de Texel-Sized

Um artefato comum em mapas de sombra é o efeito de borda cintilante. À medida que a câmera se move, os pixels ao longo das bordas das sombras iluminam e escurecem. Isso não pode ser visto em imagens estáticas, mas é muito percetível e distrai em tempo real. A Figura 16 destaca esse problema e a Figura 17 mostra como as bordas de sombra devem parecer.

O erro de borda cintilante ocorre porque a matriz de projeção de luz está sendo recalculada toda vez que a câmera se move. Isso cria diferenças sutis nos mapas de sombra gerados. Todos os fatores a seguir podem influenciar a matriz criada para vincular a cena.

  • Tamanho do frustum de vista
  • Orientação do frustum de visão
  • Localização da luz
  • Localização da câmara

Toda vez que essa matriz muda, as bordas das sombras podem mudar.

Figura 16. Bordas de sombra cintilantes

bordas de sombra cintilantes

Os pixels ao longo da borda da sombra entram e saem da sombra à medida que a câmera se move da esquerda para a direita.

Figura 17. Sombras sem bordas cintilantes

sombras sem bordas cintilantes

As bordas de sombra permanecem constantes à medida que a câmera se move da esquerda para a direita.

Para luzes direcionais, a solução para este problema é arredondar o valor mínimo/máximo em X e Y (que compõem os limites de projeção ortográfica) para incrementos de tamanho de pixel. Isso pode ser feito com uma operação de divisão, uma operação de piso e uma multiplicação.

        vLightCameraOrthographicMin /= vWorldUnitsPerTexel;
        vLightCameraOrthographicMin = XMVectorFloor( vLightCameraOrthographicMin );
        vLightCameraOrthographicMin *= vWorldUnitsPerTexel;
        vLightCameraOrthographicMax /= vWorldUnitsPerTexel;
        vLightCameraOrthographicMax = XMVectorFloor( vLightCameraOrthographicMax );
        vLightCameraOrthographicMax *= vWorldUnitsPerTexel;

O valor vWorldUnitsPerTexel é calculado tomando um limite do frustum de exibição e dividindo pelo tamanho do buffer.

        FLOAT fWorldUnitsPerTexel = fCascadeBound /
        (float)m_CopyOfCascadeConfig.m_iBufferSize;
        vWorldUnitsPerTexel = XMVectorSet( fWorldUnitsPerTexel, fWorldUnitsPerTexel,                            0.0f, 0.0f );

Delimitar o tamanho máximo do frustum de visão resulta em um ajuste mais solto para a projeção ortográfica.

É importante notar que a textura é 1 pixel maior em largura e altura ao usar esta técnica. Isso impede que as coordenadas de sombra sejam indexadas fora do mapa de sombra.

Face Traseira e Face Frontal

Os mapas de sombra devem ser renderizados com o abate de back-face padrão, um processo que ignora a rasterização de objetos que o espectador não pode ver e acelera a renderização da cena. Outra opção comum é renderizar mapas de sombra com o abate frontal habilitado, o que significa que os objetos voltados para o visualizador são eliminados. O argumento para isso é que ele ajuda com o autosombreamento, pois a geometria que compõe a parte de trás dos objetos é ligeiramente deslocada. Esta ideia levanta dois problemas.

  • Qualquer objeto com geometria imprópria da face frontal ou traseira causa artefatos no mapa de sombras. No entanto, ter uma geometria frontal ou traseira incorreta causará outros problemas, por isso pode ser seguro assumir que a geometria da face frontal e da face traseira é feita corretamente. Pode ser impraticável criar faces traseiras para geometria baseada em sprite, como folhagem.
  • Peter Panning e lacunas de sombra perto da base de objetos como paredes são mais prováveis de ocorrer porque a disparidade de profundidade da sombra é muito pequena.

Mapa de sombras – geometria amigável

Criar geometria que funcione bem em mapas de sombra permite mais flexibilidade ao combater artefatos como Peter Panning e acne de sombra.

Arestas duras são problemáticas para o autosombreamento. A disparidade de profundidade perto da ponta da borda é muito pequena. Mesmo um pequeno deslocamento pode fazer com que os objetos percam suas sombras (Figura 18).

Figura 18. Arestas afiadas causam artefatos decorrentes de disparidade de baixa profundidade com deslocamentos

arestas afiadas causam artefatos decorrentes da disparidade de baixa profundidade com compensações

Objetos estreitos, como paredes, devem ter costas, mesmo que nunca sejam visíveis. Isso aumentará a disparidade de profundidade.

Também é importante certificar-se de que a direção que a geometria está voltada está correta; ou seja, o exterior de um objeto deve estar virado para trás e o interior de um objeto deve estar virado para a frente. Isso é importante para renderizar com o abate de back-face habilitado, bem como para combater os efeitos do viés de profundidade.

Mapas de sombra em cascata

Consulte também Mapas de sombra em cascatae o aplicativo de exemplo CascadedShadowMaps11. O exemplo demonstra o algoritmo de mapa de sombra em cascata (CSM), bem como várias técnicas que podem ser usadas para fazer uso eficiente do mapa de sombra.

Você pode encontrar o exemplo no DirectX Software Development Kit (SDK). Ou você pode realizar uma pesquisa na web para encontrá-lo no GitHub.

Resumo

As técnicas descritas neste artigo podem ser usadas para aumentar a qualidade dos mapas de sombra padrão. O próximo passo é analisar técnicas que podem funcionar bem com mapas de sombra padrão. Os CSMs são recomendados como uma técnica superior para combater o aliasing de perspetiva. A filtragem mais próxima da porcentagem ou os mapas de sombra de variância podem ser usados para suavizar as bordas da sombra. Consulte o artigo técnico Cascaded Shadow Maps para obter mais informações.

Donnelly, W., e Lauritzen, A. Variance Shadow Maps. Simpósio sobre Gráficos 3D Interativos, Atas do Simpósio de 2006 sobre Gráficos e Jogos 3D Interativos. 2006, pp. 161-165.

Engel, Woflgang F. Secção 4. Mapas de sombra em cascata. ShaderX5, Técnicas Avançadas de Renderização, Wolfgang F. Engel, Ed. Charles River Media, Boston, Massachusetts. 2006. pp. 197-206.

Stamminger, Marc e Drettakis, George. Mapas de sombra em perspetiva. Conferência Internacional sobre Computação Gráfica e Técnicas Interativas, Atas da 29th Annual Conference on Computer Graphics and Interactive Techniques. 2002, pp. 557-562.

Wimmer, M., Scherzer, D., e Purgathofer, W. Light Space Perspetive Shadow Maps. Simpósio Eurographics sobre Renderização. 2004. Revisado em 10 de junho de 2005. Technische Universität Wien.