Introdução a Computação Gráfica

Olá pessoal,

Após muito tempo inativo, retorno com uma nova série de postagens muito úteis à estudantes de desenvolvimento de jogos.

A programação de jogos é uma área correlata com a Computação Gráfica (CG). A CG, por sua vez, é um ramo de estudo com fundamentos por vezes mais matemáticos que computacionais. Essa disciplina é ignorada diversas vezes por estudantes mais ansiosos. Isso acaba impedindo o progresso do estudante, ou gerando apenas manipuladores de ferramentas prontas, que ao se depararem com um problema real onde não existe solução direta na engine (e esses problemas são numerosos!), o progresso fica estagnado e o estudante desiste.

Como todo bom estudo deve ser bem fundamentado, vou recomendar uma bibliografia para CG, Fundamentals of Computer Graphics 4th Edition do Peter Shirley, Michael Ashikhmin e Steve Marschner. Trata-se de um livro teórico, com fundamento matemático. O foco não é o ensino de ferramentas ou API gráfica como OpenGL, e sim os fundamentos teóricos por detrás da implementação das mesmas. Os algoritmos apresentados são analisados do ponto de vista teórico, com ligeira implementação em pseudocódigo.

ext

Outro livro muito interessante é o nacional  Fundamentos de Computação Gráfica, do  Instituto de Matemática Pura e Aplicada dos autores Luiz Velho e Jonas Gomes. Um livro completamente matemático e denso, com uma ótica matemática sobre a CG, sem preocupação com pseudocódigo.

scm-06_1

Definição: o que é Computação Gráfica?

CG pode ser definido brevemente como o conjunto de métodos e técnicas para transformar dados em imagem através de um dispositivo gráfico. Imagens podem ser totalmente sintéticas (geradas por computador) ou produzidas pela manipulação de fotografias.

Trata-se de uma área de estudo multidisciplinar no qual física, matemática, engenharia, interação humano-computador, design gráfico e arte desempenham importantes papeis. Por exemplo, física é usada para simulação de luz e animação, matemática para descrever formas no espaço e engenharia para melhor utilização de memória e processamento.

Áreas de estudo

Existem basicamente quatro áreas de estudo na CG. Cada uma trata de um problema diferente, com diferentes entradas e saídas. A figura abaixo exibe um esquema das mesmas.

Sem título

Modelagem Geométrica

Trata do problema da descrição e estruturação de dados geométricos.

  • Entrada: dados 
  • Saída: dados

Síntese/Geração de imagens

Criação sintética das imagens, ou seja, as representações visuais de objetos criados pelo computador a partir das especificações geométricas e visuais de seus componentes.

  • Entrada: dados
  • Saída: imagem

Processamento de Imagens

Considera o processamento das imagens na forma digital e suas transformações, por exemplo, para melhorar ou realçar suas características visuais.

  • Entrada: imagem
  • Saída: imagem

Análise de Imagens (Visão Computacional)

A partir de uma ou várias imagens, visa obter informações geométricas, topológicas ou físicas sobre os dados que as originaram. Lida com dispositivos que compreendam e interpretem corretamente objetos reais da mesma forma como nosso cérebro faz.

  • Entrada: imagem
  • Saída: dados

Percepção tridimensional

Capacidade que o ser humano tem de distinguir a forma, as cores, a textura e a relação espacial existente entre os objetos de uma porção do mundo real.

Existem categorias de estímulos visuais usados pelo cérebro para formar uma imagem 3D, são elas:

  • informações monoculares
  • informações óculo-motoras
  • informações estereoscópicas

Informações monoculares

Inerentes à imagem formada na retina

Noção de perspectiva linear

Aparente redução dos tamanhos e das distâncias entre os objetos, à medida que o observador se distancia destes. Os olhos não veem em perspectiva, mas por um fenômeno estereoscópico (duas imagens de um mesmo objeto, tomadas de pontos de vista distintos).

A perspectiva pode ocorrer entre 1 e 3 pontos de fuga principais:

ponto de fuga

Conhecimento prévio do objeto

Serve tanto para determinar a distância absoluta a partir do observador, quanto as distâncias relativas entre os objetos. O tamanho aparente serve para determinar qual deles está mais próximo ou mais distante.  A figura A nos permite uma clara noção de profundidade; a B não nos permite entender qual parte do galho da árvore se encontra à frente do outro. 

Sem títulos

A ausência de uma referência para nos auxiliar na percepção pode causar percepções errôneas de tamanho e posição de objetos.

Oclusão

Responsável pela informação da posição relativa dos objetos. É a obstrução da visão de um objeto por um outro que está mais próximo do observador e sobre uma mesma direção de visão.

oclusao

Densidade das texturas

Objetos possuem em sua aparência algum tipo de padrão com uma certa regularidade. À medida que os padrões aparecem mais densos e menos detalhados, mais distantes estarão do observador. No exemplo abaixo, quanto mais distante, menos resolução e detalhes são percebidos na textura. Essa característica da visão permite o uso da técnica de Level of Detail (LOD -> Nível de Detalhe), que permite o uso de texturas e modelos 3D menos detalhados para objetos mais distantes da visão.
texture.png

As texturas também auxiliam na percepção do movimento. Uma bola de basquete pode ser facilmente entendida quando gira, já uma esfera de metal totalmente polida tem uma percepção de movimento mais difícil.

densidade de textura

Variação da reflexão da luz

A mudança na intensidade da luz refletida ao longo de uma superfície de um objeto fornece informações sobre a forma e a curvatura da superfície desse objeto.

superficie

Sombras

Determinação da posição de um objeto em relação a um piso colocado abaixo deste, por exemplo.

sombra

Informações visuais óculo-motoras

São fornecidas pelo movimento dos olhos.

Acomodação

Os músculos ciliares dos olhos relaxam ou contraem para mudar o formato do cristalino. O objetivo de alterar o foco dos objetos projetados na retina em função da distância desses objetos do observador.

Na figura abaixo, vemos a diferença de contração muscular para alterar o foco dos objetos de próximo para distante.

adomodacao

Convergência

Considera o grau de rotação dos olhos ao longo do eixo de visão (quando um objeto é focado) para obter informações a respeito da posição e da distância. Os olhos convergem mais para olhar um objeto perto, do que um distante, e isto significa que os músculos devem contrair mais para olhar objetos próximo.

A figura permite entender que para objetos distantes, o grau de convergência entre os olhos é menor que para objetos próximos. Por isso ficamos vesgos quando focamos no nosso dedo e o aproximamos do nariz, por exemplo.

convergencia

Informações visuais estereoscópicas

Disparidade binocular

Como os olhos estão posicionados em lugares diferentes, cada olho vê uma imagem de forma diferente. O cérebro usa essas diferenças para obter a distância relativa dos objetos. Ou seja, é a habilidade de perceber a profundidade com pares de imagens em estéreo.

Observe que uma reta foi traçada na direção do parque central das imagens. À direita elas são comparadas para demonstrar a diferença angular entre ambas.
estereoscopia

Finalizando

Por enquanto, isso é tudo. Fique atento aos próximos posts!

Referências

AZEVEDO, Eduardo; CONCI, Aura. Computação gráfica: teoria e prática. Elsevier, 2003. Cap. 1.

MARSCHNER, Steve; SHIRLEY, Peter. Fundamentals of computer graphics. CRC Press, 2015. Cap. 1.

HUGHES, John F. et al. Computer graphics: principles and practice. Pearson Education, 2014. Cap. 1.

SALOMON, David. The computer graphics manual. Springer Science & Business Media, 2011.

VELHO, Luiz; GOMES, Jonas. Fundamentos de Computação Gráfica. Associação Instituto de Matemática Pura e Aplicada, IMPA, 2015. Cap. 1.

Resposta