Logo Passei Direto
Buscar
Material

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

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Mais conteúdos dessa disciplina