INF 1366 – Computação Gráfica Interativa Eliminação de Superfícies Escondidas; Anti-Aliasing e Imagens Digitais Alberto B. Raposo [email protected] http://www.tecgraf.puc-rio.br/~abraposo/INF1366/index.htm Alberto Raposo – PUC-Rio Remoção de Superfícies Escondidas • Dado conjunto de polígonos, qual é visível em cada pixel (quem está na frente, etc.)? • Há muitos algoritmos diferentes para isso. 2 grandes classes: – Precisão de objeto: computação opera nas primitivas – Precisão de imagem: computação opera no nível do pixel • Pode-se operar em qualquer espaço do pipeline de visualização, pois todos eles mantêm a informação de profundidade Sequência de transformações do OpenGL Alberto Raposo – PUC-Rio Remoção de Superfícies Escondidas (Visibilidade) • Determinar a visibilidade dos polígonos antes de enviá-los para placa gráfica (culling): – – – – Back face culling; View frustum culling; Occlusion Culling; Célula / Portal. Alberto Raposo – PUC-Rio Desafios • Eficiência – perde-se tempo sobrescrevendo pixels ou rasterizando coisas que não podem ser visualizadas • Precisão – resultado precisa ser correto e se comportar corretamente quando a câmera se move • Em ambientes complexos, poucas coisas são visíveis – Quanto do mundo real é visto a cada instante? Alberto Raposo – PUC-Rio Algoritmo do Pintor (Precisão de Imagem) • Algoritmo: – Escolha uma ordenação para os polígonos baseada em algum critério (e.g. profundidade de um ponto do polígono) – Renderize os polígonos nessa ordem, o mais distante primeiro • Polígonos mais próximos são desenhados sobre os mais distantes Alberto Raposo – PUC-Rio Algoritmo do Pintor z Alberto Raposo – PUC-Rio M. Gattass, PUC-Rio Problemas na ordenação de faces (b) (a) + + za Alberto Raposo – PUC-Rio zb M. Gattass, PUC-Rio Algoritmo do Pintor • Dificuldade: – Se usado dessa forma, não funciona bem na maioria das geometrias • Precisa de melhores maneiras de fazer a ordenação dos polígonos zs Que ponto escolher para a ordenação? xs Alberto Raposo – PUC-Rio Situações em que não funciona Algoritmo Z-buffer (Precisão de Imagem) • Para cada pixel do display, tenha pelo menos 2 buffers – Color buffer: Armazena a cor atual de cada pixel (o que será realmente mostrado) – Z-Buffer (ou depth buffer): armazena, para cada pixel, a profundidade do objeto mais próximo até então, a ser desenhado naquele pixel • Inicialize o Z-buffer com um valor correspondente ao valor de Z mais distante visível (Zmax) • À medida que um polígono é preenchido, compute a profundidade de cada pixel a ser preenchido – If: profundidade < profundidade armazenada no z-buffer, preencha o pixel e armazene essa profundidade no z-buffer – Else: desconsidere o pixel (está atrás de algo que já foi desenhado). Alberto Raposo – PUC-Rio S. Chenney, Univ. of Wisconsin Z-Buffer: idéia básica z MATRIZ DE PROFUNDIDADES Alberto Raposo – PUC-Rio M. Gattass, PUC-Rio Z-buffer • Vantagens: – Simples e hoje em dia implementado em hardware • O z-buffer é parte do que faz uma placa gráfica ser “3D” – Computar as profundidades necessárias é simples • Desvantagens: – Over-renders – pouco eficiente quando há grande número de polígonos – Não trata transparência facilmente (precisaria guardar informação sobre polígonos parcialmente cobertos) S. Chenney, Univ. of Wisconsin Alberto Raposo – PUC-Rio Algoritmo A-buffer (Precisão de Imagem) • Lida com superfícies transparentes e faz anti-aliasing • Em cada pixel, mantenha um ponteiro para lista de polígonos ordenado por profundidade e uma máscara de cobertura de sub-pixels para cada polígono – Matriz de bits dizendo que partes do pixel está coberta • Algoritmo: ao desenhar um pixel: – If: polígono é opaco e cobre o pixel, inserir na lista, removendo todos os polígonos mais distantes – If: polígono é transparente ou cobre apenas parte do pixel, inserir na lista, mas sem remover polígonos mais distantes S. Chenney, Univ. of Wisconsin Alberto Raposo – PUC-Rio Algoritmo A-buffer • Algoritmo: etapa de rendering – A cada pixel, percorra o buffer usando as cores dos polígonos e as máscaras de cobertura para fazer a composição: = sobre • Vantagem: – Pode fazer mais que o Z-buffer – Conceito de máscara de visibilidade pode ser usado em outros algoritmos • Desvantagens: – Não está em hardware, e é lento em software – No fundo, é z-buffer: mesmo problema de over-rendering • Porém: usado em ferramentas de renderização de alta qualidade S. Chenney, Univ. of Wisconsin Alberto Raposo – PUC-Rio Subdivisão de Áreas • • Explora a coerência de área: pequenas áreas de uma imagem tendem a ser cobertas por apenas um polígono Três casos triviais para determinar o que está na frente em uma região: 1. Um polígono está completamente à frente de qualquer coisa na região 2. Não há superfícies projetadas na região 3. Apenas uma superfície está completamente dentro da região, a corta, ou envolve a região Alberto Raposo – PUC-Rio S. Chenney, Univ. of Wisconsin Subdivisão de Áreas: Algoritmo de Warnock (Precisão de Imagem) • Comece com imagem completa • Se um dos 3 casos triviais ocorre, desenhe o que está na frente • Caso contrário, subdivida a região recursivamente • Se região chegou ao tamanho do pixel, escolha superfície com menor profundidade • Vantagens: – Não ocorre over-rendering – Bom anti-aliasing: basta fazer mais uma subdivisão para obter informação de sub-pixel • Desvantagem: – Testes são complexos e lentos Alberto Raposo – PUC-Rio S. Chenney, Univ. of Wisconsin Algoritmo de Warnock 2 3 3 2 3 3 2 3 3 3 1 3 2 3 2 Alberto Raposo – PUC-Rio 1) Um polígono à frente 2) Vazia 3) Um polígono dentro, ao redor ou cortando a área 3 3 2 Casos na imagem ao lado: 3 1 1 1 1 3 • 2 3 3 3 2 2 S. Chenney, Univ. of Wisconsin BSP-Trees: Binary Space Partion Trees (Precisão de Objeto) • Construção da bsp tree – Árvore fornece ordem de renderização – Árvore “quebra” o mundo 3D com planos • Mundo é quebrado em células convexas • Cada célula é a interseção de todos os “meio-espaços” dos planos de quebra na árvore • Também usada em modelagem: – Nem sempre quando se fala em BSP se refere a este algoritmo S. Chenney, Univ. of Wisconsin Alberto Raposo – PUC-Rio Exemplo: BSP-Tree A C 4 A - 3 + C B - B 1 3 + - + 2 4 1 2 S. Chenney, Univ. of Wisconsin Alberto Raposo – PUC-Rio Exemplo: BSP-Tree 5a 3 5b frente 2 atrás 1 2 5a 3 1 4 4 5b 3 5a frente 5b 2 2 frente 3 1 atrás 4 5b 1 5a 4 atrás 3 5a 5b 2 2 4 3 1 4 Alberto Raposo – PUC-Rio 5a 1 5b M. Gattass, PUC-Rio Célula / Portal - Conceito • Em um ambiente fechado, objetos presentes em quartos (células) distantes não podem ser vistos através das paredes (oclusores) e os objetos nos quartos adjacentes são vistos somente através das portas ou janelas (portais). Alberto Raposo – PUC-Rio Exemplo: Célula-Portal View Alberto Raposo – PUC-Rio S. Chenney, Univ. of Wisconsin Exemplo: Célula-Portal View Alberto Raposo – PUC-Rio S. Chenney, Univ. of Wisconsin Exemplo: Célula-Portal View Alberto Raposo – PUC-Rio S. Chenney, Univ. of Wisconsin Exemplo: Célula-Portal View Alberto Raposo – PUC-Rio S. Chenney, Univ. of Wisconsin Cell-Portal Example (5) View Alberto Raposo – PUC-Rio S. Chenney, Univ. of Wisconsin Exemplo: Célula-Portal View Alberto Raposo – PUC-Rio S. Chenney, Univ. of Wisconsin Célula / Portal – Pré-processamento • O ambiente deve ser pré-processado para se obter as células e os portais: – Uma forma de se obter essa divisão é através do cálculo de uma BSP-Tree ou uma k-d Tree; • Cálculo da Visibilidade: – Calcular o conjunto de objetos potencialmente visíveis (PVS): Teller / Séquin, Quake; – Não calcular o PVS: a determinação é feita dinamicamente - Luebke Alberto Raposo – PUC-Rio Portais • Determinar o conjunto potencialmente visível: – A célula onde está o observador mais todas as células adjacentes. • Luebke e Georges: – Montar o grafo de cena a partir da informação de conectividade; – Percorrendo o grafo, determinar quais células estão visíveis; – Adequado para implementação em grafos de cena: Performer / OpenSceneGraph Alberto Raposo – PUC-Rio Grafo de Cena Alberto Raposo – PUC-Rio Resultados Alberto Raposo – PUC-Rio Teste de Desempenho (1) • O desempenho foi amostrado durante um percurso por vários cômodos do modelo 3-D de um apartamento; • Testes realizados em um P4 2.54 GHz com 3 GB de RAM e uma placa gráfica NVIDIA Quadro FX 1000 128 MB. Alberto Raposo – PUC-Rio Teste de Desempenho (2) Quadros por Segundo s/ Portais 39 c/ Portais 112 Alberto Raposo – PUC-Rio Teste de Desempenho (3) Quadros por Segundo s/ Portais 190 c/ Portais 180 Alberto Raposo – PUC-Rio Teste de Desempenho (4) Quadros por Segundo s/ Portais 30 c/ Portais 94 Alberto Raposo – PUC-Rio Propriedades: Células-Portais • Vantagens – Extremamente eficiente – apenas olha para células que estão realmente visíveis: visibility culling – Facilmente modificável para visibilidade parcial: renderiza células parcialmente visíveis e deixa z-buffer fazer o resto – Faz espelhos: crie “célula imaginária” espelhada e considere o espelho como portal • Desvantagens – Restrito a ambientes com boa estrutura para células/portais (ambientes fechados) Alberto Raposo – PUC-Rio Anti-Aliasing Alberto Raposo – PUC-Rio ACM SIGGRAPH Educator’s Slide Set Aliasing • Ocorre quando a amostragem inerente à renderização não tem informação suficiente para uma imagem precisa. Cena original Luminosidade Alberto Raposo – PUC-Rio Amostragem do centro dos pixels Sinal amostrado Imagem renderizada Luminosidade reconstruída Efeitos de Aliasing Jagged Edges (serrilhado) Perda de detalhes Alberto Raposo – PUC-Rio ACM SIGGRAPH Educator’s Slide Set Desintegração de Textura – O xadrez deveria ficar menor com a distância – Aliasing os torna maiores ou irregulares Alberto Raposo – PUC-Rio ACM SIGGRAPH Educator’s Slide Set Anti-Aliasing • Algoritmos e técnicas desenvolvidos para combater os efeitos de aliasing Alberto Raposo – PUC-Rio Anti-Aliasing • Linhas desenahdas com algoritmo de Bresenham e polígonos preenchidos possuem bordas serrilhadas • Como consertar? Alberto Raposo – PUC-Rio S. Chenney, Univ. of Wisconsin Anti-Aliasing • Duas abordagens gerais – Amostragem por área (ou pré-filtragem): considera as primitivas amostradas como “caixa”(região) (ou Gaussiana, ou…) ao invés de linhas • Requer primitivas com área (linhas com largura) • Super-amostragem (ou pós-filtragem): amostra em resolução maior, filtrando depois a imagem resultante – Este é o anti-aliasing mais usado em hardware S. Chenney, Univ. of Wisconsin Alberto Raposo – PUC-Rio Pré-filtragem Sem Anti-aliasing Pré-filtragem Alberto Raposo – PUC-Rio ACM SIGGRAPH Educator’s Slide Set Unweighted Area Sampling • Técnica de pós-filtragem – Considere uma linha como tendo largura – Considere pixels como pequenos quadrados – Preencha os pixels de acordo com a proporção do seu quadrado coberto pela linha (intensidade de cor) 0 0 0 0 1/4 0 1/4 1/8 .914 0 1/8 0 .914 1/8 .914 0 1/8 1/4 0 1/4 0 0 0 0 0 S. Chenney, Univ. of Wisconsin Alberto Raposo – PUC-Rio Super-amostragem (pós-filtragem) • Amostre em resolução maior que a necessária para o display e depois filtre a imagem – Típico: 4 a 16 amostras por pixel S – Amostras podem ser em grade uniforme, ou randomicamente posicionadas Alberto Raposo – PUC-Rio S. Chenney, Univ. of Wisconsin Exemplos de Anti-aliasing Alberto Raposo – PUC-Rio ACM SIGGRAPH Educator’s Slide Set Exemplos de Anti-aliasing Alberto Raposo – PUC-Rio ACM SIGGRAPH Educator’s Slide Set Exemplos de Anti-aliasing Alberto Raposo – PUC-Rio ACM SIGGRAPH Educator’s Slide Set Weighted Sampling • Ao invés de usar a proporção da área coberta pela linha, use convolução para fazer a amostragem – Equivalente a pré-filtrar a linha e amostrar o resultado • Coloque o “filtro” em cada pixel e integre o produto do pixel com a linha 1 1 Exemplo de filtro: 16 8 1 1 8 4 1 1 16 8 Alberto Raposo – PUC-Rio 1 16 1 8 1 16 S. Chenney, Univ. of Wisconsin Falando em filtros... • Imagem: uma função do R2 em C Alberto Raposo – PUC-Rio Imagem Colorida v G R Alberto Raposo – PUC-Rio u B Tons de cinza e negativo Lx,y = 0.299Rx,y + 0.587Gx,y + 0.114Bx,y tons de cinza Lx,y = 255 - Lx,y Alberto Raposo – PUC-Rio Aquisição de imagem digital • Amostragem • Quantização • Codificação Alberto Raposo – PUC-Rio Amostragem, quantização e codificação de f(x) f(x) 6 função original 5 4 amostra 3 2 1 0 x partição do eixo x Alberto Raposo – PUC-Rio Amostragem, quantização e codificação de f(x) f(x) função original 6 5 4 3 2 amostra quantizada 1 0 x partição do eixo x codificação = (3, 4, 5, 5, 4, 2, 2, 3, 5, 5, 4, 2) Alberto Raposo – PUC-Rio Digitalização de Imagens 64x54 amostragem Imagem de tons contínuos Imagem amostrada quantização 5*55, 1*55, 1*20, 1*22, …. Imagem amostrada, quantizada e codificada Alberto Raposo – PUC-Rio 55 55 55 55 55 55 55 55 20 22 23 45 55 55 55 55 10 09 11 55 55 55 55 43 42 70 55 55 55 55 28 76 22 55 55 55 55 55 55 55 55 55 64x54 - 16 cores codificação Imagem amostrada e quantizada Filtros espaciais Melhoras na distribuição espacial Alberto Raposo – PUC-Rio Suavização f h hi Alberto Raposo – PUC-Rio f i 1 2 f i f i 1 4 Mascara ou Filtro f i 1 2 f i f i 1 hi 4 ou: hi n 1 g k 0 Alberto Raposo – PUC-Rio (k i ) fi se l 1 0 1 / 4 se l 1 g l 2 / 4 se l 0 1 / 4 se l 1 se l 1 0 Convolução hi n 1 g k 0 t h( x ) fi g (t x) f ( x)dt t Alberto Raposo – PUC-Rio ( k i ) Gaussiana G ( x) 0.3 1 e 2 0.2 0.1 -4 -3 1 1 4 -2 2 Alberto Raposo – PUC-Rio -1 0 1 1 1 64 1 1 1 16 6 15 20 2 3 4 4 6 4 15 6 1 1 x2 2 2 Gaussiana 1 e 2 G ( x, y ) x2 y2 2 2 0.4 0.3 0.2 0.1 1 1 2 16 1 2 4 2 Alberto Raposo – PUC-Rio 1 2 1 1 4 1 7 273 4 1 4 7 4 16 26 16 26 16 41 26 26 16 4 7 4 1 4 7 4 1 Filtragem gaussiana Alberto Raposo – PUC-Rio Filtro Gaussiano 1 1 2 16 1 Alberto Raposo – PUC-Rio 2 4 2 1 2 1 Detecção de bordas f(x) |f ''(x)| |f '(x)| 1 f '' i 2 3 f ' 4 i 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ( f i 1 f i 1 ) / 2 f i 1 2 f i f i 1 0 Alberto Raposo – PUC-Rio se ( f i 1 2 f i f i 1 ) 0 se ( f i 1 2 f i f i 1 ) 0 Detecção de bordas Gradiente f x f ( x, y ) f y Laplaciano 2 f 2 f f ( x, y ) 2 x y 2 Alberto Raposo – PUC-Rio 2 Filtros de realce de bordas Gradiente Roberts Sobel Laplaciano Alberto Raposo – PUC-Rio Vertical Horizontal 0 0 0 0 1 0 1 0 0 1 1 2 4 1 0 0 0 1 2 1 0 1 0 1 4 1 0 1 0 1 0 0 1 1 0 4 1 0 1 0 2 0 2 0 0 0 1 0 1 Exemplo de detecção de arestas RGB Alberto Raposo – PUC-Rio cinza Laplaciano Filtragem L 255 L L 0.30R 0.59G 0.11B filtro gaussiano 1 2 1 1 2 4 2 16 1 2 1 Alberto Raposo – PUC-Rio filtro laplaciano 0 1 0 1 4 1 0 1 0 Informações Adicionais • • • • • Peter Shirley. Fundamentals of Computer Graphics, A K Peters, Ltd., Natick, MA, USA, 2002. Foley, J. D., Van Dam, A., Feiner, S. K., e Huhes, J. F., Phlips, L. R., Introduction to Computer Graphics, Addison-Wesley, 1995. D. F. Rogers, Procedural Elements for Computer Graphics, McGraw-Hill, 1988. Marcelo Gattass: notas de aula. http://www.tecgraf.pucrio.br/~mgattass/cg.html Portais: Silva, R. J. M., Wagner, G. N., Raposo, A. B., Gattass, M. Experiência de Portais em Ambientes Arquitetônicos Virtuais. VI Symposium on Virtual Reality - SVR 2003, p.117-128. Ribeirão Preto, SP, Brazil. 2003. Alberto Raposo – PUC-Rio