1 / 19

Shadow Mapping

Shadow Mapping. Sombras em superfícies curvas. Shadow map Aliasing Suporte em hardware Mais eficiente Shadow volume “Hard-shadow” Ideal para sombras em regiões grandes. Shadow map. Algoritmo “Renderiza” cena do ponto de vista da fonte de luz Usa Z-buffer como textura: shadow map

Download Presentation

Shadow Mapping

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Shadow Mapping

  2. Sombras em superfícies curvas • Shadow map • Aliasing • Suporte em hardware • Mais eficiente • Shadow volume • “Hard-shadow” • Ideal para sombras em regiões grandes

  3. Shadow map • Algoritmo • “Renderiza” cena do ponto de vista da fonte de luz • Usa Z-buffer como textura: shadow map • Texel: distância da fonte ao objeto mais próximo • Renderiza cena aplicando shadow map • Textura projetiva do ponto de vista da fonte de luz • Teste de sombra • If r <= texel then “iluminado” else “sombra” end texel texel = r r

  4. Shadow map Suporte em hardware • Com Cg, se textura é um shadow map • Função tex2Dproj • Valor de retorno {c,c,c,1}, com c valendo zero ou um • Pode-se aplicar filtro: 0 <= c <= 1 • Diminui aliasing • Pode-se programar filtros melhores • Percentage-closer filter • Técnicas de dithering 0 1 c = 0.75 1 1

  5. Shadow map • Shadow map não depende do observador • Sempre válido para objetos e fontes estáticos • Idéias • Reaproveitamento do shadow map • Explorar coerência quadro a quadro • Dois shadow maps • Um para objetos estáticos • Um para objetos dinâmicos (atualizada frequentemente)

  6. Shadow map • Problemas • Self-shadows • Imprecisão numérica • r  texel • Soluções • Melhorar ajuste do “volume de visão” da fonte de luz • Usar offset na geração do mapa • Usar mapa de ID em vez de mapa de profundidade • Gerar mapa com back-faces

  7. Aliasing • Percentage Closer Filter • Grid regular • “Banding effects” for (int i=0; i<NSAMPLES; i++) { sm.xy = offsets[i] * fsize + smPos; shadow += tex2DProj(shadowMap,sm) / NSAMPLES; }

  8. Eliminando “banding effects” • Jittered grid • Domínio circular • Preservando áreas • x = x1/2 cos(2u) • y = y1/2 cos(2u)

  9. Eliminando “banding effects” • Múltiplos offsets • Pixels vizinhos com offsets diferentes • Textura 3D de RGBA • Dois offsets (2 pares x,y) por texel t = frag.y r = offset s = frag.x

  10. Melhorando desempenho • Uso de “branching” no shader • Menos amostras para determinar penumbra • Fragmentos próximos com mesmo branching -- Testa se em penumbra for (int i=0; i<4; i++) { vec4 offset = tex3D(jitter,jcoord); jcoord.z += 1.0 / SAMPLES_COUNT_DIV2; sm.xy = offset.xy * fsize + smPos; shadow += tex2DProj(shadowMap,sm) / 8; sm.xy = offset.zw * fsize + smPos; shadow += tex2DProj(shadowMap,sm) / 8; } ... if ((shadow-1)*shadow != 0) { -- Em penumbra }

  11. Melhorando desempenho • Se mapa gerado com “back face” • Não incorpora erros na imagem, mas... • “Self-shadow” degrada desempenho • Correção: if ((shadow-1) * shadow * NdotL != 0) { -- Em penumbra }

  12. Perspective shadow map

  13. Perspective shadow map • Problemas de aliasing • Projeção de visualização pode expandir sombra • Enquanto no mapa aparece pequeno ds • ds : limitado pela resolução do mapa • rs/ri : se pequeno e constante, diminuialiasing de perspectiva • βi/βs : difícil eliminação, pois a luz pode tangenciar a superfície (aliasing de perspectiva) βs di βi ri

  14. Perspective shadow map • Mapa de sombras com • Resolução alta para objetos próximos • Resolução baixa para objetos distantes • Objetivo • Diminuir aliasing de perspectiva • Idéia • Gerar mapa no espaço após perspectiva

  15. Perspective shadow map • Exemplo: árvores vistas da esquerda • Espaço do olho • Árvores de mesmo tamanho • Espaço após perspectiva • Árvores próximas maiores

  16. Perspective shadow map • Geração do mapa • Transforma cena para espaço de clip • “Renderiza” mapa com fonte de luz transformada • No exemplo anterior: rs/ri = cte

  17. PP -1 x 1 f (f+n)/(f-n) x z z Perspective shadow map • Transformação da fonte de luz • Luz direcional: {x,y,z,0} • Luz pontual: {x,y,z,1} • Transformação perspectiva

  18. Perspective shadow map • Transformação perspectiva • Ponto no infinito • Ponto finito com z = (f+n)/(f-n) • Ponto finito • Pode se transformar em ponto no infinito • Se no plano z=0 • Transformação da fonte de luz • Luz direcional • Permanece direcional se pw=0 • Acontece se: {x,y,0,0}  {px,py,0,0} • Luz local • Pode se transformar em luz direcional • Luz no plano do observador • Melhor ganho do PSM

  19. Perspective shadow map • Self-shadow é acentuado • PSM depende da posição do observador • Frustum da fonte pode cruzar plano z=0 • Cruza infinito após transformação • Frustum de interesse • M = convex hull (V + l) • M contém todos os raios de luz que interceptam objetos da cena • H = M  BV  L • Se H cruza plano z=0 • Afasta observador para gerar PSM • Tende a se aproximar do PS

More Related