Renderização em Tempo Real

Slides:



Advertisements
Apresentações semelhantes
Continuidade: sem interrupções
Advertisements

AULA 02 PROGRAMAÇÃO LINEAR INTEIRA
Z-Buffer Método que opera no espaço da imagem
PROJEÇÕES CARTOGRÁFICAS
Operações envolvendo imagens
DCA-0114 Computação Gráfica
Perspetiva Isométrica
(semelhante ao fluxo de água vA)
10º CAPÍTULO Segmentação de imagem.
translação e rotação da Terra e as estações do ano
JOGOS.
Pontifícia Universidade Católica do Rio de Janeiro – PUC-RJ
COMPUTAÇÃO GRÁFICA.
Claudio Esperança Paulo Roma Cavalcanti
Mapeamento de Texturas e Visualização de Terreno
Parte 1 – Conceitos de Real Time Rendering. a. Pipeline Gráfico.
Adaptive Shadow Maps Randima Fernando Sebastian Fernandez Kavita Bala
Gestão de telas e ambientes em jogos 2D
Estrutura e movimento a partir de imagens
Computação Gráfica Interativa - Gattass
Fundamentos da Computação Gráfica (Trabalho 2)
Trabalho 1 CONHECENDO O EQUIPAMENTO Gabriel Tavares Malizia Alves Manuel.
Disparidades, Correspondências e Corte Mínimo para Estéreo
Parallax Mapping Rodrigo Martins FCG 2005/1.
O que você deve saber sobre
PROJEÇÕES CARTOGRÁFICAS
Computação Gráfica: Aula5: Rendering e Rasterização
Computação Gráfica: Aula5: Rendering e Rasterização
Computação Gráfica: Rendering e Rasterização
Técnicas para algoritmos de superfície visível eficientes (Techniques for efficient visible-surface algorithms) Fabio Utzig Rodrigo Senger.
Visible-Surface Ray Tracing
Fundamentação Teórica
An Improved Illumination Model for Shaded Display
Introdução à Óptica Geométrica
Introdução à Computação Gráfica Projeções
Ray Tracing Patrícia Cordeiro Pereira Pampanelli
Sistemas Operacionais
Visão Computacional Shape from Shading
Faculdade de Computação Universidade Federal de Mato Grosso do Sul
Cálculo Numérico / Métodos Numéricos
Estimação da direção de múltiplas fontes de luz Baseado no artigo Estimation of Illuminant Direction and Intensity of Multiple Light Sources, de W. Zhou.
Sistemas Operacionais
Visão Computacional Formação da Imagem
Progressão Geométrica Matrizes Questão nº01  Na P.G., a posição do termo é...
Introdução à Computação Gráfica Curvas
Computação Gráfica Aula 3 Transformações Geométricas
Computação Gráfica – Visibilidade
TRANSFORMAÇÕES DE TENSÕES
Dissertação de Mestrado
Visualização Tridimensional (Câmera Sintética)
Ambient Occlusion Disciplina: Fundamentos de Computação Gráfica Professor : Marcelo Gattass Allan Carlos Avelino Rocha Departamento de Informática.
Grandezas Escalares e Vetoriais
Cálculo da Direção de Caminhada: Gradiente de f(x)
Visão Computacional
Construção e Análise de Algoritmos
Mapeamento de Textura: Aspectos Gerais
Lentes esféricas Giovanni Ávila Física.
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
1 Prof°. Antônio Oliveira de Souza 18 / 10 / 2013 Av. Itororó, 1445 CEP: Maringá - Pr Faculdade de Engenharia e Inovação Técnico Profissional.
Helder Geovane Gomes de Lima
Ray Tracing Estocástico e Distribuido Aruquia Barbosa.
Shadow Mapping.
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Apresentação 2 Aumento do realismo : texturas e sombras, evolução dos modelos de reflexões locais.
PEE 5789 Conceitos Avançados de Síntese de Imagens AULA 02 Modelos Locais de Iluminação Marcio.
Ray Tracing Autor: Osvaldo Ramos Tsan Hu Orientador: Prof. Marcio Lobo.
Processamento de Imagens e Computação Gráfica
Rendering Por Adinan Aguiar.
Nossos 2 olhos formam imagens ligeiramente diferentes do mundo A diferença entre as posições de objetos nas 2 images é chamada de disparidade O termo disparidade.
Transcrição da apresentação:

Renderização em Tempo Real Mapeamento de Sombras (Shadow Mapping) Vitor Barata Ribeiro Blanco Barroso vbarata@tecgraf.puc-rio.br Departamento de Informática - PUC-Rio Setembro de 2007

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

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

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

Exemplo sem sombras

Exemplo com sombras

Exemplo: Luxor Jr. (SM)

Exemplo: Doom 3 (SV)

Exemplo: Bioshock (SM)

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

Transformação Perspetiva Frustum de visão:

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

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

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

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]

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½

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

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

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

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

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

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

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);

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);

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

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.

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

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

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

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

Auto-sombreamento incorreto

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

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

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

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

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

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)

Serrilhamento e Filtragem

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

PCF 5x5 no espaço da imagem

PCF 5x5 no espaço do mapa

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

PCF 5x5 aprimorado com jitter

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

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

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

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

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

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 e-mail. Também acrescentarei aos slides assim que possível.

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

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]

Reparametrização

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:

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| )

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

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

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

Particionamento

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

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)

Exemplo Incidência Perpendicular Mapeamento Tradicional

Exemplo Incidência Perpendicular Reparametrização LiSPSM Generalizada

Exemplo Incidência Perpendicular Reparametrização Particionamento ZP2

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

Exemplo Incidência Paralela Mapeamento Tradicional

Exemplo Incidência Paralela Reparametrização LiSPSM Generalizada

Exemplo Incidência Paralela Reparametrização Particionamento ZP2

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

FIM Perguntas?