miércoles, 19 de octubre de 2016

Pipeline Gráfico

Esse post faz parte faz parte da avaliação prática da disciplina Introdução a Computação Gráfica (UFPB - 2016.1), ministrada pelo professor Prof. Christian Pagot. Como segunda avaliação da parte prática devemos fazer a implementação de um  pipeline gráfico.


Conceitos Iniciais 

O que é um pipeline gráfico?


Um pipeline gráfico é a sequência de passos que leva uma cena ou objeto 3D para ser rasterizado em um espaço 2D. O pipeline gráfico a ser implementado é um pipeline gráfico semelhante ao utilizado pela OpenGL. No pipeline gráfico existe um fluxo de transformações e espaços pelo qual o objeto 3D deve passar até que seja rasterizado na tela do computador 2D.

A figura 1 mostra o pipeline gráfico dado em sala de aula.


Figura 1: Estrutura do pipeline gráfico
  Como se pode ver, partimos do Espaço do Objeto e passamos respectivamente pelo Espaço do Universo, Espaço da Câmera, Espaço de Recorte, Espaço Canônico para enfim chegar no Espaço da Tela. A figura 2 mostra o pipeline de modo mais detalhado com os espaços citados acima e as respectivas transformações entre os espaços.


Figura 2: Pipeline de transformação de coordenadas


Coordenadas Homogêneas

Coordenadas homogêneas são um sistema de coordenadas que possui a vantagem que coordenadas de pontos, incluindo pontos no infinito, podem ser representados usando coordenadas finitas. Entretanto, a maior vantagem de utilizar coordenadas homogêneas em computação gráfica é que elas permitem que transformações afins, como a translação, e  transformações projetivas de serem representadas por uma matriz.

Dessa forma utilizamos coordenadas homogêneas com o objetivo de permitir que qualquer transformação seja representada em matriz e assim ser possível combinar todas as transformações em uma única matriz.


Agora que já sabemos a importância de utilizar coordenadas homogêneas, vamos aprender a como converter uma coordenada cartesiana (euclidiana). Como mostrado na figura 3, para transformar uma coordenada euclidiana para uma coordenada homogênea basta acrescentar uma nova coordenada com valor w e multiplicar todas as outras coordenadas pelo o valor w. Em geral, para facilitar os cálculos adota que a coordenada homogênea w = 1.

Figura 3: Coordenada euclidiana e coordenada homogênea

Para converter uma coordenada homogênea para uma coordenada euclidiana basta dividir todas as coordenadas pelo valor da última coordenada e retirar a última coordenada.

Escala

 A escala é uma transformação para modificar o tamanho do objeto em cada um dos seus eixos. A operação de escala em coordenadas homogêneas é mostrada na figura 4.
Figura 4: Escala

Rotação

A rotação no espaço 3D é executada ao redor de um dos eixos do sistema de coordenadas. Assim, escolhemos qual eixo queremos rotacionar e quantos graus serão utilizados. A rotação em coordenadas homogêneas é mostrada na figura 5.

Figura 5: Rotação

Translação

A translação é uma transformação que descola o objeto de posição. A translação só pode ser representada em matriz em coordenadas homogêneas. A translação em coordenadas homogêneas é mostrada na figura 6.
Figura 6: Translação


Pipeline Gráfico

Espaço do objeto

É nesse espaço em que ocorre a modelagem do objeto. Cada objeto é modelado de maneira individual e possui suas próprias coordenadas. O espaço do objeto  é um espaço 3D que não tem limites de extensão, assim o objeto pode ter qualquer dimensão ao longo dos três eixos.
Em geral, cada objeto possui o seu sistema de coordenadas e depois vão se juntar para dividir o espaço do universo. Vale ressaltar que o espaço do objeto só define suas dimensões e não é responsável por definir a posição do objeto na cena. Essa tarefa é responsabilidade do espaço do universo.


Espaço do Universo

O espaço do universo é onde todos os objetos ficam reunidos, portanto dividem o mesmo sistema de coordenadas. É no espaço do universo que toma a cena é formada. Agora com a cena formada devemos registrar a cena através de uma câmera, dessa forma somos levas ao espaço da câmera.

Transformação: Espaço do Objeto → Espaço do Universo

Para transformar os vértices do espaço do objeto para o espaço do universo utilizamos a matriz Model. A matriz Model é composta por uma série de escalas, rotações e translações e cisalhamentos.

Espaço da câmera

 Quando colocamos a câmera na cena temos que transformar todos os pontos do espaço do universo para um novo sistema de coordenadas, o sistema da câmera. Para criar esse novo sistema de coordenadas precisamos informar a posição da câmera (EYE) no espaço do universo, o vetor direção (AT), para onde a câmera aponta, e o vetor (UP), que é o vetor que aponta para parte superior da câmera. Com esse parâmetros podemos criar o sistema de coordenadas do espaço da câmera.


Transformação: Espaço do Universo → Espaço da Câmera

 
A matriz View é  a responsável por transformar os vértices do espaço do universo para o espaço da câmera. Essa matriz é  composta por mais duas operações, uma  rotação e uma translação. Multiplicando as duas operações transferimos o centro da cena para a posição da câmera.

A partir dos parâmetros EYE, AT e UP conseguimos determinar o sistema de coordenada da câmera (xc, yc, zc). O eixo e oposto a AT, isto é, fazemos a diferença entre EYE - AT. A direção xc é obtida pelo produto vetorial de AT por UP e yc pelo produto vetorial xc e zc.
Note que UP não é necessáriamente ortogonal a AT .

.


Espaço de Recorte

Como já possuímos os pontos no espaço da câmera precisamos projetar a cena restante um plano de projeção (view plane) e descartar pontos que não são vistos pelo câmera. Assim, devemos escolher como se as primitivas serão projetadas em perspectiva ou ortogonal.


Projeção Ortogonal


Na projeção ortogonal tanta a forma quanto o tamanho do objeto são mantidos após projetadas no view plane. A projeção ortogonal é uma transformação de um objeto 3D em um objeto bidimensional. Para isso basta que a coordenada Z seja desconsiderada.

Projeção Perspectiva

Na projeção perspectiva, o tamanho e a forma de um objeto são modificados de acordo com a posição no espaço do universo, dando a mesma sensação de distância que temos nos nossos olhos.
Quando realizamos a projeção perspectiva as coordenadas homogêneas podem assumir valores diferente de 1.
Figura 7: Projeção Paralela e Perspectiva


Transformação: Espaço da Câmera → Espaço Projetivo ou de Recorte

 Essa transformação é realizada pela matriz Projection. Essa matriz transforma os vértices do espaço da câmera para o espaço de recorte. A matriz Projection é dada no seguinte formato mostrado na figura 7 e só depende da distância até o view plane.

Figura 8: Matriz projection



Espaço Canônico

Agora devemos homogenizar todas as coordenadas, esse procedimento é feito dividindo todas as coordenadas pelo novo valor da coordenada w. Com esse procedimento ocorre uma distorção na imagem, comprimindo toda a cena e obtemos o espaço canônico. Assim os vértices sofrem uma distorção. Os objetos  mais próximos do view plane câmera ficam maiores enquanto os que estão mais longe ficam menores.


Espaço de Tela

O último procedimento é levar os objetos do espaço canônico para o espaço de tela. Isto é feito multiplicando todos os vértices do espaço canônico pela matriz view port. A matriz view port tem as seguintes operações:
  1. Escala de -1 no eixo y;
  2. Escala de w/2 e h/2 nos eixos x e y (w é número de pixels horizontais e h número de pixels verticais);
  3.  Translação de (w-1)/2 em x e (h-1)/2 em y;
Figura 9:  Mudança do espaço canônico para espaço de tela



Transformação: Espaço “Canônico” → Espaço de Tela

 Na figura 6 é mostrado a cada operação implementada pela matriz ViewPort.
Figura 10: Matriz ViewPort

 

Resultado

No vídeo abaixo é apresentado o resultado de todo o pipeline implementado durante o trabalho.

 

A figura 10 faz a comparação do resultado do pipeline fornecido pelo professor e o implementado.

Figura 11: Resultado do pipeline do professor

Figura 12: Resultado do pipeline implementado

 

Dificuldades Encontradas

As maiores dificuldades encontradas foram a implementação do pipeline de modo que não ocorresse perda de fluxo de informações.

 

Possíveis Melhorias

 As possíveis  melhorias que podiam ser implementadas seriam o preenchimento completo dos triângulos e otimização de código.

Conclusão

 O trabalho proposto foi bem interessante pois proporciona o entendimento do que é um pipeline e o funcionamento do pipeline gráfico implementado pela OpenGL.

Referências Bibliográficas

Notas de aula do Prof. Christian Pagot
https://en.wikipedia.org/wiki/Homogeneous_coordinates
https://www.ntu.edu.sg/home/ehchua/programming/opengl/CG_BasicsTheory.html
https://en.wikipedia.org/wiki/Graphics_pipeline

 


No hay comentarios:

Publicar un comentario