visibilidade - universidade de...
TRANSCRIPT
2
As motivações… Numa cena 3D, geralmente não é possível ver todas
as superfícies de todos os objectos Não queremos que objectos ou partes de objectos
não visíveis apareçam na imagem Isto gera diferentes problemas. Exemplos:
Eliminar objectos que não podem ser vistos (culling) Recortar objectos de forma a manter apenas as partes
que podem ser vistas (clipping) Desenhar apenas partes visíveis dos objectos
3
O problema da visibilidade… Formalizando:
A questão: Dados dois pontos P1(x1,y1,z1) e P2(x2,y2,z2), será que
algum dos pontos oculta o outro?
Para responder à questão precisamos de dois passos:
1. Pertencem P1 e P2 à mesma recta projectante?
2. Se não, nenhum dos pontos oculta o outro. Se sim, a comparação da profundidade indica-nos qual dos pontos está en frente do outro.
4
Os algoritmos … A visibilidade coloca-se de maneira bastante diferenciada
em função da natureza da imagem a ser visualizada. Se a imagem e composta apenas por linhas
algoritmos de linhas escondidas (hidden-line algorithms);
Se a visualização de superfícies é importante algoritmos de superfícies ocultas (hidden surface
algorithms) Actualmente, com o avanço da indústria de equipamentos
gráficos, varias técnicas de visibilidade são incorporadas, directamente, no hardware
5
Classificação dos algoritmos …
Os algoritmos de visibilidade podem ser divididos entre:
os que operam na precisão do espaço da cena e
os que operam na precisão do espaço da imagem
6
Classificação dos algoritmos … Os que operam com precisão da cena
utilizam, normalmente, números reais com ponto flutuante.
Pode-se dizer que eles calculam a solução exactamente e o resultado é uma lista ordenada das faces a serem projectadas no plano de visualização virtual.
Os que operam com precisão de imagem estão interessados na solução correcta do problema para
um determinado nível de resolução. Neste caso, o algoritmo procura resolver o problema no
âmbito de cada elemento da imagem (pixel), analisando as profundidades relativas em cada raio de visão, sendo a visibilidade adiada ate ao último momento.
7
Complexidade do problema …
Visibilidade é um problema complexo que não tem uma solução “óptima” O que é óptima?
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
Aceleração por Hardware?
8
Algoritmo Back-face detection Suponha que a superfície de um objecto e aproximada por uma
superfície poligonal.
Assumindo-se que as normais de todas as faces apontam para fora do volume (objecto), tem-se que as faces, cujas normais apontam na direcção contraria ao observador, estão numa parte do poliedro cuja visibilidade e bloqueada por outras faces mais próximas ao observador.
Como determinar se a face é de trás?
E.N ≥ O → Face da frente
E.N < O → Face de trás
(E.N – produto escalar (interno))
E
10
Algoritmo Z-Buffer O algoritmo Z-Buffer, criado por Catmull, é, talvez, o
algoritmo de visibilidade mais simples de ser implementado
tanto em software como em hardware.
Este algoritmo requer:
um frame buffer que armazena os valores de cor para cada
pixel,
um Z-Buffer, com o mesmo número de entradas, no qual o
valor da coordenada z de cada pixel é armazenado.
12
Algoritmo Z-Buffer A ideia geral do algoritmo é a seguinte:
O Z-Buffer e inicializado com um número arbitrariamente
elevado.
Durante o processo de rasterização: se o ponto corrente do polígono sendo rasterizado
possuir um valor z menor do que o valor correspondente já armazenado no Z-Buffer (significando que não está mais afastado do observador do que o ponto previamente armazenado), os seus valores de cor e de z substituem os valores dos buffers.
Em caso contrário o ponto corrente é ignorado (é um ponto oculto)
13
Algoritmo Z-BufferRefinando as ideias: Manter para cada pixel um valor de profundidade
(z-buffer ou depth 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 do pixel for menor que a registrada no
z-buffer Pintar o pixel (atualizar o buffer de cor) Actualizar o z-buffer
Caso contrário, ignorar
14
Algoritmo Z-BufferPseudo-código Criador: Catmull, 1974 (Um dos proprietários da Pixar, E.U.A.).
- Pseudocódigo (Z-Buffer): Zbuffer( ) { //inicialização for (y = 0; y < ymax; y++) { for (x = 0; x < xmax; x++) { writepixel(x, y, cor_de_fundo); writeZ(x, y, 1); // 1: valor máximo para Z[0,1] } } // Zbuffer for (cada_polígono){ for (cada_pixel){ pz = valor "z" do polígono na posição (x, y); if (pz < read (x, y){ writeZ (x, y, pz); writepixel(x, y, cor_do_polígono); } } } }
15
Algoritmo Z-Buffer Vantagens:
Simples e comummente implementado em Hardware Objectos podem ser desenhados em qualquer ordem
Desvantagens: Lento se o número de polígonos é grande Erros na determinação de valores de profundidade
podem resultar em imagens inaceitáveis Dificulta o uso de transparência ou técnicas de
anti-aliasing É preciso ter informações sobre os vários polígonos
que cobrem cada pixel
16
Z-Buffer e Transparência Se há objectos semi-transparentes, a
ordem de rasterização é importante Após a rasterização de um objecto
transparente, actualiza-se o Z-Buffer? Sim novo objecto por trás não pode
mais ser rasterizado Não Z-Buffer fica incorrecto
Soluções Estender o Z-buffer A-Buffer Pintar de trás para frente Algoritmo
do pintor
17
Algoritmo de SubdivisãoEstratégia global: É um método recursivo que utiliza a estratégia de dividir para
conquistar. O método analisa uma determinada região da imagem
projectada então: se for possível decidir quais os polígonos visíveis na
região, estes são desenhados (rasterizados) caso contrário, a região é subdividida em regiões mais
pequenas de forma recursiva até que a decisão quanto à visibilidade possa ser tomada ou até que cada área do ecrã considerada seja um único pixel.
18
Algoritmo de Subdivisão O algoritmo da subdivisão (algoritmo
de Warnock), començando com a totalidade do ecrâ, divide, em cada passo, uma área em 4 partes iguais, gerando desse modo uma árvore quaternária (quad tree).
Em cada etapa do processo recursivo de subdivisão, a projecção de cada polígono se enquadra em uma dentre quatro possíveis relações com a área de interesse.
19
Algoritmo de Subdivisão
O polígono circunda, completamente, a área. O polígono intercepta a área. O polígono esta completamente contido na área, dito contido. O polígono esta completamente fora da área, dito disjunto.
20
Algoritmo de Subdivisão
Polígonos disjuntos não têm influencia alguma sobre a área de interesse (são não visíveis).
A diferença do polígono com a área (a parte do polígono interceptado que não esta contida na área) também e irrelevante.
A intersecção do polígono com a área (a parte do polígono interceptado que esta contida na área) e tratada da mesma forma que um polígono contido.
Para uma dada área do ecrã, mantém-se uma lista de polígonos potencialmente visíveis - PVPL
21
Algoritmo de Subdivisão
A intersecção de todos os polígonos com a área e vazia. A área é preenchida com a cor do fundo.
22
Algoritmo de Subdivisão
Existe apenas um polígono que intercepta a área ou apenas um polígono contido. Todos os outros são disjuntos.
A área é preenchida, inicialmente, com a cor do fundo e depois a parte pertinente do polígono e rasterizada.
23
Algoritmo de Subdivisão
Existe apenas um polígono que circunda a área. Todos os outros são disjuntos.
A área é preenchida com a cor do polígono.
24
Algoritmo de Subdivisão (cont…) Mais de um polígono intercepta, está contido ou circunda
a área. Existe porém um polígono que circunda a área e esta
mais próximo ao observador. A área e preenchida com a cor deste polígono.
A determinação da proximidade com o observador e realizada computando os valores das coordenadas z, dos planos dos polígonos em questão, nos quatro cantos da área.
Se houver um polígono circundante cujos vslores de profundidade sejam menores que todos os outros, então este satisfaz o teste.
As áreas que não se enquadram nesses casos são divididas em mais quatro áreas iguais
25
Algoritmo de Subdivisão
Agora, qual o critério para parar o processo de subdivisão? Uma possibilidade e interrompê-lo quando a resolução
do dispositivo for alcançada. Se, ao ser atingido o número máximo de subdivisões,
nenhum dos quatro casos tiver ocorrido, então a profundidade dos polígonos pertinentes é calculada no centro do pixel. Aquele com menor coordenada z define a colorização (o shading) da área.
26
Algoritmo de Subdivisão
Resumo:1. Inicializar a área como a totalidade do écrã.2. Criar a lista PVPL associada à area, ordenada de acordo com zmim. Atribuir a
cada polígono a sua categoria. Retirar da PVPL os polionos ocultos por um envolvente, e remover também os polígonos disjuntos.
3. Executar os testes de visibilidade:(a) Se todos os polígonos são disjuntos na área (|PVPL|=0), atribuir a cada pixel a cor do fundo.(b) Se |PVPL| = 1 e está classificado como contido, colorir o polígono ocntido e atribuir à restante área a cor do fundo.(c) Se |PVPL|=1 e é um polígono envolvente, atribuir à área a cor do poligono envolvente.(d) Se um poligono envolvente está mas próximo do centro de projecção que todos os outros (ficam ocultos), atribua-se à a´rea a cor dequele polígono.(e) Se á áreado é o pixel (x,y) e não se aplicam os passos 1, 2, 3 e 4, determinar a coordanada z(x,y) do pixel (x,y) de todos los polígonos da lista PVPL. Ao pixel é atribuída a cor do polígono com a menor coordenada z.
4. Se não ocurreu nenhum dos casos anteriores, subdividir a área em 4 parte iguias. Para cada área resultante da subdivisão retornar ao passo 2.
27
Algoritmo do Pintor O algoritmo do pintor (também designado por algoritmo
z-Sort) se baseia em uma lista de prioridades, assumindo que uma imagem correcta ira resultar se os objectos forem exibidos de acordo com as suas prioridades.
Ideia fundamentl é: pintar objectos mais distantes (background) antes de
pintar objectos próximos (foreground) i.e. processa os polígonos a ser pintados no écrã, por ordem das suas distancias relativamente ao centro de projecção.
29
Algoritmo do Pintor
Infelizmente… Qualquer tentativa de ordenar os polígonos baseada
apenas na ordenação por profundidades resulta de ambiguidades
30
Algoritmo do Pintor
Refinando as ideias do algoritmo…1. Ordenar as superfícies poligonais em função da sua coordenada z (profundidade)
2. Resolver situações ambíguas (casos em que os intervalos de ocupação dos polígonos se sobrepõem)
3. Desenhar os polígonos por ordem decrescente de profundidade (menor coordenada z)
32
Algoritmo do Pintor Situações de ambiguidade: Verificar as seguintes 5 testes (condições de
obstrução, por ordem crescente de complexidade):
Testes:
1) Os polígonos não interferem em x?
2) Os polígonos não interferem em y?
3) P esta completamente no semi-espaço, gerado pelo plano de Q, oposto ao do observador? (ver figura (direita-acima)
4) Q esta completamente no mesmo semi-espaço, gerado pelo plano de P, do observador? (ver fig (direita-abaixo))
5) As projecções de P e Q no plano xOy não se sobrepõem?
Se P passa no teste de não obstrução com todos os polígonos, pode ser rasterizado e o próximo polígono da lista passa a ser o novo P.