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

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

Renderização em Tempo Real

Apresentações semelhantes


Apresentação em tema: "Renderização em Tempo Real"— Transcrição da apresentação:

1 Renderização em Tempo Real
Mapeamento de Sombras (Shadow Mapping) Vitor Barata Ribeiro Blanco Barroso Departamento de Informática - PUC-Rio Setembro de 2007

2 Programa Introdução Pré-requisitos Mapeamento de sombras
Importância das sombras Exemplos Pré-requisitos Transformação perspectiva Textura projetiva Mapeamento de sombras Idéias iniciais Algoritmo Vantagens e desvantagens Problemas, soluções e melhorias Projeção traseira Auto-sombreamento Serrilhamento e filtragem Técnicas avançadas

3 Importância das Sombras
Esclarecimento das relações espaciais entre os objetos Realismo Beleza estética Jogos: Atmosfera e informações adicionais Visualização científica: Facilidade de compreensão do modelo

4 Sombras abruptas e suaves
Sombras Abruptas (hard shadows) Fonte de luz pontual Sombras suaves (soft shadows) Fonte de luz com área Duas regiões: umbra e penumbra

5 Exemplo sem sombras

6 Exemplo com sombras

7

8

9 Exemplo: Luxor Jr. (SM)

10 Exemplo: Doom 3 (SV)

11 Exemplo: Bioshock (SM)

12 Programa Introdução Pré-requisitos Mapeamento de sombras
Importância das sombras Exemplos Pré-requisitos Transformação perspectiva Textura projetiva Mapeamento de sombras Idéias iniciais Algoritmo Vantagens e desvantagens Problemas, soluções e melhorias Projeção traseira Auto-sombreamento Serrilhamento e filtragem Técnicas avançadas

13 Transformação Perspetiva
Frustum de visão:

14 Transformação Perspectiva
Resolução em (x,y,z): Quanto mais distante, menor a resolução! y1 y1’ P y2’ y2 y1’ << y2’ y1 = y2

15 Projective Texture Mapping
Textura Projetiva Projeção de imagens sobre superfícies Analogia: projetor de slides Projective Texture Mapping Cass Everitt - nVidia

16 Textura Projetiva Geração automática de coordenadas
Combinação linear (distância a um plano) Espaço do objeto Equação do plano: [a,b,c,d] T Coordenada gerada: s = axobj+byobj+czobj+dwobj Espaço do olho Plano transformado: [a’,b’,c’,d’] T = (VM)-T [a,b,c,d] T Coordenada gerada: s = a’xeye+b’yeye+c’zeye+d’weye Transformação de coordenadas: [s’,t’,r’,q’]T = Mtex [s,t,r,q]T

17 Textura Projetiva Obtendo coordenadas projetadas:
Para visualização na tela: Para projeção em textura: M Vcam Pcam viewport Objeto Mundo Olho Clip Tela [-1..1] [0..size] M Vproj Pproj T½S½ Objeto Mundo Projetor Clip Tex [-1..1] [0..1]

18 Textura Projetiva Gerando coordenadas com o projetor no espaço do olho: [s’,t’,r’,q’]T = Mtex [xeye,yeye,zeye,weye]T Mtex = T½S½PpVpVc-1 Vc-1: inversa da matriz de visualização da câmera Vp: matriz de visualização do projetor Pp: matriz de projeção do projetor T½S½: transformação do espaço de clip para o da textura Mundo Objeto Olho Clip Tela Vc-1 Projetor Tex Vp Pp T½S½

19 Textura Projetiva Explorando a geração automática de coordenadas no espaço do olho: Planos como linhas da matriz identidade: ps =[1,0,0,0] => s = x pt =[0,1,0,0] => t = y pr =[0,0,1,0] => r = z Se a matriz modelview VM = I [s,t,r]T = [xeye,yeye,zeye]T Se VM = Vc As equações dos planos são multiplicadas por Vc-1 [s,t,r]T = Vc-1[xeye,yeye,zeye]T = [xobj,yobj,zobj]T Podemos usar Mtex = T½S½PpVp

20 Textura Projetiva Alternativa
As equações dos planos funcionam como linhas de uma matriz que transforma [xeye,yeye,zeye,weye]T Podemos considerar essa matriz já multiplicada por T = T½S½PpVp: ps =[T00,T01,T02,T03] pt =[T10,T11,T12,T13] pr =[T20,T21,T22,T23] Finalmente, mantemos Mtex = I

21 Programa Introdução Pré-requisitos Mapeamento de sombras
Importância das sombras Exemplos Pré-requisitos Transformação perspectiva Textura projetiva Mapeamento de sombras Idéias iniciais Algoritmo Vantagens e desvantagens Problemas, soluções e melhorias Projeção traseira Auto-sombreamento Serrilhamento e filtragem Técnicas avançadas

22 Mapeamento de Sombras Idéias iniciais: Problema
Se nos colocarmos no local da fonte de luz, toda a cena visível fica iluminada, sem sombras As superfícies iluminadas são, então, aquelas que podem ser “vistas pela fonte de luz” Considerando uma fonte tipo spot, poderíamos usar um “mapa de luz” como textura projetiva para causar o efeito de iluminação Problema A textura projetiva ignora obstáculos, além de ser projetada também para trás Apenas o primeiro obstáculo, aquele mais próximo da fonte de luz, deveria ser iluminado

23 Mapeamento de Sombras Algoritmo
Renderizar a cena vista pela fonte de luz Armazenar z-buffer em uma textura (mapa de sombras) Renderizar a cena vista pela câmera Transformar pixels para o espaço da luz (s,t,p,q) zmapa = acesso em s/q e t/q zpixel = p/q Fragmento iluminado se zpixel <= zmapa

24 Mapeamento de Sombras Passos
Cena inicial sem sombras Ponto-de-vista da fonte de luz Mapa de profundidades Mapa de sombras projetado Resultado do teste de z Cena final com sombras Fonte das imagens: Wikipedia

25 Suporte em Hardware Pipeline convencional:
glTexImage2D (GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, mapWidth, mapHeight, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL); // Filtering can be enabled on Nvidia, disabled otherwise glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // GL_LINEAR glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // GL_LINEAR //Enable shadow comparison glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE); //Shadow comparison should yield true (not in shadow) if r <= texture glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); //Shadow comparison should generate a LUMINANCE result (rgb = 0 or 1) glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE); //Clamp to avoid shadow replication glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderInLightOrNot) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);

26 Suporte em Hardware GLSL: CG:
Podem-se programar filtros (Percentage-Closer Filter, PCF) melhores que o padrão da Nvidia, além de outras técnicas avançadas // Shadow map sampler uniform sampler2DShadow ShadowMap; // Get Shadow result vec4 shadowTest = shadow2DProj(ShadowMap, gl_TexCoord[1]) tex2Dproj (sampler2D tex, float3 sq);

27 Vantagens e Desvantagens
Mapeamento de Sombras Vantagens: Simples de implementar Relativamente simples de integrar Não requer conhecimento da geometria da cena Suporte total em hardware Sombras suaves (soft shadows) como extensão direta Adequado a qualquer primitiva que marque o z-buffer Custo baixo e controlável com técnicas comuns de culling e LOD Desvantagens: Problema de auto-sombreamento incorreto Problema de serrilhamento (aliasing) acentuado Difícil estender para luzes pontuais onidirecionais

28 Vantagens e Desvantagens
Volumes de Sombras Vantagens: Ausência de serrilhamento, hard-shadows perfeitas Problema de auto-sombreamento facilmente tratável Estende-se naturalmente para fontes pontuais onidirecionais Desvantagens: Requer maior esforço de implementação e integração Requer análise da geometria da cena Custo pode ser alto na análise da geometria e na rasterização dos volumes de sombra Suporte em hardware apenas com geometry shaders em DX10 / OpenGL 2.1 Adequado apenas a primitivas poligonais, sem efeitos por pixel como displacement maps e alpha-test transparency.

29 Idéias adicionais O mapa de sombras tradicional não depende do observador Luzes e objetos estáticos: Reaproveitamento o mapa Explorar a coerência quadro-a-quadro Objetos dinâmicos: Usar um mapa de sombra para os objetos dinâmicos Usar outro mapa, ou mesmo uma técnica diferente, para os objetos estáticos

30 Programa Introdução Pré-requisitos Mapeamento de sombras
Importância das sombras Exemplos Pré-requisitos Transformação perspectiva Textura projetiva Mapeamento de sombras Idéias iniciais Algoritmo Vantagens e desvantagens Problemas, soluções e melhorias Projeção traseira Auto-sombreamento Serrilhamento e filtragem Técnicas Avançadas

31 Projeção reversa e Replicação
Replicação das sombras Pode ocorrer fora do espaço do mapa [0..1] Clamp, borda em sombra (spot) Clamp, borda iluminada (pontual e direcional) Projeção reversa Pode ocorrer se tratarmos luzes pontuais como spot para o mapeamento de sombras Utilizar textura 1D com 2 texels Geração automática de coordenadas À frente da luz: s < 0.5 Atrás da luz: s > 0.5 Combinar com multi-textura

32 Resolução do Mapa de Sombras
Tanto o mapa de sombras quanto a imagem final são representações amostradas da cena Volumes de visão conflitantes: Amostragem não-uniforme da transformação perspectiva Baixa amostragem do mapa longe da fonte de luz Necessária alta amostragem próximo à câmera Visão da câmera Visão da fonte Figura extraída de: C. Everitt, Shadow Mapping, NVidia Corporation

33 Auto-sombreamento incorreto

34 Auto-sombreamento incorreto
Origens do auto-sombreamento Precisão numérica Representação discreta e desalinhamento de amostras Pior caso: dueling frusta Solução básica: acrescentar um pequeno valor de bias aos valores armazenados no mapa

35 Auto-sombreamento incorreto
Acréscimo de deslocamento generalizado [Weiskopf03] zmapa = z1 + zbias(z1,z2) Bias constante: zbias = offset [Williams78] Second-depth: zbias = z2-z1 [Wang94] Midpoint: zbias = (z2–z1) / 2 [Woo92] Dual: zbias = min(zmid,zmax) [Weiskopf03] Bias constante requer ajuste caso-a-caso, mas é suficiente na maioria dos casos Second-depth restrito a sólidos fechados Gerar mapa com backfaces Dual produz ótimos resultados, mas usa duas passadas de geração

36 Auto-sombreamento incorreto
Outras idéias Melhorar o ajuste do volume de visão da fonte de luz à cena Forçar uma variação linear (não hiperbólica) nos valores de z do mapa Coordenada de textura + shader Ao invés de um mapa de profundidades, utilizar um mapa de IDs codificados em cores IDs por polígonos causa artefatos nas interfaces IDs por objetos impede que gerem sombras corretas sobre si próprios

37 Auto-sombreamento incorreto
Alinhamento de amostras Problema de reconstrução 2D Amostras do mapa de sombras? Amostras da câmera?

38 Alinhamento de Amostras
Interpolação do mapa de sombras não funciona bem

39 Alinhamento de Amostras
Reconstrução das amostras da câmera [Wang94] Considerar “amostras virtuais” da câmera sobre o plano tangente à superfície obter a equação do plano tangente com o ponto (vértice) e a normal (coordenada de textura) Calcular as coordenadas do ponto, sobre esse plano, que se alinha com a amostra do mapa (shader)

40 Serrilhamento e Filtragem

41 Percentage-Closer Filter (PCF)
Idéia: Utilizar diferentes amostras do mapa de sombras Realizar vários testes de sombra com resultado binário (0,1) Filtrar os resultados dos testes Núcleo: Espaço da imagem: amostras em pixels vizinhos Espaço do mapa: amostras em texels vizinhos

42 PCF 5x5 no espaço da imagem

43 PCF 5x5 no espaço do mapa

44 Aprimoramentos ao PCF Eliminação do efeito de faixas (banding)
Amostras com jitter (passado como textura) Quinas mais corretas, sem artefatos Núcleo circular com preservação de área Eficiência Amostragem adaptativa (amostras amarelas apenas quando necessário) Implementação descrita nos slides do Waldemar e no livro GPU Gems II

45 PCF 5x5 aprimorado com jitter

46 PCF não-adaptativo em baixa resolução

47 PCF adaptativo em baixa resolução
Artefatos surgem em mapas de baixa resolução devido ao grande núcleo utilizado para o filtro

48 PCF não-adaptativo em boa resolução

49 PCF adaptativo em boa resolução
Artefatos menos perceptíveis

50 Programa Introdução Pré-requisitos Mapeamento de sombras
Importância das sombras Exemplos Pré-requisitos Transformação perspectiva Textura projetiva Mapeamento de sombras Idéias iniciais Algoritmo Vantagens e desvantagens Problemas, soluções e melhorias Projeção traseira Auto-sombreamento Serrilhamento e filtragem Técnicas Avançadas

51 Técnicas Avançadas Filtragem
Mapas de Variância (VSM, 2006) Summed Area VSM (2007) Reparametrização Perspective Shadow Maps (PSM, 2002) Light-Space PSM (LiSPSM, 2004) Logarithmic Shadow Maps (LogSM, 2006) Particionamento Particionamento em profundidade ou Cascaded Shadow Maps Particionamento por faces Particionamento em ladrilhos Particionamento Adaptativo (2000) Queried Virtual Shadow Maps (2007) Interessados, peçam-me as referências por . Também acrescentarei aos slides assim que possível.

52 Mapas de Variância μ = E(z)  = E(z2) − E(z)2 Algoritmo:
Armazenar no mapa de sombras os valores de (z) e (z2) de cada amostra Filtrar as duas componentes por hardware e possivelmente em shaders Considera-se que as amostras de profundidades no interior do núcleo do filtro fazem parte de uma distribuição estatística Os valores filtrados podem ser encarados como os valores esperados E(z) e E(z2) Calcula-se a média e a variância da distribuição: μ = E(z)  = E(z2) − E(z)2

53 Mapas de Variância P(zmapa>=zpixel) <= pmax = 2 / [2 +(t−μ)2]
Algoritmo (continuação): Calcula-se, com a desigualdade de Cauchy, a probabilidade máxima de dado fragmento estar em luz: Usa-se essa probabilidade para multiplicar o valor da iluminação do fragmento Problema: vazamento de luz P(zmapa>=zpixel) <= pmax = 2 / [2 +(t−μ)2]

54 Reparametrização

55 Métrica de Serrilhamento
Consideramos o “erro de serrilhamento” como a razão entre as áreas de uma superfície vistas por um texel do mapa de sombras e por um pixel da imagem:

56 Métrica de Serrilhamento
Idealmente, queremos m=1 m > 1  serrilhamento m < 1  super-amostragem Dois tipos de serrilhamento Serrilhamento de perspectiva: wl/wc Serrilhamento de projeção: cos(θc)/cos(θl) Potencialmente ilimitado Difícil computar Menos notável Não tratado por técnicas de reparametrização Objetivo: minimizar o erro máximo em todo o campo de visão da câmera: L∞ = max( |wl/wc| )

57 Reparametrização Perspectiva
Idéia: deformar a cena de modo que objetos mais próximos da câmera apareçam com maior área no mapa de sombras Para a cena original, tudo se passa como se os texels do mapa tivessem seu tamanho alterado Baixíssimo custo, apenas calcular e multiplicar uma transformação à matriz de visualização da cena

58 Reparametrização Perspectiva Caso Ótimo
Luz incidindo perpendicularmente à direção de visualização PSM [Stamminger02]: LiSPSM [Wimmer04]: Tradicional: V = Volume de visão da câmera incluindo objetos oclusores externos (mostrar n, f, z, φ) P = Frustum associado à transformação perspectiva (n’, f’, z’, φ’) Eixo y = direção da luz (oposta a ela) Eixo z = plano de y e da direção de visualização Eixo x = completando sistema mão esquerda (levógiro) C = origem do sistema e centro de projeção da transformação P Plano xz paralelo ao mapa, coordenadas alinhadas com (s,t) respectivamente P ajustado a V de modo a ficar simétrico, com eixo coincidindo com z Posição de c ao longo da direção z é dada por n’, que não altera o plano near, mas a abertura de P

59 Reparametrização Perspectiva Efeito da Transformação
Luz incidindo perpendicularmente à direção de visualização PSM [Stamminger02]: LiSPSM [Wimmer04]: Tradicional:

60 Particionamento

61 Particionamento por Faces
Com luz e câmera paralelas, nenhuma reparametrização perspectiva é boa simultaneamente para A e C Idéia formalizada por Lloyd (2006): Gerar um mapa de sombras independente para cada face do volume de visão da câmera visto pela fonte Aplicar uma transformação perspectiva diferente a cada face

62 Particionamento em Profundidade
Lloyd (2006) mostra que o erro de serrilhamento é proporcional a (f/n) Podemos reduzir o erro máximo utilizando várias partições ao longo do eixo z O erro é mínimo com partições semelhantes, ou seja, que tenham a mesma razão (f/n)

63 Exemplo Incidência Perpendicular
Mapeamento Tradicional

64 Exemplo Incidência Perpendicular
Reparametrização LiSPSM Generalizada

65 Exemplo Incidência Perpendicular
Reparametrização Particionamento ZP2

66 Exemplo Incidência Perpendicular
Reparametrização Particionamento ZP2 PCF 5x5

67 Exemplo Incidência Paralela
Mapeamento Tradicional

68 Exemplo Incidência Paralela
Reparametrização LiSPSM Generalizada

69 Exemplo Incidência Paralela
Reparametrização Particionamento ZP2

70 Exemplo Incidência Paralela
Reparametrização Particionamento ZP2 PCF 5x5

71 FIM Perguntas?


Carregar ppt "Renderização em Tempo Real"

Apresentações semelhantes


Anúncios Google