computação gráfica: aula5: rendering e rasterização

26
Computação Gráfica: Aula5: Rendering e Rasterização http://www.fei.edu.br/ ~psergio [email protected]

Upload: nodin

Post on 19-Mar-2016

22 views

Category:

Documents


1 download

DESCRIPTION

Computação Gráfica: Aula5: Rendering e Rasterização. http://www.fei.edu.br/~psergio [email protected]. Conteúdo:. Rendering Fases do Processo de Realismo Visual Realismo por Passadas Acabamentos não-fotográficos Rasterização Algoritmo de Bresenham para traçado de linhas - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Computação Gráfica: Aula5:  Rendering e Rasterização

Computação Gráfica: Aula5: Rendering e Rasterização

http://www.fei.edu.br/[email protected]

Page 2: Computação Gráfica: Aula5:  Rendering e Rasterização

Conteúdo:

Rendering Fases do Processo de Realismo Visual Realismo por Passadas Acabamentos não-fotográficos Rasterização

Algoritmo de Bresenham para traçado de linhas Rasterização de Polígonos Preenchimento de polígonos por scanline Remoção de Linhas e Superfícies Escondidas

Biografia: Computação Gráfica: Teoria e Prática; Eduardo Azeredo e Aura Conci; Editora Campus; (Volume Antigo!!!)

Page 3: Computação Gráfica: Aula5:  Rendering e Rasterização

O que é o Rendering

A computação gráfica trata da síntese de imagens através do computador. Sintetizar uma imagem não é mostrá-la no computador digitalmente a partir da captura de algo existente. Isso é tratado no Processamento de Imagens. Sintetizar uma imagem (uma cena ou um objeto) é criá-la em termos da definição dos dados dos objetos que a compõe. Isso se faz a partir da geometria da cena, das informações sobre os materiais de que são feitos os objetos (suas cores e suas texturas), das condições de iluminação ambiente; e da posição de observação da cena. Nesse processo de criação sintética, é denominado rendering a fase de Introdução nas cenas, do realismo fotográfico.

Basicamente, podemos descrevê-la por “realismo visual”. Podemos interpretar o processo de rendering como o de converter dados em uma imagem realística ou simplesmente sintetizar um objeto ou cena até ter-se deles uma aparência de algo real e não de formas inteiramente criadas no computador.

Page 4: Computação Gráfica: Aula5:  Rendering e Rasterização

Exemplos de Rendering

Page 5: Computação Gráfica: Aula5:  Rendering e Rasterização

Exemplos de Rendering

Page 6: Computação Gráfica: Aula5:  Rendering e Rasterização

Exemplos de Rendering

Page 7: Computação Gráfica: Aula5:  Rendering e Rasterização

Rendering

Page 8: Computação Gráfica: Aula5:  Rendering e Rasterização

Rendering

Page 9: Computação Gráfica: Aula5:  Rendering e Rasterização

Fases do Processo de Realismo Visual

• Construção do modelo• Transformações lineares• Eliminação de polígonos ou faces escondidas• Clipping• Rasterização• Culling• Coloração, Textura e Iluminação

Page 10: Computação Gráfica: Aula5:  Rendering e Rasterização

Realismo por passadas

• Vantagens do realismo por passadas:a) economia de memóriab) facilidade de introdução de modificaçõesc) maior utilização das imagens estáticasd) pode eliminar o anti-alizinge) integração f) reciclagemg) deph of field (simulação de foco)h) glows (incandescência)

Page 11: Computação Gráfica: Aula5:  Rendering e Rasterização

Realismo por passadas

• Tipos de passadas:

a) Coresb) Iluminaçãoc) Reflexõesd) Sombrase) Efeitos Especiais f) Profundidade

Page 12: Computação Gráfica: Aula5:  Rendering e Rasterização

RasterizaçãoProcesso de conversão da representação vetorial para a matricial.

Page 13: Computação Gráfica: Aula5:  Rendering e Rasterização

Rasterização de Retas

Algoritmo de Bresenham para Traçado de Linhasx = x1y = y1Dx = x2 – x1Dy = y2 – y1m = Dy/Dxe = m – 1/2for i = 1 to Dx do desenhaPonto(x,y) while e >= 0 do y = y + 1 e = e – 1 end while x = x + 1 e = e + mend for

Page 14: Computação Gráfica: Aula5:  Rendering e Rasterização

Rasterização de Polígonos

O processo de determinar quais pixels serão desenhados no preenchimento échamado conversão de varredura (scan conversion), e mostrado na Figura 7.6.B. A scan line 4, por exemplo, pode ser dividida nas regiões x < 1 (fora do polígono), 1 <= x <= 4 (dentro do polígono), 4<x<6 (fora do polígono), 6 <= x 8 (dentro do polígono) e x > 8 (fora do polígono).

Page 15: Computação Gráfica: Aula5:  Rendering e Rasterização

Algoritmo DDA para rasterização de Poligonos

Se abs(x2 – x1) >= abs(y2 – y1) então Tamanho = abs(x2 – x1)else Tamanho = abs(y2 – y1)end if{seleciona o maior dos valores entre Dx e Dy como unidade rasterização}Dx = (x2 – x1) / TamanhoDy = (y2 – y1) / Tamanhoi = 1Enquanto i <= Tamanho faça DesenhaPonto( x, y) {Arredonda x e y: valor arredondado de x e y} x = x + Dx y = y + Dy i = i + 1Fim Enquanto

Page 16: Computação Gráfica: Aula5:  Rendering e Rasterização

Remoção de Linhas e Superfícies Escondidas

Page 17: Computação Gráfica: Aula5:  Rendering e Rasterização

Remoção de Linhas e Superfícies Escondidas

Page 18: Computação Gráfica: Aula5:  Rendering e Rasterização

Remoção de Linhas e Superfícies Escondidas

Os diferentes algoritmos deverão realizar as seguintes tarefas:

•Ler as coordenadas tridimensionais do objeto e armazená-las em forma de matriz.

•Localizar no espaço 3D a posição do observador, através da qual definirá os parâmetros de visibilidade.

•Calcular o vetor normal 3D de cada face do objeto.

•Calcular o vetor da linha de visibilidade para cada face do objeto. Esse vetor é definido pela ligação de algum ponto da face ao observador.

Page 19: Computação Gráfica: Aula5:  Rendering e Rasterização

Remoção de Linhas e Superfícies Escondidas

•Realizar o teste de visibilidade. Isso é feito verificando a magnitude do ângulo formado pela normal à face em consideração e a linha de visibilidade. Esse é o ângulo identificado com a letra grega beta ß. Se o valor absoluto do ângulo ß estiver entre 90° e 180°, a superfície estará invisível. A superfície estará visível se esse ângulo estiver entre –90° e 90°. O teste de visibilidade é feito através do ângulo em um dos lados de um cubo. O teste de visibilidade é o ponto central do algoritmode culling.

Page 20: Computação Gráfica: Aula5:  Rendering e Rasterização

Remoção de Linhas e Superfícies Escondidas

•Definir os vértices (ou cantos) das faces do objeto e armazená-los de formamatricial (raster).

•Verificar os vértices (ou cantos) visíveis, com seus respectivos posicionamentos.

•Traçar as arestas das faces visíveis, que revelarão o objeto como enxergado de um determinado ponto de vista. Se desejado, é possível traçar também as linhas não-visíveis (tracejadas ou não) naquele ponto de vista.

Page 21: Computação Gráfica: Aula5:  Rendering e Rasterização

Hidden Surface Removal (HSR): Algoritmos de remoção de superfícies escondidas

•Algoritmo de Visibilidade por Prioridade ou Algoritmo do Pintor;

•Algoritmo de Eliminação de Faces Ocultas pelo Cálculo da Normal;

•Algoritmo Z-Buffer.

Page 22: Computação Gráfica: Aula5:  Rendering e Rasterização

Algoritmo de Visibilidade por Prioridade ou Algoritmo do Pintor

Usando uma linha simplificada de raciocínio como: se um objeto “A” bloqueia a visão de um objeto “B” e ambos os objetos encontram-se na mesma linha de visão do observador, então o objeto “B” está mais distante do observador que o objeto “A”, é possível criar um algoritmo que calcule a distância dos objetos ao observador, e que dê prioridade à visualização dos objetos mais próximos ao observador.

•Calcula-se a distância ao observador de todas as faces poligonais da cena (quechamaremos de D);

•Ordenam-se todos os polígonos pelo valor da sua distância ao observador,D;

•Resolvem-se as ambigüidades nos casos em que as distâncias ao observador(D) de dois polígonos forem iguais (verificando se ocupam as mesmas posiçõesrasterizadas ou não);

•Desenham-se primeiro os polígonos que tiverem mais distantes do observador(ou seja, os que tiverem maior valor de D).

Page 23: Computação Gráfica: Aula5:  Rendering e Rasterização

Algoritmo de Visibilidade por Prioridade ou Algoritmo do Pintor

Page 24: Computação Gráfica: Aula5:  Rendering e Rasterização

Eliminação de Faces Ocultas pelo Cálculo da Normal

• Ler as coordenadas do objeto no espaço tridimensional, considerando umponto de referência e armazená-las em forma de matriz;

• Localizar no espaço a posição do observador, através da qual serão definidos os parâmetros de visibilidade;

• Calcular o vetor normal de cada face do objeto;

• Calcular o vetor da linha de visibilidade para cada face do objeto;

• Realizar o teste de visibilidade calculando o produto escalar entre os dois vetores: Se n . l > 0, a face estará visível Se n . l < 0, a face estará invisível

• Definir os cantos das faces do objeto e armazená-los em forma matricial;

• Verificar os cantos visíveis, com seus respectivos posicionamentos;

• Traçar as arestas das faces visíveis, que revelarão o objeto como observado deum determinado ponto de vista. Se desejável, é possível traçar também as linhasnão-visíveis naquele ponto de vista.

Page 25: Computação Gráfica: Aula5:  Rendering e Rasterização

Algoritmo Z-Buffer

O algoritmo z-buffer, desenvolvido inicialmente por Catmull [Catmull, 74], é umdos algoritmos de determinação de visibilidade de superfícies mais simples de seimplementar, tanto em software quanto em hardware, e hoje é o mais popular dentreos algoritmos de HSR. Porém, apresenta alto custo de memória e processamento.Requer a alocação de até dois buffers, ou matrizes, em memória, com dimensõesidênticas à tela de apresentação, normalmente denominados buffers de Imagem e deProfundidade.

• Criar e inicializar com a cor de fundo um array bidimensional, que conterá ainformação de cada pixel da tela;

• Inicializar o array com o valor da máxima profundidade;

• Achar a coordenada z para cada ponto do polígono;

• Testar a profundidade z de cada ponto da superfície para determinar a maispróxima do observador;

• Atualizar o valor nos arrays se z estiver mais próximo do observador.

Page 26: Computação Gráfica: Aula5:  Rendering e Rasterização

Algoritmo Z-Buffer

Para cada polígono P da cena Para cada pixel (x, y) de um polígono P computar z_depth na posição x, y se z_depth < z_buffer (x, y) então defina_pixel (x, y, color) troque o valor : z_buffer (x, y) = z_depth