A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Shadow Mapping.

Apresentações semelhantes


Apresentação em tema: "Shadow Mapping."— Transcrição da apresentação:

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 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 Soluções
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; } ... 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, diminui aliasing 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 Perspective shadow map
Transformação da fonte de luz Luz direcional: {x,y,z,0} Luz pontual: {x,y,z,1} Transformação perspectiva PP x z (f+n)/(f-n) f 1 -1

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


Carregar ppt "Shadow Mapping."

Apresentações semelhantes


Anúncios Google