Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Computação Gráfica Visibilidade Universidade Federal Rural do Semi-Árido - UFERSA Leandro C. Souza leandro.souza@ufersa.edu.br Introdução Os métodos de detecção de superfícies visíveis desempenham um papel de grande importância na geração de imagens reais. Em uma cena tridimensional, normalmente, não é possível ver todas as superfícies de todos os objetos. Não queremos que objetos ou partes de objetos não visíveis apareçam na imagem gerada. 2 Introdução O problema de visibilidade tem diversas ramificações: Descartar objetos que não podem ser vistos (culling). Recortar objetos de modo a manter apenas as suas porções visíveis (clipping). Desenhar apenas as partes visíveis dos objetos. Em arame (hidden line algorithms). Em superfícies (hidden surface algorithms). Sombras (definir visibilidade a partir de fontes luminosas). 3 Introdução Fonte:http://www.ithinkibrokeit.co.uk/articles/graphics06/page9.php 4 Introdução Há vários métodos para detecção de superfícies (ou linhas) visíveis. Os algoritmos são classificados de acordo com o que eles tratam: Métodos que trabalham no espaço do objeto (object-space methods). Métodos que trabalham no espaço da imagem (image-space methods). 5 Espaço do Objeto X Espaço da Imagem Métodos que trabalham no espaço do objeto. Entrada e saída são dados geométricos. Independente da resolução da imagem. Rasterização ocorre dpois. Exemplos: Back face culling. BSP-tree. 6 Espaço do Objeto X Espaço da Imagem Métodos que trabalham no espaço da imagem. Entrada é vetorial e saída é matricial. Dependente da resolução da imagem. Visibilidade determinada apenas em pontos (pixels). Podem aproveitar aceleração por hardware. Exemplos: Z-Buffer . Scan-line. 7 Algoritmos de Visibilidade Visibilidade é um problema complexo que não tem uma solução ótima. O que é ótima? Pintar apenas as superfícies visíveis? Pintar a cena em tempo mínimo? Coerência no tempo? Cena muda? Objetos se movem? Qualidade é importante? Antialiasing. 8 Back Face Culling Hipótese: cena é formada por objetos poliédricos fechados. Podemos reduzir o número de faces a serem desenhadas para aproximadamente a metade. Faces de trás não precisam ser pintadas. Como determinar se uma face é de trás? N.E > 0 → face da frente N.E < 0 → face de trás 9 Z-Buffer Método que opera no espaço da imagem. Visibilidade é decidida ponto a ponto em cada posição de pixel no plano de projeção. Normalmente aplicado em cenas contendo apenas superfícies poligonais, pois seus valores de profundidade podem ser computados muito rapidamente. Utiliza dois buffers: Buffer de cor: armazena a intensidade do pixel em cada posição na imagem. Z-buffer: guarda a profundidade para cada posição (x, y) à medida em que as superfícies são processadas. 10 Z-Buffer Início da renderização: Buffer de cor = cor de fundo. Z-buffer = profundidade máxima. Durante a rasterização de cada polígono, cada pixel passa por um teste de profundidade. Se a profundidade no pixel for menor que a profundidade registrada no z-buffer. Pintar o pixel (atualizar o buffer de cor). Atualizar o buffer de profundidade. Caso contrário, Ignorar. 11 Z-Buffer Algumas dicas para usar o z-buffer no OpenGL: Habilitar o z-buffer: glEnale(GL_DEPTH_TEST); Não esquecer de alocar o z-buffer: glutInitDisplayMode(GLUT_RGB|GLUT_DEPTH); Ao gerar um novo quadro, limpar o z-buffer glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT); 12 Z-Buffer Algumas vantagens: Simples e comumente implementado em hardware. Objetos podem ser desenhados em qualquer ordem. Desvantagens: Rasterização independe de visibilidade. Lento se o número de polígonos é grande. Erros na quantização de profundidades podem resultar em imagens inaceitáveis. Dificulta o uso de transparência e técnicas de antialiasing. É preciso ter informações sobre os vários polígonos que cobrem cada pixel. 13 Z-Buffer e Transparência Se há objetos semi-transparentes, a ordem de renderização é importante. Após a renderização de um objeto transparente, atualiza-se o z-buffer? Sim → novo objeto por trás não pode ser desenhado. Não → z-buffer fica incorreto. 14 Z-Buffer e Transparência Soluções: Estender o z-buffer → A-buffer. Pintar de trás para frente → Algoritmo do pintor. Necessário de qualquer maneira, para realizar transparência com blending (canal alfa). 15 A-Buffer Melhoramento da ideia do z-buffer. Permite implementação de transparência e de filtragem (antialiasing). Para cada pixel, manter lista ordenada por z onde cada nó contém. Máscara de subpixels ocupados. Cor ou ponteiro para polígono. Valor de z (profundidade). 16 A-Buffer Fase 1: Polígonos são rasterizados. Se pixel completamente coberto por polígono e polígono é opaco: Inserir na lista removendo os polígonos mais profundos. Se o polígono é transparente ou não cobre totalmente o pixel. Inserir na lista. Fase 2: Geração da imagem. Máscaras de subpixels são misturadas para obter a cor final do pixel. 17 A-Buffer Vantagens: Faz mais do que o z-buffer; Ideia da máscara de subpixels pode ser aplicada a outros algoritmos de visibilidade; Desvantagens: Implementação (lenta) por software; Problemas do z-buffer permanecem; Erros de quantização em z; Todos os polígonos são rasterizados. 18 Algoritmo Scanline Ideia é aplicar o algoritmo de rasterização de polígonos a todos os polígonos da cena simultaneamente. A cada linha de varredura, todos os polígonos por ela interceptados são examindos para determinar quais são visíveis. Explora coerência de visibilidade. 19 Algoritmo Scanline 20 Algoritmo Scanline Processa as linhas de varredura da esquerda para a direita; A cada interseção da linha de varredura com o polígono, usar uma flag para: Marcar como ligada sempre que interceptar um polígono pela sua aresta mais à esquerda; Marcar como desligada sempre que interceptar um polígono pela sua aresta mais à direita; Exemplo: 21 Algoritmo Scanline Na linha de varredura 1: No trecho entre as arestas AB a BC, apenas o polígono S1 aparece como ligado Trivial: pintar polígono S1. Situação semelhante no trecho entre as arestas EH e FG (S2 é pintado). Na linha de varredura 2: No trecho entre as arestas AD e EH, apenas o polígono S1 aparece ligado. Pintar S1. No trecho entre as arestas EH e BC, ambos os polígonos aparecem ligados. Necessário fazer testes de profundidade para determinar qual deles é visível. No trecho entre as arestas BC e FG, apenas o polígono S2 aparece ligado. Pintar S2. 22 Algoritmo Scanline Vantagens: Algoritmo flexível que explora a coerência entre pixels de uma mesma linha de varredura. Razoável independência da resolução da imagem. Filtragem e antialiasing podem ser incorporados com um pouco de trabalho. Pinta cada pixel apenas uma vez. Razoavelmente imune a erros de quantização em z. 23 Algoritmo Scanline Desvantagens: Relativa complexidade. Problemas quando superfícies se sobrepõem ciclicamente. Não muito apropriado para implementação em hardware. 24 Algoritmo do Pintor Opera tanto no espaço do objeto como no espaço da imagem. Operações de ordenação de polígonos acontecem no espaço do objeto e da imagem; Desenho dos polígonos é feito no espaço da imagem. 25 Algoritmo do Pintor Ideia é pintar objetos mais distantes para depois pintar os objetos mais próximos. profundidade z 26 Algoritmo do Pintor Requer que objetos sejam ordenados em Z. Pode ser complicado em alguns casos. Na verdade, a ordem não precisa ser total se projeções dos objetos não se interceptam. 27