visibilidade - universidade de...

33
1 Visibilidade Antonio L. Bajuelos Departamento de Matemática Universidade de Aveiro

Upload: nguyendung

Post on 11-Nov-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

1

Visibilidade

Antonio L. BajuelosDepartamento de Matemática

Universidade de Aveiro

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

9

Back-face detection

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.

11

Algoritmo Z-Buffer

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.

28

Algoritmo do Pintor

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)

31

Algoritmo do Pintor

Exemplo de situações ambíguas

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.

33

Algoritmo do Pintor Situações de ambiguidade: Se algum dos testes for negativo é necessário determinar a

intersecção das duas superfícies e dividir uma delas em duas partes.

Para esta divisão pode ser utilizado um dos algoritmos de recorte estudados