Você está na página 1de 96

Computação Gráfica

Conceitos Fundamentais

Responsável pelo Conteúdo:


Prof. Dr. Pedro Henrique Cacique Braga

Revisão Textual:
Prof. Me. Luciano Vieira Francisco
Conceitos Fundamentais

• Introdução;
• Áreas da Computação Gráfica;
• Imagem Digital;
• Pixel;
• Espaços de Cores;
• Dimensões da Imagem Digital;
• Sistemas de Imagens Digitais;
• Pipeline de Renderização;
• Primitivas.

OBJETIVO DE APRENDIZADO
• Estabelecer os princípios de computação gráfica, definindo os principais conceitos de pro-
gramação gráfica, bem como os conceitos associados ao traçado de formas geométricas por
meio de operações gráficas.
UNIDADE Conceitos Fundamentais

Introdução
A expressão Computação Gráfica ou a sua abreviação CG tem se tornado cada vez
mais popular. Mas você sabe qual é o seu significado na computação? Temos visto a in-
dústria do entretenimento utilizar esta nomenclatura há alguns anos e ela tem se tornado
comum para a maioria das pessoas.

Neste caso, quando mencionamos CG nos referimos ao filme produzido por compu-
tação, seja ele completo ou apenas alguns efeitos especiais. É raro hoje em dia encon-
trarmos filmes que não façam uso da computação.

Mas aqui tratamos somente dos efeitos especiais como poderes de super-heróis ou a
criação de mundos fantasiosos? Não, a computação gráfica está relacionada até mesmo
com o ajuste de cor da imagem do filme, ou da remoção de ruídos que podem ser gera-
dos por recursos analógicos, como uma determinada câmera ou um conjunto específico
de iluminação.

Precisamos, então, estabelecer os fundamentos para esta área da computação para


que possamos entender todo o seu alcance, de modo que nesta Unidade estudaremos as
principais áreas da computação e o seu uso para diferentes fins – além do entretenimento.

Áreas da Computação Gráfica


Começaremos discutindo as áreas em que a computação gráfica atua, de modo a
analisar cada uma e estabelecer relações entre os seus fundamentos. Temos 3 grandes
áreas que formam a CG:
• Análise de imagens;
• Síntese de imagens;
• Processamento de imagens.

Veja, na Figura 1, que estas áreas possuem regiões de técnicas e estudos comparti-
lhados. É comum que 2 ou mais áreas trabalhem os mesmos conceitos básicos e existe
uma porção comum entre elas – exatamente o que trataremos nesta oportunidade, os
fundamentos da CG.

Quando observamos cuidadosamente cada uma destas áreas de estudo percebemos


que existe um ponto em comum: a Matemática. Sim! Precisamos estudar conceitos mate-
máticos para trabalharmos com a manipulação de uma imagem. E por quê? Bem, come-
cemos definindo o que é uma imagem.

8
Processamento de imagens

Síntese de imagens Análise de imagens

Figura 1 – Áreas da computação gráfica

Imagem Digital
De acordo com Gonzales e Woods (2010), uma imagem pode ser definida como uma
função bidimensional f ( x, y ) , em que x e y são as coordenadas espaciais (plano), e a
amplitude de f em qualquer par de coordenadas ( x, y ) é chamada de intensidade ou
nível de cinza da imagem nesse ponto.

Veja que interessante: estamos criando um mapeamento de algo que podemos en-
xergar, dando a cada ponto deste mapa um conjunto de coordenadas ( x, y ) que se re-
lacionam a uma intensidade, nível de cinza, ou ainda e mais especificamente a uma cor.

Então, se temos um conjunto de dados de entrada ( x, y ) que gera uma saída especí-
fica f , contamos com uma relação matemática.

Note que assim é possível interpretar regiões da imagem para entender o que há
naquela área do plano cartesiano, ou mesmo transformar um conteúdo em outro, mani-
pulando a função que define a imagem.

Quando x, y e os valores de intensidade são quantidades finitas e discretas, dizemos


que temos uma imagem digital.

Na Figura 2 podemos analisar cada região de uma imagem e comparar os valores de


intensidade de cada um dos seus pontos como, no caso destacado, a cor exata de uma
das folhas da planta sobre a mesa.

9
9
UNIDADE Conceitos Fundamentais

Figura 2 – Análise de imagem digital: pixel


Fonte: Acervo do conteudista

Perceba que indiretamente já entramos em uma das grandes áreas da CG: a análise
de imagens. Assim, podemos dizer que trabalhamos com uma imagem digital, pois é
possível determinar o valor de um ponto por meio de números finitos.
Ainda na Figura 2, o valor exato do verde foi expresso em duas notações diferentes:
a primeira é a notação hexadecimal (#60873D) e a segunda indica o mesmo valor no
formato Red, Green, Blue (RGB) (96, 135, 61).
Bem, definiremos outros dois conceitos que fazem parte da representação digital de
uma imagem e são muito importantes para nós: pixel e modelos de cores.

Pixel
Como vimos, uma imagem é composta por um número finito de elementos que pos-
suem uma coordenada e um valor de intensidade, sendo chamados de elementos pictó-
ricos, elementos de imagem, pels ou o mais comum dos nomes: pixel (GONZALES;
WOODS, 2010).
Ou seja, é a menor unidade dentro de uma imagem. O termo pixel é utilizado mais
comumente para determinar esta unidade em uma imagem digital. Logo, toda imagem
digital pode ser definida, então, pelo conjunto de seus pixels.
Veja, na Figura 3, por exemplo, a representação de um personagem de um jogo sim-
ples, desenhado com poucos pixels – note que em (a) temos a imagem em seu tamanho
original e em (b) uma ampliação para que possam ser percebidos os valores de intensi-
dade de cada pixel:

10
Figura 3 – Pixel art: (a) tamanho original; (b) imagem ampliada
Fonte: Acervo do conteudista

Espaços de Cores
Os modelos de cores ou espaços de cores permitem a especificação de cores em um
formato padronizado para atender a diferentes dispositivos gráficos ou a aplicações que
requerem a manipulação de cores (PEDRINI; SCHWARTZ, 2008).

Basicamente trabalhamos com a representação de um espaço tridimensional em que


os eixos de cada coordenada cartesiana representam uma cor primitiva e a composição
destes valores gera a intensidade que percebemos. Assim, podemos ter várias represen-
tações diferentes da mesma cor, por exemplo:

Hex: #18A5F4
RGB: 24, 165, 244
HSL: 202, 91, 53
HSB: 202, 90, 96
Figura 4 – Diferentes representações de uma cor

Veja que apesar de termos o mesmo valor de pixel, a forma como é representado
depende do padrão adotado. Existem alguns modelos de cores que são mais utilizados
em trabalhos de computação gráfica.

Modelo RGB
RGB é a sigla para Red, Green, Blue – ou vermelho, verde e azul. Estes três valores
são as cores primárias, de modo que a combinação delas reflete uma cor específica, tal
como mostra a Figura 5:

11
11
UNIDADE Conceitos Fundamentais

Figura 5 – Modelo RGB


Fonte: Freepik

Veja que se trata de um modelo aditivo, ou seja, o somatório das cores primárias
produz a cor branca (localizada no centro da Figura 5).

Modelo CMY
De forma semelhante, o modelo CMY representa as cores primárias como sendo
ciano, magenta e amarelo – Cyan, Magenta, Yellow. Veja que as cores primárias deste
modelo são as secundárias do modelo RGB. Trata-se de um padrão subtrativo, ou seja,
o somatório das cores primárias forma o preto.

Figura 6 – Modelo CMY


Fonte: Freepik

Este modelo normalmente é utilizado para materiais impressos, uma vez que é possí-
vel criar o pigmento preto com a soma dos outros primários.

Existem muitos outros modelos de cores que podem ser utilizados e você pode conhecer
mais. Leia a matéria “Gerenciamento de cores #4: O que são modelos e espaços de cores?”.
Disponível em: https://bit.ly/3tDQbd0

12
Representação Hexadecimal
Além dos modelos, podemos definir as representações destes valores. É comum encon-
trarmos uma representação de cor no formato hexadecimal. Trata-se de uma forma de
apresentar o modelo RGB, em que se utilizam 6 letras ou números para representar os
três canais principais.

Utiliza-se o sistema de numeração em base 16, no qual os algarismos básicos são: 0 1


2 3 4 5 6 7 8 9 A B C D E F. Todos os demais números podem ser formados com estes
algarismos. O número 11, na base 10, por exemplo, equivale a B na base 16.

Desta forma, podemos representar a intensidade em cada canal variando de 0 a 255


(na base decimal), ou de 00 a FF na base hexadecimal. Veja um exemplo:

A cor #ff0000 pode ser quebrada em quatro partes: o indicador da base (#) e 3 canais
de cores (de 2 a 2 algarismos); logo, temos: # ff 00 00

Na ordem, os canais se referem ao modelo RGB, ou seja, o primeiro é a intensidade


de vermelho, o segundo a intensidade de verde e o terceiro a intensidade de azul. O soma-
tório destas intensidades é a cor que percebemos.

Veja, então, que é possível analisar um valor na notação hexadecimal e ter uma boa
noção da cor que ela se refere. No caso anterior, temos o valor máximo para vermelho
e o mínimo para os demais, o que nos mostra um vermelho puro.

Logo, se temos #ffffff, trata-se do valor máximo para os três canais. Como vimos, o
modelo RGB é aditivo, portanto, temos o branco. De forma análoga temos que #000000
equivale ao preto.

Ainda que não seja possível perceber a cor exata com variações mais complexas,
pode-se ter uma ideia do intervalo de cor que se refere como, por exemplo, o valor
apresentado na Figura 7:

Hex: #14FF00
RGB: 20, 255, 0

Figura 7 – Representação hexadecimal

Pelos valores no canal vermelho temos 1416, que equivale a 2010. Considerando o
intervalo entre 0 e 255, 20 é pouco, não é mesmo? Então, temos pouco pigmento ver-
melho. De forma análoga, temos o valor máximo no verde (FF16 ou 25510) e o mínimo
no azul (0016 ou 010).

É de se esperar, então, que seja um tom de verde quase puro, com um leve toque de
vermelho – o que neste caso é quase imperceptível. Com o uso contínuo desta notação
você será capaz de identificar as cores com mais facilidade. É uma questão de treino.

13
13
UNIDADE Conceitos Fundamentais

Dimensões da Imagem Digital


Agora que já entendemos melhor em que se constitui uma imagem digital e como
ela pode ser representada, abordaremos outros conceitos, tais como as dimensões de
uma imagem.

A dimensão está relacionada aos planos cartesianos usados para localizar um valor
no espaço. Uma imagem unidimensional nada mais é do que um único eixo e contém
valores ordenadamente localizados, variando de acordo com a posição neste eixo – ima-
gine uma única fileira de pixels na tela.

Mas quando variamos estes elementos tanto na largura quanto na altura (eixos X e Y),
passamos a trabalhar com uma imagem bidimensional. Temos, então, uma fotografia,
por exemplo.

Já percebeu em qual aspecto queremos chegar? Um modelo tridimensional possui


três coordenadas (X, Y e Z), ou seja, largura, altura e profundidade. Então, quando
trabalhamos com a modelagem de um cubo, ou outro elemento tridimensional (3D),
operamos com a criação de uma imagem digital.

Sistemas de Imagens Digitais


Já temos uma boa base para continuarmos a nossa conversa sobre computação grá-
fica. Como vimos, temos 3 grandes áreas neste contexto. Vamos, então, descobrir qual
o papel de cada uma delas.

Processamento de Imagens
Este é o ramo da Computação Gráfica (CG) que trabalha com a manipulação da ima-
gem digital e é comumente conhecido como PDI, ou Processamento Digital de Imagens.
Trabalhos nesta área envolvem a transformação da imagem em algo novo por meio de
rotinas de código.

Tratam-se de dados de entrada e saída das funções de desenho. Considerando os pixels


como valores numéricos que equivalem à intensidade da cor em um ponto específico do
plano ou espaço, podemos aplicar uma série de funções matemáticas que modificam tal
valor com base em uma certa regra.

Exemplos básicos de PDI incluem a diminuição de ruídos, o realce cores, a restauração


de imagens entre muitos outros aspectos.

Veja que temos uma imagem base como entrada da nossa função e uma saída espe-
rada. Queremos, então, definir quais operações devem ser criadas para que o resultado
seja alcançado – a Figura 8 ilustra este processo de forma bem simples: dadas estas
plantas como imagem de entrada, quais operações devemos aplicar sobre cada pixel
para obter a seguinte imagem de saída?

14
Figura 8 – Processamento digital de imagens
Fonte: Acervo do conteudista

Este é um processo bem simples, por sinal. No modelo RGB, um tom de cinza existe
quando os valores dos três canais (R, G e B) são iguais. Assim, para converter uma
imagem em cinza, bastará alterarmos a intensidade de cada pixel para a média dos três
valores. A nossa função, então, seria algo do tipo:

PR + PG + PB
f ( x, y ) =
3

Em que:
• PR: componente vermelho do pixel no ponto P(x,y);
• PG: componente verde do pixel no ponto P(x,y);
• PB: componente azul do pixel no ponto P(x,y).

Se criarmos um loop que percorre todos os pixels da imagem, aplicando esta função
e colocando o novo valor na mesma coordenada de uma imagem de saída, teremos a
imagem final em escala de cinza.

A finalidade do PDI depende do seu contexto: podemos usar funções que melhoram
uma fotografia, tais como os filtros de uma rede social como o Instagram, por exemplo;

15
15
UNIDADE Conceitos Fundamentais

ou ainda podemos utilizar deste recurso para melhorar uma imagem de tomografia para
que seja mais bem interpretada.

As aplicações são inúmeras, sendo que a única condição é que trate uma imagem de
entrada gerando uma imagem de saída.

Análise de Imagens
Esta segunda área está ligada à interpretação da imagem. Trata-se da busca por in-
formações, por meio de algoritmos computacionais, de acordo com as características
da imagem.

Nesta área, a entrada do algoritmo é uma imagem, mas a saída é tida em outro
formato. No exemplo da nossa imagem base, um algoritmo de análise poderia retornar
um texto contendo como descrição da imagem: Três vasos brancos, em cima de uma
mesa de madeira, contendo plantas suculentas artificiais.

Perceba que os trabalhos nesta área envolvem técnicas de processamento de imagens


para a otimização dos resultados, embora o resultado em si não seja uma nova imagem
melhorada, mas um outro formato de dados.

Os algoritmos de análise de imagem obtêm parâmetros descritivos da imagem. Aqui


foi dado um exemplo de texto obtido da imagem, mas imagine uma ação de um aplica-
tivo de música, por exemplo, que interpreta a capa de um disco e reproduz as músicas
deste álbum musical – agora se trata da imagem como entrada, transformando a saída
da função em som.

A análise de imagens é utilizada para o reconhecimento de padrões, a visão com-


putacional, extração de conhecimento das imagens (mineração de imagens), entre
outros fatores.

Para o caso exemplar da tomografia usaríamos PDI para melhorar a qualidade da


imagem a ponto de conseguirmos identificar algum padrão, tal como uma mancha es-
cura em determinada parte da imagem. Os algoritmos utilizados para encontrar estes
padrões fazem parte da análise de imagens.

Visão computacional é o processo de modelagem e replicação da visão humana


usando software e hardware (DATA SCIENCE ACADEMY, 2018).

A visão computacional é responsável por capturar a imagem do mundo (no seu de-
terminado contexto), extrair informação e tomar alguma decisão sobre ela. Imagine um
robô que deve abrir uma porta sempre que uma pessoa se aproximar: uma câmera seria
como os seus olhos, capturando a imagem do mundo (ambiente ao redor da porta);
analisaria a imagem procurando por padrões que indiquem uma pessoa; caso encontre,
dispararia um comando para um sistema de hardware que abre a porta.

Veja como a Boston Dynamics tem revolucionado o mundo da robótica com visão computa-
cional. Disponível em: https://youtu.be/f6zuyK6fOsI

16
Síntese de Imagens
A síntese de imagens é o oposto da análise. Ela transforma dados em imagens, que
podem ser vetoriais ou matriciais, tais como as imagens médicas de ressonância magné-
tica, ultrassom e tomografias, por exemplo.

Imagine algumas planilhas no Office Excel com dados numéricos com as notas de
todos os alunos desta Disciplina a fim de se construir um gráfico mostrando o desem-
penho da turma. Pode-se elaborar um algoritmo que analise os dados, sintetizando-os
em forma de gráfico com eixos horizontal e vertical e pontos representando cada nota.

Outra aplicação seria usar técnicas de inteligência artificial que inserem objetos reais
e modelos de textura nas cenas e nos objetos tridimensionais gerados.

Podemos, em outro exemplo, buscar informações de um sensor de chuva e criar uma


imagem que combine a entrada de uma câmera com gotas de chuva artificiais geradas
pelo computador.

Ou ainda os processos de realidade aumentada que utilizam componentes de análise


de imagem para encontrar determinado marcador na imagem. O marcador, por sua vez,
gera dados como o tipo do marcador e a sua posição no mundo real. A síntese da ima-
gem seria responsável por acrescentar um objeto tridimensional sobre esse marcador.

Pipeline de Renderização
Renderização é o processo de criar a imagem que deve ser apresentada ao usuário em
um dispositivo como um monitor, por exemplo. É composto de outros processos bem defi-
nidos que se relacionam a alguma das áreas da computação gráfica que aqui comentamos.

É importante notar que estamos trabalhando com processos via software que devem
ser convertidos em procedimentos de hardware, tal como o acender de um minúsculo
Light Emitting Diode (LED) em uma posição determinada de um monitor, por exemplo.

Assim, devemos estruturar uma sequência de ações que analisam a informação,


aplicando as transformações matemáticas necessárias e enviando ao hardware as ins-
truções claras para a sua ação. Esta sequência de ações é conhecida como pipeline
de renderização.

O OpenGL, por exemplo, é uma aplicação multiplataforma que suporta diferentes


linguagens de programação para a renderização de gráficos 2D e 3D. O seu pipeline
de renderização tem alguns passos principais, a saber:

17
17
UNIDADE Conceitos Fundamentais

Figura 9 – Pipeline de renderização do OpenGL


Fonte: VETTER, et al., 2007

Veja que a aplicação apresenta a posição de cada vértice de uma figura geométrica,
como um triângulo, por exemplo. Entretanto, as coordenadas cartesianas destes vértices
precisam ser conectadas e, de alguma forma, indicar quais pixels devem ser preenchidos.

O vertex shader conectará estes vértices por meio da equação das retas entre cada
um deles. O programa geométrico fará as alterações necessárias para o contexto do
desenho – aqui, por exemplo, poderíamos espelhar o triângulo.

A rasterização e o recorte são responsáveis por sobrepor esta figura matemática so-
bre uma matriz de pixels e identificar quais fazem parte da imagem.

O programa de fragmento, ou o nosso fragment shader atribuirá aos pixels que se


encontram na região de recorte as cores que fazem sentido para o contexto. Por fim,
será criado um modelo de matriz com as cores determinadas para cada pixel, formando
a nossa imagem digital.

Primitivas
Primitivas são os elementos gráficos mais simples que podem ser utilizados para o
desenho em uma aplicação. São diretamente relacionadas a modelos matemáticos bási-
cos e com elas é possível criar qualquer outra forma de desenho.

Primitivas 2D
Dividiremos as primitivas com base na dimensão da imagem; de modo que começando
pelas imagens bidimensionais, temos as seguintes primitivas, mostradas na Figura 10:
• Ponto: é a primitiva mais básica e representa um espaço no plano cartesiano, com
coordenadas x e y e pode ter apenas um valor associado a ele, representando a
sua cor;
• Linha: é um segmento de reta, em termos matemáticos, e é formada por meio de
dois pontos. Pode ter alguns parâmetros alterados, como a espessura, cor, o estilo
e comprimento (a distância entre os pontos);
• Polilinha: é um elemento composto por vários segmentos de linhas abertas;
• Polígono: é um elemento fechado composto por linhas;

18
• Elipse: é um elemento circular composto de centro, raio menor e raio maior, po-
dendo ser configurado como um círculo perfeito (raios iguais) ou não;
• Arco: é um segmento de elipse aberta.

Figura 10 – Primitivas básicas 2D


Fonte: Acervo do conteudista

Primitivas 3D
As primitivas 3D são representadas em espaços com três eixos e representam os meno-
res elementos que podem ser criados. Vale ressaltar que todos os editores de modelos 3D tra-
balham com estas primitivas e acrescentam algumas outras, de acordo com o seu contexto:
• Cubo: é o elemento composto por 6 faces quadradas;
• Esfera: é o elemento com raios circulares repetidos em todos os ângulos a partir
do seu ponto central;
• Cilindro: é composto por uma série de círculos empilhados, ou um sólido de revo-
lução ou mesmo extrusão de um círculo em um eixo perpendicular;
• Cone: é semelhante ao cilindro, mas o raio de uma das extremidades é igual a zero,
formando uma ponta.

A Figura 11 mostra as primitivas tridimensionais básicas:

Figura 11 – Primitivas básicas 3D


Fonte: Acervo do conteudista

Com isso terminamos os fundamentos da computação gráfica.

19
19
UNIDADE Conceitos Fundamentais

Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:

Vídeos
Computação gráfica
https://youtu.be/-4_OU95nKuU

Leitura
Introdução ao OpenGL
https://bit.ly/2Q7yYe8
O que é CGI e computação gráfica
https://bit.ly/33wWDId
Introdução à computação gráfica
https://bit.ly/3tGfwTz

20
Referências
GONZALEZ, R. C.; WOODS, R. C. Processamento digital de imagens. São Paulo:
Pearson Prentice Hall, 2010.

O QUE É visão computacional? Data Science Academy. 24 jan. 2018. Disponível


em: <http://datascienceacademy.com.br/blog/o-que-e-visao-computacional>. Acesso
em: 30/01/2021.

PEDRINI, H.; SHWARTZ, W. R. Análise de imagens digitais: princípios, algoritmos e


aplicações. São Paulo: Thomson Learning, 2008.

SIQUEIRA, F. de. Aula 5 – processamento de imagens e primitivas. [20--]. Disponível


em: <https://sites.google.com/site/profferdesiqueiracompgrafica/aulas/aula-5---proces-
samento-de-imagens-e-primitivas>. Acesso em: 30/01/2021.

VETTER, C. et al. Non-rigid multi-modal registration on the GPU. Proc Spie, 2007.

21
21
Computação Gráfica
Transformações Geométricas

Responsável pelo Conteúdo:


Prof. Dr. Pedro Henrique Cacique Braga

Revisão Textual:
Prof.ª Dr.ª Selma Aparecida Cesarin
Transformações Geométricas

• Introdução;
• Transformações Geométricas;
• Coordenadas Homogêneas.

OBJETIVOS DE APRENDIZADO
• Apresentar o pipeline de renderização gráfica e seus principais componentes;
• Definir os conceitos relacionados a primitivas básicas bi e tridimensionais, bem como suas
transformações geométricas no plano e no espaço.
UNIDADE Transformações Geométricas

Introdução
Como sabemos, a Computação Gráfica é responsável pela interpretação, pelo trata-
mento e pela apresentação de imagens computacionais.

Vimos que o processo de representação de uma imagem bidimensional envolve uma


matriz com valores de cores e analisamos uma imagem por meio da interpretação des-
ses valores e a sua relação no plano da imagem (coordenadas X e Y).

O Processamento Digital de Imagens é a área da Computação Gráfica que recebe


uma imagem como entrada e, por meio de operações matemático-computacionais, gera
uma imagem de saída. Portanto, trabalha com o tratamento da imagem.

Nesta Unidade, vamos falar sobre as transformações básicas de uma imagem bidimen-
sional. Mais precisamente, trabalharemos com as primitivas básicas e os modelos mate-
máticos para transformar uma imagem inicial em outra.

Vale ressaltar aqui, que existem processos específicos para tratar uma imagem matri-
cial, isto é, analisando especificamente os valores dos pixels da imagem.

Nesse caso, você trabalhará com matrizes de convolução, transformadas no domínio


espacial e no domínio da frequência e filtrado espacial, entre outras operações. Esse é
um assunto para outro componente curricular do nosso Curso.

Trataremos aqui, então, dos processos relacionados à transformação geométrica das


primitivas que já conhecemos.

Uma segunda ressalva é que trabalharemos com primitivas em duas dimensões, mas,
para transformar primitivas em três dimensões, você pode seguir procedimentos análogos.

Transformações Geométricas
Pelo que falamos até agora, podemos sintetizar o conceito de transformada: alterar
um gráfico em outro aplicando regras bem definidas.

Podemos abordar essas regras como modelos matemáticos, relacionados à translação,


à rotação, à escala e à inclinação. Essas são as transformadas básicas.

Quando tratamos de transformações no Plano, elas são chamadas Transformadas 2D.

Basicamente, estamos observando um ponto pertencente à primitiva e calculando a


sua nova posição no plano ou no espaço.

Portanto, é muito importante entendermos os diferentes Sistemas de Coordenadas.

Vamos falar, então, sobre cada uma das transformações básicas e como elas podem
ser combinadas para um resultado mais preciso.

8
Translação
Podemos mover um ponto no plano XY por meio da adição de um determinado valor
à sua posição original. A esse “movimento” atribuímos o nome Translação.

Na Figura 1, temos a representação dessa transformação. Veja que temos os eixos


cartesianos representados (eixo X na horizontal e Y na vertical) e um ponto P represen-
tado no gráfico (XAKTLY, 2021).
Podemos descobrir suas coordenadas fazendo uma projeção dele nos eixos. Assim,
descobrimos que ele está na posição 2 no eixo X e também na posição 2 no eixo Y,
como mostram as linhas tracejadas mais claras.
Veja que sempre representamos um ponto pela letra que o identifica (nesse caso, P)
e os valores de suas coordenadas entre parênteses, sendo sempre a primeira para X e
a segunda para Y (Você deve se lembrar bem desta notação das aulas de Matemática).

P´ (5,4)
4

T = [3,2]

P (2,2)
2

X
2 5
Figura 1 – Translação: exemplo
Agora, veja que fizemos a translação do ponto P em três unidades no eixo X e duas
no eixo Y. Por isso, representamos a transformação por meio de uma matriz: T = [3,2].
A translação acontece somando os valores de cada eixo ao valor original do ponto.
Por isso, temos o ponto trasladado P’(5,4).
Vamos, então, formalizar esse conceito em regras matemáticas?
O que fizemos na Figura 1 pode ser generalizado na Figura 2.

9
9
UNIDADE Transformações Geométricas


y1

Ty

P
y0

X
Tx
x0 x1
Figura 2 – Translação genérica

Veja que o Ponto P agora traz apenas a representação pelo seu identificador, mas po-
demos verificar que suas coordenadas são P(x0,y0). Da mesma forma, temos P’(x1,y1).

Quando observamos a diferença entre eles, temos os valores Tx e Ty, que compõem
a nossa transformada de translação.

Pela análise do gráfico, podemos dizer que:

1 x0 + Tx
x=
1 y 0 + Ty
y=

E para formalizarmos essas operações, podemos escrevê-las de acordo com a nota-


ção matricial:

 x1  x0  Tx 
=   + 
 y1  y 0  Ty 

Com essa operação, podemos, então, representar uma translação genérica para ob-
ter a coordenada de um ponto trasladado.

Portanto, a matriz de transformação de translação é igual a:

Tx 
T = 
Ty 

10
Escala
Vamos fazer uma análise análoga para a escala. Agora, teremos um fator que usare-
mos na transformação para X e Y, mas faremos uma multiplicação dos fatores.

P´(4,4)
4

2 P(2,2)

X
2 5

Figura 3 – Escala

Na Figura 3, veja um pequeno quadrado de 2 unidades de largura e altura. Vamos


analisar o ponto superior direito dele, indicado pela letra P. Se quisermos escalar esse
quadrado para que o seu tamanho seja o dobro, devemos multiplicar cada uma dessas
coordenadas por 2 (GATEVIDYALAY, 2021).

Assim, o fator de escala seria 2, para todos os eixos. Mas podemos usar, ainda, um
fator de escala diferente para cada eixo.

Então, podemos dizer que:

 Sx 0 
[ x1 y1] = [ x0 y 0] *  
0 Sy 

Lembre-se de que, na multiplicação de matrizes, multiplicamos linha por coluna, soman-


do as parcelas, ou seja:
=x1 Sx * x0 + 0* y 0
=y1 0* x0 + Sy * y 0

Assim, temos que:


x1 = Sx * x0
y1 = Sy * y 0

11
11
UNIDADE Transformações Geométricas

Que é a forma simplificada, como falamos anteriormente.

Então, veja que estamos tentando representar as transformações por meio de matrizes.

Mais adiante, veremos como podemos criar uma forma homogênea para essa repre-
sentação. Portanto, a matriz de transformação de escala é igual a:

 Sx 0 
S= 
0 Sy 

Veja, ainda, que estamos analisando apenas um ponto da primitiva, como no caso do
quadrado em que verificamos o ponto superior direito, mas para termos a transformação
completa da primitiva, repetimos o processo para todos os seus pontos (o que vale para
todas as transformações).

Rotação
O processo de rotação envolve alguns passos a mais, mas pode ser facilmente inter-
pretado por meio da Geometria Analítica e da Trigonometria.

P´(x´,y´)
r


P(x,y)
r


X
Figura 4 – Rotação

Na Figura 4, temos a representação dessa transformação espacial. Veja que o Ponto


P(x,y) é o ponto original que queremos rotacionar. Perceba, ainda, que existe uma dis-
tância r (raio) entre ele e a origem e um ângulo Φ entre esse raio e o eixo X.
Nossa intenção é aplicar uma rotação de um ângulo Θ a esse ponto específico, man-
tendo a distância entre o novo ponto e a origem.

Coordenadas Polares
Ao tratarmos dos ângulos e suas distâncias para a origem, estamos trabalhando com
um novo Sistema de Coordenadas: as Coordenadas polares.

12
Lembre-se de que esse Sistema não trabalha com pontos representados nos eixos X
e Y, mas os representa de acordo com o raio e o ângulo, como mostra a Figura 5.

P´(x´,y´)
r


r P(x,y)

X

Figura 5 – Sistemas de coordenadas

Trabalhar com Coordenadas polares na rotação é um pouco mais simples, pois temos
domínio espacial maior dos ângulos a serem aplicados.

Mas lembre-se de que é sempre possível fazer a conversão de um Sistema de Coordenada


para outro. Afinal, o ponto é o mesmo no espaço, apenas representado de forma diferente.

Vejamos como é feita a conversão entre os Sistemas de Coordenadas antes de traba-


lharmos com a rotação em si.

A Figura 6 mostra um caso genérico de um ponto no plano XY. Veja que podemos
perceber um triângulo retângulo, que é formado pelos catetos com os valores de X e Y,
e a hipotenusa com o valor de r (o raio, ou a distância do ponto à origem).

x
P(x,y)

r
y

Figura 6 – Coordenadas polares

13
13
UNIDADE Transformações Geométricas

Como temos aqui um triângulo retângulo, é possível relacionar os valores de x e y (do


Sistema Cartesiano) com os valores de r e α (do Sistema Polar).

Como sabemos, o seno de um ângulo é a relação entre o cateto oposto e a hipotenu-


sa, enquanto o cosseno é a relação entre o cateto adjacente e a hipotenusa.

Sendo assim:
y
sin (α ) =
r
x
cos (α ) =
r

Se isolarmos os valores de x e y nas equações acima, teremos:

y = r *sin (α )

x = r *cos (α )

Veja que temos, então, uma conversão simples entre os Sistemas de Coordenadas,
relacionando os valores de x e y aos valores de r e α.

É importante notar que estamos trabalhando em Sistemas que têm o mesmo ponto
como origem. Caso a nossa origem seja deslocada por algum motivo, precisamos acres-
centar os valores da nova origem aos valores de x e y calculados:

y c y + r *sin (α )
=

x= cx + r *cos (α )

em que cx e cy são os valores relativos ao centro da nova circunferência (ou a nova origem).

Aplicando a Rotação
Agora que sabemos como relacionar os Sistemas de Coordenadas, voltemos à Figura 4.

Vamos aplicar as relações trigonométricas ao ponto P’. Veja que, por se tratar de
uma rotação, mantemos o valor do raio r e variamos apenas o componente angular.

Sendo assim, precisamos determinar o valor do ângulo total entre o raio (ponto P’ à
origem) e o eixo x.

Observando a Figura, percebemos que o ângulo total para esse ponto é a soma dos
ângulos Φ (referente ao ponto original).

Sendo assim, temos:

=y ' r *sin (φ + θ )

=x ' r *cos (φ + θ )

14
Aplicando as regras de trigonometria para seno e cosseno de uma soma de ângulos,
temos:
=y ' r *cos (φ ) sin (θ ) + r*sin (φ ) cos (θ )

=x ' r *cos (φ ) cos (θ ) − r*sin (φ ) sin (θ )

Veja que estamos considerando as coordenadas do ponto P’, ou seja, x’ e y’. Mas
queremos uma relação com o ponto original P(x,y). Portanto, podemos usar a relação
de x e y com o ângulo Φ:
y = r *sin (φ )

x = r *cos (φ )

Isolando o cosseno e o seno nessas duas relações e substituindo nas anteriores, temos:

x y
y′ = r * *sin (θ ) + r* *cos (θ )
r r
x y
x′ = r * *cos (θ ) − r* *sin (θ )
r r

O que nos leva às seguintes conclusões:

y′ = x *sin (θ ) + y*cos (θ )

x′ = x *cos (θ ) − y*sin (θ )

Se reescrevemos essas relações de forma matricial, temos:

 cos (θ ) sin (θ ) 
[x ' y '] = [ x y]  
 − sin (θ ) cos (θ ) 

Lembre-se de que, na multiplicação de matrizes, multiplicamos os valores de uma linha


por uma coluna e, portanto, temos o equivalente às conclusões geradas.

Então, temos a seguinte matriz de rotação:

 cos (θ ) sin (θ ) 
R= 
 − sin (θ ) cos (θ ) 

Coordenadas Homogêneas
Temos as três transformações principais. Apesar de existirem outras transformações,
como reflexão ou inclinação, por exemplo, pode-se dizer que Translação, Escala e Ro-
tação são as principais.

15
15
UNIDADE Transformações Geométricas

Relembre as matrizes que encontramos anteriormente:

Tx 
• T = 
Ty 
 Sx 0 
• S= 
0 Sy 
 cos (θ ) sin (θ ) 
• R= 
 − sin (θ ) cos (θ ) 

Veja que temos matrizes de tamanhos diferentes e mais: as operações entre elas são
diferentes.

Na translação, por exemplo, fazemos uma adição de matrizes para encontrar o pon-
to desejado, enquanto na escala e na rotação, temos uma multiplicação.
O ideal seria termos matrizes de tamanho semelhante e que pudéssemos aplicar a
mesma operação. Assim, poderíamos criar uma única matriz de transformação, como
resultante das operações anteriores.
Pensando nisso, a fim de garantir homogeneidade entre essas matrizes e operações,
foram determinadas as Coordenadas Homogêneas.
Para que possamos fazer uma multiplicação entre as matrizes (e não uma soma,
como na translação), precisamos padronizar o tamanho das matrizes e, para isso, acres-
centar uma dimensão a elas.
Assim, temos matrizes de tamanho 3x3 que podem ser multiplicadas pelas coorde-
nadas originais sem que haja perda ou acréscimo de informação.
Veja o caso da translação:

 x ' 1 0 ∆ x   x 
 y '
= 0 1 ∆   y 
   y 

 1  0 0 1   1 

Vamos fazer a multiplicação das matrizes juntos para comprovar que o resultado será
o mesmo que foi apresentado anteriormente.
Lembre-se de que ∆ é uma letra grega associada a algum tipo de variação e por isso
a estamos usando aqui.
Multiplicamos a primeira linha da matriz de transformação pela coluna da matriz de
coordenadas para obter o primeiro valor da matriz de resultados.

Assim:
=x′ 1* x + 0* y + ∆ x *1

Portanto,

x′ = x + ∆ x

16
Se fizermos o mesmo para as demais linhas, teremos:

=y′ 0* x + 1* y + ∆ y *1
1 = 0* x + 0* y + 1*1

ou seja:

x′ = x + ∆ x
y′= y + ∆ y
1=1

Veja que podemos descartar a terceira igualdade, mas ela foi importante durante os
cálculos da translação.

O mesmo processo vale para as demais transformações. Dessa forma, temos as se-
guintes matrizes de transformação usando as coordenadas homogêneas:

Translação

 x ' 1 0 ∆ x   x 
 y '
= 0 1 ∆   y 
   y 

 1  0 0 1   1 

Escala

 x '   λx 0 0  x 
 y ' =  0 λy 0   y 
  
 1   0 0 1   1 

Rotação

 x '  cos θ − sin θ 0  x 


 y ' =  sin θ cos θ 0   y 
  
 1   0 0 1   1 

Você consegue provar que os resultados das operações com as matrizes de transformação
são os mesmos obtidos anteriormente neste material?
Faça como fizemos aqui com a translação.

Vejamos o seguinte exemplo de aplicação da matriz de rotação.

A Figura 7 apresenta o Ponto P(2,3) e se deseja obter os valores das coordenadas do


novo ponto P’ após a aplicação da rotação de P em 30 graus.

17
17
UNIDADE Transformações Geométricas

P´(x´,y´)
P´(2,3)

30º

X
Figura 7 – Aplicação da matriz de rotação

Para isso, substituímos os valores na equação da transformação de rotação:

 x '  cos 30 − sin 30 0   2 


 y ' =  sin 30 cos 30 0   3 
    
 1   0 0 1  1 

 x '  2 cos 30 − 3sin 30 


 y '
=  2sin 30 + 3cos 30 
   
 1   1 

 3 1
 2* − 3* 
2 2
 x ' 
 y '  2* 1 + 3* 3 
=
   2 
2 
 1  
 1 
 
 

 x '   0.23
 y ' = 3.59 
   
 1   1 

Portanto, P’(0.23, 3.59).

Veja a confirmação gráfica na Figura 7.

18
Composição de Transformações
Se uma transformação T1 é seguida por uma transformação T2, então, o próprio
resultado pode ser representado por uma única transformação T, que é a composição
de T1 e T2, tomada nessa ordem.

Isso é escrito como T = T1 ∙ T2 (TUTORIALSPOINT, 2021).

Essa definição nos traz duas informações muito importantes:


• É possível combinar transformações sequenciais em uma única matriz;
• A ordem em que as transformações acontecem é importante.

Para comprovar a primeira afirmação, façamos as operações de translação, depois


a escala de forma separada e depois calculemos a matriz de transformação geral, para
comparar os resultados.

Tomemos o ponto inicial P(2,3) e apliquemos uma translação de 2 unidades em X e


1 em Y:

 x '  1 0 2   2 
 y ' =  0 1 1   3 
    
 1  0 0 1  1 

 x ' 1* 2 + 0*3 + 2*1


 y '=  0* 2 + 1*3 + 1*1 
   
 1   1 

 x ' 4
 y ' =  4 
   
 1  1 

Portanto, após a translação, o ponto obtido é P’(4,4). Agora, apliquemos uma escala
de 2 unidades em cada eixo:

 x ' 2 0 0 4
 y ' =  0 2 0   4 
    
 1   0 0 1  1 

 x '  2* 4 + 0* 4 + 0*1
 y ' = 0* 4 + 2* 4 + 0*1
   
 1   1 

 x '  8
 y ' = 8
   
 1  1

19
19
UNIDADE Transformações Geométricas

Após as duas operações, encontramos o ponto R(8,8).

Para comprovar que é possível gerar uma matriz de transformação única e geral combi-
nando as duas transformações, vamos calcular a matriz e depois aplicar ao ponto original.

Se o resultado for o mesmo, comprovamos a afirmação para o exemplo em questão:

 λx 0 0  1 0 ∆ x 
=T  0 λy 0  0 1 ∆ y 
 0 0 1  0 0 1 

 λx 0 λx *∆ x 
=T  0 λy λ y *∆ y 
 0 0 1 

Importante!
Perceba que a construção da matriz geral é uma multiplicação das matrizes em ordem
inversa da aplicação. Portanto, no caso mostrado, começamos com a matriz de escala e
multiplicamos pela de translação

Substituindo os valores:

 2 0 2*2 
T =  0 2 2*1 
 0 0 1 

E aplicando ao ponto original:

 x ' 2 0 4 2
 y ' =  0 2 2   3 
    
 1   0 0 1  1 

 x '  2* 2 + 0*3 + 4*1


 y ' = 0* 2 + 2*3 + 2*1
   
 1   1 

 x '  8
 y ' = 8
   
 1  1

Obtivemos, então, o ponto R(8,8), exatamente igual ao anterior.

Para comprovar a segunda afirmação, veja um exemplo de matriz geral de transfor-


mação calculada por meio de uma escala, depois uma translação:

20
 1 0 ∆ x   λx 0 0
=T 0 1 ∆ y   0 λy 0 
0 0 1   0 0 1 

 λx 0 ∆x 
=T  0 λy ∆ y 
 0 0 1 

E agora, invertendo a ordem e fazendo uma translação, depois uma escala:

 λx 0 0  1 0 ∆ x 
=T  0 λy 0  0 1 ∆ y 
 0 0 1  0 0 1 

 λx 0 λx *∆ x 
=T  0 λy λ y *∆ y 
 0 0 1 

Veja, então, que é possível comprovar que a ordem das operações gera, sim, resul-
tados diferentes.

Praticando
Vamos fazer um exercício juntos.

Na Figura 8(a), tem-se um retângulo formado pelos pontos ABCD. Deseja-se rotacio-
nar o retângulo em 45 graus, tendo o centro da rotação no ponto A.

Calcule a matriz geral de transformação e os valores finais dos pontos ABCD.

Y Y

C
B
D C
D

A B A
X X
Figura 8 – Rotação com origem determinada (a) Estado inicial e (b) Estado final

Este exercício traz uma informação importante, que é o centro da rotação. Se apli-
carmos a rotação, simplesmente, rotacionaremos a Figura em torno da origem do plano.

21
21
UNIDADE Transformações Geométricas

Uma forma simples de realizar a rotação em torno de um eixo é realizar uma trans-
lação da Figura para que o ponto desejado (A) esteja localizado na origem do plano
(0,0). Em seguida, fazemos a rotação e trasladamos novamente o objeto com o mesmo
deslocamento inicial.

Pela observação das escalas do plano, temos os seguintes pontos iniciais:

A(1,1), B(3,1), C(3,2), D(1,2)

Para que o ponto A chegue à origem, precisamos movimentá-lo nos sentidos negati-
vos dos eixos X e Y, em uma unidade cada.

O que significa que teremos uma translação com os valores ∆ x =−1 e ∆ y =−1 .

Em seguida, temos uma rotação de 45 graus, portanto θ = 45 .

E para a volta, teremos uma translação contrária à inicial. Portanto, usaremos os


coeficientes −∆ x e ∆ y .

Agora que já definimos os coeficientes de cada transformação, vamos criar a matriz:

 x ' 1 0 −∆ x  cos θ − sin θ 0  1 0 ∆ x   x 


 y '
= 0 1 −∆   sin θ cos θ 0  0 1 ∆ y   y 
   y

 1  0 0 1   0 0 1  0 0 1   1 

Importante!
Observando a equação completa, fica mais fácil perceber o porquê de termos a ordem
inversa das matrizes de transformação, pois com a matriz com o ponto original está mais
à direita da equação.

Nossa matriz de transformação, então, é:

1 0 −∆ x  cos θ − sin θ 0  1 0 ∆ x 
=T 0 1 −∆ y   sin θ cos θ 0  0 1 ∆ y 
0 0 1   0 0 1  0 0 1 

Multiplicando a primeira pela segunda (sempre linha vezes coluna):

cos θ − sin θ −∆ x  1 0 ∆ x 
=T  sin θ cos θ −∆ y  0 1 ∆ y 
 0 0 1  0 0 1 

22
E, por fim, a multiplicação das matrizes restante:

cos θ − sin θ ∆ x cos θ − ∆ y sin θ − ∆ x 


=T  sin θ cos θ ∆ x sin θ + ∆ y cos θ − ∆ y 
 0 0 1 

Com a matriz criada, podemos substituí-la na equação e aplicar os coeficientes esta-


belecidos:

 x ' cos 45 − sin 45 −1*cos 45 + 1*sin 45 + 1  x 


= y '  sin 45 cos 45 −1*sin 45 − 1*cos 45 + 1  y 
    
 1   0 0 1   1 

Para o ponto A:

 2 2 2 2 
 − − + + 1
2 2 2 2
 x '   1
= y '  2 2

2

2  
+ 1 1
   2 2 2 2
  1
 1   0 0 1  
 
 
 2 2 
 − 1 
2 2
  
x '  1
= y '  2 2  
− 2 + 1 1
   2 2
 1    1
 0 0 1  
 
 

 2 2 
 − +1 
2 2
 x '  
 y ' =  2 2 
   + − 2 + 1 
 2 2 
 1 
 1 
 
 

 x '  1
 y ' = 1
  
 1  1

23
23
UNIDADE Transformações Geométricas

Façamos o mesmo processo para o ponto B:

 2 2 
 − 1 
2 2
 x '    3
= y '  2 2  
− 2 + 1 1
   2 2
 1    1
 0 0 1  
 
 

 2 2 
 3 − +1 
2 2
 x '  
 y '= 3 2 + 2 − 2 + 1

   2 2

 1   
 1 
 
 

 x '   2.41
 y ' =  2.41
   
 1   1 

Para o ponto C:

 2 2 
 − 1 
2 2
 x '   3
= y '  2 2  
− 2 + 1  2 
   2 2
 1    1 
 0 0 1  
 
 
 2 2 
 3 −2 +1 
2 2
 x '  
 y '= 
 3 2 2 
   + 2 − 2 + 1 
 2 2 
 1 
 1 
 
 

 x '  1.71 
 y ' = 3.12 
   
 1   1 

24
Para o ponto D:

 2 2 
 − 1 
2 2
 x '   1 
= y '  2 2  
− 2 + 1  2 
   2 2
 1    1 
 0 0 1  
 
 

 2 2 
 −2 +1 
2 2
 x '  
 y ' =  2 2 
   + 2 − 2 + 1 
 2 2 
 1 
 1 
 
 

 x '  0.29 
 y ' = 1.71 
   
 1   1 

Sendo assim, os pontos originais A(1,1), B(3,1), C(3,2) e D(1,2), após uma rotação de
45 graus em torno do ponto A, geram os seguintes pontos:

A(1,1), B(2.41, 2.41), C(1.71, 3.12), D(0.29,1.71)

Observe novamente a Figura 8b para perceber que esses pontos correspondem


(aproximadamente) aos pontos da imagem.

Nesta Unidade, trabalhamos com as três principais transformações geométricas no


plano.

Vimos, ainda, que podemos combinar suas matrizes para criarmos transformações
mais complexas, como a rotação em torno de um ponto.

Você pode, de forma análoga ao exercício proposto, aplicar as transformações


para qualquer forma bidimensional, calculando a transformação de cada um dos seus
pontos principais.

25
25
UNIDADE Transformações Geométricas

Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:

Vídeos
2D Transformation
https://youtu.be/SLWCc-mcd-I
Transformation matrix for position vector | Matrices | Precalculus | Khan Academy
https://youtu.be/Kh8HKAxdEyw
Matrix Transformations and the Homogeneous Coordinate System
https://youtu.be/IiXB6tYtY4w
Transformações lineares e matrizes | A essência da Álgebra Linear, capítulo 3
https://youtu.be/kYB8IZa5AuE

26
Referências
2D Translation in Computer Graphics. Definition. Examples. Gatevidyalay. [S. l.]
2021. Disponível em: <https://www.gatevidyalay.com/2d-transformation-in-computer-
-graphics-translation-examples/>. Acesso em: 11/03/2021.

2D Transformation. Tutorials Point. [S. l.] 2021. Disponível em: <https://www.tuto-


rialspoint.com/computer_graphics/2d_transformation.htm>. Acesso em: 11/03/2021.

XAKTLY MATRICES that manipulate 2D vectors. [S. l.] 2021. Disponível em: <ht-
tps://xaktly.com/Matrix2Dtransformation.html/>. Acesso em: 11/03/2021.

27
27
Computação Gráfica
Modelagem 3D

Responsável pelo Conteúdo:


Prof. Dr. Pedro Henrique Cacique Braga

Revisão Textual:
Prof.ª Dr.ª Selma Aparecida Cesarin
Modelagem 3D

• Introdução;
• Modelagem 3D;
• WebGL;
• Determinando a Geometria;
• Animação;
• Modelagem Procedimental;
• Extrusão e Revolução.

OBJETIVO DE APRENDIZADO
• Com base no pipeline de renderização, apresentar as Técnicas Básicas de Modelagem Tridi-
mensional Programática, realizando operações em Malhas Poligonais e Superfícies.
UNIDADE Modelagem 3D

Introdução
Agora que já conhecemos um pouco sobre as bases da Computação Gráfica e como in-
terpretamos as imagens digitalmente, podemos começar a criar elementos mais complexos.

Antes de começar, é importante relembrarmos a pipeline de renderização do OpenGL,


que vai servir de base para o que faremos experimentalmente.

A Figura 1 mostra os passos da pipeline:

Vertex Programa Rasterização Programa de Operações do


Aplicação
shader geométrico e recorte Fragmento frameBuffer

Figura 1 – Pipeline de Renderização do OpenGL


Fonte: Adaptada de VETTER et al., 2007

É importante termos esse diagrama em mãos, pois trabalharemos com essas etapas
do processo de renderização. Manipularemos os shaders (vertex e fragment) para cons-
truirmos nossas próprias primitivas.
Conectando ainda com o que estudamos sobre Transformações Espaciais, podemos
perceber que, para transformar um objeto no espaço, temos de aplicar uma série de
operações matemáticas (representadas pelas Matrizes de Transformação) a cada um dos
pontos da forma geométrica.
Agora, observando novamente a Figura 1, podemos perceber que essas transforma-
ções podem acontecer entre o vertex shader e o Programa Genérico, pois ambos são
responsáveis pela determinação da posição de cada um dos pontos da forma geométrica.
Podemos, então, fazer uma conexão entre o que vimos até agora.
Vamos, então, começar a discutir como podemos aplicar esse conhecimento no Có-
digo, e extrapolar o que vimos sobre transformações no plano para o espaço.

Modelagem 3D
É bem provável que você já tenha experimentado algum software de Modelagem Tri-
dimensional, como Blender, Maya ou Cinema4D, por exemplo, ou, talvez, algum ainda
mais simples, como o SketchUp.
Esses sistemas foram criados para possibilitar a geração de imagens tridimensionais,
para simplificar o trabalho de construir um arquivo pensando na coordenada espacial de
cada um dos vértices do objeto.

Na prática, o que eles fazem é criar uma interação visual com o usuário, mas, por
trás, realizam todos os cálculos geométricos necessários.

8
O que vamos discutir nesta Unidade é a forma como esses cálculos são realizados.
Obviamente, não pretendemos construir aqui um Sistema Complexo, mas apresentar os
fundamentos de CG.
Assim como vimos com as formas bidimensionais, as figuras tridimensionais são re-
presentações dos pontos no espaço.
Existem várias formas de se representar um objeto, mas um dos formatos mais co-
nhecidos e utilizados hoje em dia (inclusive pelos softwares citados) é o OBJ.
Esse formato de arquivo representa cada ponto (vértice) e suas conexões, formando faces.
A Figura 2 apresenta um arquivo no formato OBJ, que representa um cubo simples
e, ao lado, sua representação gráfica.

Para visualizar um arquivo OBJ on-line, você pode acessar o site.


Disponível em: https://bit.ly/3gBXbT1

Apesar de o arquivo parecer complexo, olhe novamente. Ele é mais simples do


que parece.
Veja que ele começa com dois comentários, usando o símbolo #. Nesse caso, o objeto
foi criado pelo Blender, como mostram os cabeçalhos.
Na sequência, ele nos diz que o arquivo utiliza uma Biblioteca de Material (mtllib) que
está no arquivo separado chamado cube.mtl. Depois, a linha 4 começa com a letra o
(O minúsculo), indicando que ali começa um objeto chamado cube.
Aí começa uma série de linhas com a letra v, indicando a Coordenada de cada um
dos seus vértices. Portanto, apresenta a letra v, depois três valores numéricos, para os
eixos X, Y e Z, respectivamente.
Depois temos os vértices de textura, que seguem o mesmo padrão, agora usando as
letras vt.
Esses vértices indicam onde serão aplicadas as texturas em cada face. Os vértices
de normais (vn) indicam um vetor perpendicular a cada face, para que sejam feitos os
cálculos de iluminação.

Figura 2 – Cubo representado em arquivo OBJ


Fonte: Reprodução

9
9
UNIDADE Modelagem 3D

Agora que já temos todos os vértices, podemos começar a conectá-los. Isso é feito
com as linhas começando com a letra f. Ela indica cada um dos triângulos que compõem
uma face do objeto 3D.
Os números indicam os vértices criados anteriormente.
Veja, então, que é possível criar um objeto tridimensional em um Bloco de Notas
qualquer (salvando o arquivo com a extensão .obj).
Obviamente, esse é um trabalho enorme se a forma geométrica for mais complexa. E é aí
que nós, programadores, entramos com a construção de algoritmos que criam modelos 3D.

WebGL
Uma Biblioteca de Computação Gráfica bem simples e disponível em quase todos
os navegadores modernos é a WebGL, uma variação do OpenGL voltada para a web
(TUTORIALS POINT, 2021). Usaremos essa Biblioteca para nossos exemplos e prática
nesta Unidade.
Para isso, vamos criar um site simples. Veja o Código do nosso arquivo index.html:

Figura 3
Fonte: Reprodução

Esse é o Código da nossa página principal e há dois pontos a serem observados aqui:
• O corpo da página tem apenas uma tag canvas, com um id que usaremos no có-
digo em Javascript;
• Veja que há um arquivo Javascript adicionado logo no cabeçalho da página. Esse
é o arquivo que usaremos para programar o nosso espaço 3D e, construindo o
arquivo main.js, temos o seguinte ponto de partida:

Figura 4
Fonte: Reprodução

10
Veja bem o que estamos fazendo:
• Criamos uma função chamada main (linhas 1 a 15) e a atribuímos ao evento de
carregar da página (linha 17);
• Na função main, buscamos o elemento de Canvas do HTML e alteramos o seu
tamanho para preencher a página completa (linhas 2 a 4);
• Criamos uma variável gl, que receberá o contexto do Canvas. Nesse caso, um
contexto de WebGL;
• Verificamos se o navegador suporta WebGL, apresentamos uma mensagem, caso
contrário, e finalizamos o algoritmo;
• Caso seja possível, damos seguimento ao algoritmo, determinando qual a cor de
limpeza do Canvas (linha 12). Usamos 4 valores, um para cada componente do
Sistema RGB (vermelho, verde e azul) e um para a transparência (alpha). Todos
variando de 0 a 1;
• Disparamos o comando de limpar o buffer de cor.

É importante notarmos que todo o pipeline de renderização (Figura 1) é executado a


uma taxa de quadros por segundo.

Assim, temos de limpar a tela sempre, e depois reconstruir o que foi calculado. A cor
de limpeza é usada para isso, e nos traz um efeito de cor de fundo da tela.

Portanto, no nosso exemplo, o Canvas deve aparecer preto na tela. Nosso objetivo é
apresentar um cubo, como mostra a Figura 3:

Figura 5 – Cubo representado no Canvas em WebGL


Fonte: Reprodução

Para esse exemplo, trabalharemos com cada um dos vértices do cubo, definindo sua
posição no espaço e sua cor.

Em seguida, vamos trabalhar com as transformações geométricas do cubo, para que


ele tenha uma rotação específica no espaço. Veremos, ainda, como configurar a posição
da câmera e do espaço de visualização.

Importante!
Todo o conteúdo desse exemplo se encontra no seu Ambiente Virtual de Aprendizagem.

11
11
UNIDADE Modelagem 3D

Determinando a Geometria
Ainda no nosso Código de exemplo, vamos inserir alguns trechos de Código entre o
teste do contexto do WebGL e a limpeza do Canvas.

Começaremos pelos vértices, pelos índices e pelas cores:

Figura 6
Fonte: Reprodução

Ok!

Veja o que acontece aqui.

Criamos um array para todos os pontos que compõem o cubo. Eles foram separados
por linhas que representam os 4 vértices de uma face (6 linhas: uma para cada face).

Veja que dei um espaço maior entre os valores, para indicar cada um dos vértices.
Temos, então, 72 valores nesse array, sendo 3 para cada vértice (x, y e z), 4 vértices por
face e 6 faces.

Em seguida, as cores são determinadas para cada um dos pontos criados anteriormente.

Veja que dividimos visualmente na mesma sequência, para ter uma compreensão
mais rápida. Veja os 3 primeiros valores, por exemplo (0, 0, 1), representam o azul, pois
têm o menor valor nos canais R e G e o maior no canal B.

Por fim, temos um array com os índices dos vértices que compõem cada face.

Se fizermos um relativo com o arquivo OBJ, apresentado no começo da Unidade, po-


demos perceber que esse Código poderia ser criado fazendo uma varredura das linhas
do arquivo, acrescentando os valores encontrados nos vetores correspondentes.

Nosso próximo passo é criar um buffer para cada uma das propriedades em que
estamos trabalhando (vértices, cores e faces):

12
Figura 7
Fonte: Reprodução

Depois, criamos os shaders que usaremos na renderização:

Figura 8
Fonte: Reprodução

Nesse caso, criamos duas variáveis que recebem strings com o que seria o conteúdo
dos arquivos separados do vertex shader e do fragmente shader.

Estamos usando uma linguagem específica de shaders aqui, mas, basicamente, para
o vértice, são criadas 3 matrizes (Pmatrix, Vmatrix e Mmatrix), que serão responsáveis
pela projeção, visualização (câmera) e movimentação (Transformadas Geométricas) de
cada um dos vértices.

Sua função main calcula a coordenada com base nas matrizes e define a cor do vértice.

Veja que o Fragmente Shader é mais simples, pois apenas verifica a cor dos vértices
para criar uma interpolação (o que gera um gradiente, caso dois vértices conectados
tenham cores diferentes).

Por fim, as linhas 72 a 83 criam os shaders, buscam sua fonte (as variáveis anteriores)
e compilam o seu Código.

13
13
UNIDADE Modelagem 3D

Adicionamos, ainda, algumas instruções para que os nossos algoritmos consigam se


comunicar com o shader, como, por exemplo, as linhas 87 a 89, que buscam as matri-
zes do shader para o Código:

Figura 9
Fonte: Reprodução

Dessa forma, estamos conectando o que o shader interpreta sobre a posição e a cor
de cada vértice, com variáveis no Javascript que nos permitem manipular o objeto.

E é aí que podemos manipular o cubo criado para que esteja na posição que desejamos.

Veja no Código a seguir, em que criamos três variáveis temporárias no js para essa
manipulação.

As matrizes de movimento e visualização são matrizes identidade. Assim, podemos


aplicar as Transformadas que já conhecemos (Rotação, Translação e Escala).

Caso não mudemos algo, a identidade garante que será a configuração padrão.

A função get_projection () foi criada no nosso Código e retorna à projeção de um


ponto no espaço sobre o plano.

Figura 10
Fonte: Reprodução

Projeção ortogonais sobre subespaços: Disponível em: https://bit.ly/35pcB82

14
As linhas 122 até 128 configuram como queremos mostrar o objeto. Veja que fa-
zemos uma translação de –10 unidades no eixo Z, na linha 122, isto é, andamos com
a câmera no eixo Z negativo (saindo da tela do computador), por 10 unidades, o que
realiza um efeito de zoom out sobre o espaço.

Por fim, rotacionamos o cubo nos três eixos, com ângulos que nos permitem visua-
lizar ao menos 3 faces.

As funções de rotação também foram criadas no arquivo do Código principal, para


aplicar as Matrizes de Transformação, como vimos na Unidade anterior.

Veja que elas apenas aplicam no Código o que já estudamos na Matemática.

Por fim, vamos dizer ao WebGL que desenhe esses pontos na tela, ou seja, os últimos
passos da renderização, de acordo com a Figura 1:

Figura 11
Fonte: Reprodução

Veja que aqui estamos habilitando a profundidade de campo na cena e para que
tenhamos um campo de visão tridimensional, pintamos a tela (como tínhamos feito no
começo), e depois começamos a definir qual é a área de visão (viewport), aplicamos as
matrizes que calculamos, colocamos nos bufferes e, por fim, desenhamos os elementos.

Esse não foi um processo complexo (apesar de parecer). É um Código que pode ser
reaproveitado para desenhar outras figuras, variando os valores dos arrays iniciais.

Assim, temos aqui um renderizador de formas geométricas tridimensionais.

Caso queira, um desafio interessante é tentar criar um interpretador de OBJ. Você


deve ler o arquivo linha a linha, interpretar os primeiros caracteres da linha para saber
do que se trata e separar os valores na sequência, substituindo os valores dos arrays.

Animação
Nessa mesma linha, podemos entender a animação como a sobreposição rápida
de imagens.

Lembre-se de que o WebGL já faz essa sobreposição por nós. Assim, precisamos
apenas começar a variar as transformações. Já temos as matrizes. Então, só precisamos
criar uma função que varia algum parâmetro de tempos em tempos.

15
15
UNIDADE Modelagem 3D

Por exemplo, podemos realizar a rotação constante no eixo Y, podemos determinar


qual o valor dessa variação e aplicar a rotação a cada quadro.

Veja:

Figura 12
Fonte: Reprodução

Aqui, usamos a função setInterval do Javascript, para chamar todo o Código de


desenho, uma vez a cada quadro. Criamos, ainda, uma variável FPS que contém a taxa
de atualização.

Como a função setInterval recebe um valor em milissegundos, escolhemos a taxa e


realizamos a divisão de 1000 por essa taxa.

No Código, colocamos uma taxa de 60 quadros por segundo, por exemplo.

Veja, ainda, que zeramos a rotação nos outros eixos, deixando apenas uma variação
constante na rotação do eixo Y. Assim, temos um movimento uniformemente variável.

Se quisermos fazer um movimento acelerado, basta incrementarmos o valor do ân-


gulo dentro da função, definindo, assim, o conceito de aceleração. Quanto maior esse
incremento, maior a taxa de atualização, portanto, ele parecerá cada vez mais rápido.

Experimente outras animações, como a translação do objeto ou da câmera, por exemplo.

Modelagem Procedimental
O termo procedimental está associado à noção de criado por meio de um algoritmo.
Sendo assim, a modelagem procedimental nada mais é do que a geração de modelos
tridimensionais por meio de uma lógica estruturada.

No exemplo anterior, vimos como criar um cubo. Definimos as regras específicas


para criação de suas propriedades e apresentação delas na tela. Mas podemos fazer
regras mais complexas para Modelos mais complexos.

É muito comum, por exemplo, usarmos a Modelagem Procedimental de Terrenos em


jogos, como mostra a Figura 4.

16
Figura 13 – Geração procedimental de terrenos
Fonte: OLSEN, 2004

Para dar um dinamismo maior aos jogos, é comum que as fases tenham alguns ele-
mentos gerados por um algoritmo de Modelagem 3D.
Nesse caso, o nivelamento do terreno pode ser criado com base em um algoritmo de
ruído. O que significa que cada vértice dessa malha determina a altura do terreno e o
valor da translação em Y é determinado por esse algoritmo.
Olsen (2004) apresenta um Método interessante de criação de relevo com base em
ruídos simples combinados, como o Perlin Noise, por exemplo.
A Figura 5 mostra um dos resultados da sua proposta, combinando diferentes trans-
formações para obter um ruído característico de terreno.
Uma vez que essa imagem foi gerada, podemos tomar cada pixel e analisar o seu
valor, sendo que quanto mais escuro o seu valor, mais fundo será um vale no terreno e,
quanto mais claro, mais alto será um monte.

Figura 14 – Ruído para geração de terreno


Fonte: OLSEN, 2004

17
17
UNIDADE Modelagem 3D

Veja que, com essa lógica, teremos um terreno bem acidentado, com muitos vales e
picos, sendo que o que determina se um terreno vai ser mais ou menos acidentado é o
algoritmo de geração dessa imagem de ruído.

Por isso, existem tantos estudos nessa Área, quando associada aos jogos. É preciso
criar algoritmos que descrevam cada tipo de terreno que se deseja reproduzir.

Veja, também, que não só a altura do terreno pode ser estimada com essa função,
mas também as cores da textura que será aplicada a ele. Imagine que quanto mais fundo
for o mapa, mais abaixo do nível do mar o terreno estará.

Assim, podemos criar uma textura de água que respeite os pontos escuros da imagem.
De forma análoga, pintamos uma textura de neve para os pontos mais altos, por exemplo.

Extrusão e Revolução
Um método interessante de modelagem é a extrusão. Ela parte de uma forma bidi-
mensional e gera novos pontos ao percorrer um determinado caminho.

A Figura 6 apresenta esse conceito. Do lado esquerdo, tem-se um plano com um


corte no meio. Ao fazermos uma extrusão linear no eixo Y, novos vértices são criados a
uma determinada distância, refletindo os pontos originais.

Figura 15 – Extrusão linear


Fonte: Reprodução

Pensando em um algoritmo para realizar a extrusão, veja que podemos tomar todos
os vértices originais e os duplicar, e realizar uma translação no eixo desejado (seja um
dos três cartesianos principais, ou um novo segmento de reta pré-determinado).

Em uma extrusão simples, podemos ter apenas um conjunto novo de vértices, mas se
o caminho for mais complexo, ou tiver mais segmentos (ou paradas durante a extrusão),
teremos mais conjuntos de vértices duplicados e trasladados.

18
O caminho pode ser ainda mais complexo, formando figuras curvas, por exemplo.
Para cada novo ponto dessa curva, temos um novo segmento da extrusão.

E o que acontece se tivermos um caminho circular?

Temos uma extrusão por revolução. Imagine, por exemplo, um pino de boliche do
qual você retira uma fatia bem fina.

Para reproduzir o pino original, você pode rotacioná-lo em torno do próprio eixo,
como mostra a Figura 7:

Figura 16 – Extrusão por revolução


Fonte: WEBGL 3D Geometry – Lathe, 2021

Para conhecer mais sobre os processos de extrusão no WebGL, acesse o link.


Disponível em: https://bit.ly/2TAm89Q

19
19
UNIDADE Modelagem 3D

Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:

Vídeos
Coding Adventure: Procedural Moons and Planets
https://youtu.be/lctXaT9pxA0
Layer-Based Procedural Generation for Infinite Worlds
https://youtu.be/GJWuVwZO98s

Leitura
3D Graphics: A WebGL Tutorial
https://bit.ly/35tGKD6
WEB GL Fundamentals
https://bit.ly/3xtc9Sq

20
Referências
OLSEN, J. Realtime Procedural Terrain Generation: Realtime Synthesis of Eroded
Fractal Terrain for Use in Computer Games. [s. l.]. Acesso em: 31/10/2004.

TUTORIALS POINT. WebGL Cube Rotation. [S. l.] 31 mar. 2021. Disponível em:
<https://webglfundamentals.org/webgl/lessons/webgl-3d-geometry-lathe.html>. Aces-
so em: 31/03/2021.

VETTER, C. et al. Non-rigid multi-modal registration on the GPU. Proc SPIE. 2007.
Disponível: <https://www.researchgate.net/publication/235696712_Non-rigid_multi-
-modal_registration_on_the_GPU. Acesso em: 15/06/2021.

WEBGL 3D Geometry – Lathe. [S. l.]. 31 mar. 2021. Disponível em: <https://webglfun-
damentals.org/webgl/lessons/webgl-3d-geometry-lathe.html>. Acesso em: 31/03/2021.

21
21
Computação Gráfica
Rendering e Iluminação

Responsável pelo Conteúdo:


Prof. Dr. Pedro Henrique Cacique Braga

Revisão Textual:
Prof.ª Dr.ª Selma Aparecida Cesarin
Rendering e Iluminação

• Introdução;
• Percepção da Imagem;
• Modelos de Iluminação em CG;
• Reflexão;
• Sombreamento;
• Phong;
• Ray Tracing;
• Ray Casting;
• Radiosidade;
• Photon Mapping.

OBJETIVOS DE APRENDIZADO
• Finalizar os Conceitos Básicos de Computação Gráfica com Técnicas de Iluminação e Rendering,
apresentando as principais formas de Iluminação e Mapeamento de Elementos no Espaço 3D;
• Abordar as principais Técnicas de Animação Tridimensional.
UNIDADE Rendering e Iluminação

Introdução
Nesta Disciplina, temos trabalhado com os Princípios de Computação Gráfica.
Vimos desde os Conceitos Básicos que envolvem as diferentes Áreas de estudo, como
Processamento de Imagens e Visão Computacional, por exemplo, até a construção de
Modelos Tridimensionais na prática, utilizando WebGL.
É muito importante que conheçamos os fundamentos para podermos aplicar em di-
ferentes contextos, com diferentes ferramentas. Por isso, trabalhamos muito com a parte
matemática, que envolve muita Geometria e Álgebra Linear, para cálculos de transforma-
ções geométricas.
Agora que entendemos que os ambientes tridimensionais podem ser interpretados
como pontos conectados no espaço, podemos trabalhar as diferentes formas de ilumi-
nação e renderização desses objetos.
O que vimos até agora nos dá a base para construção das formas bi ou tridimensionais.
Agora, vamos trabalhar com a alteração da percepção desses cenários.
Você já deve ter percebido que a iluminação pode transformar o cenário à sua volta,
seja adicionando novas sombras, que fazem um objeto ter aparência maior ou menor,
seja alterando a própria percepção das suas cores.
Para entendermos como recriar esses cenários digitalmente, precisamos entender
primeiro como a imagem é percebida pelo ser humano.
Assim, podemos manipular essa percepção de acordo com a intenção desejada para
a cena.

Percepção da Imagem
Segundo Santos (2021), de forma simplificada, o olho humano pode ser considerado
um instrumento óptico. Isso porque ele apresenta uma lente biconvexa, que é o cristalino, e
no fundo do olho temos a retina, que é sensível à luz e serve de anteparo para as imagens,
como mostra a Figura 1.
O nervo óptico envia a informação das sensações luminosas captadas pelo cristalino
e projetadas sobre a retina. O cérebro é responsável, então, por interpretar essas sensa-
ções e decodificar a imagem percebida.

Íris
Retina

Córnea Nervo
Óptico

Cristalino

Figura 1 – Olho humano


Fonte: Adaptada de Getty Images | Freepik

8
Então veja bem que a imagem é gerada por informações obtidas pela captação de luz.
Este é o principal ponto que temos que considerar para trabalharmos com a imagem e
seus efeitos.
Quando nos voltamos para os estudos de Ótica, na Física, percebemos que a luz é
formada por uma onda eletromagnética que transporta momento e energia para longe
de uma fonte (SILVA, 2021).
A forma mais simples das ondas eletromagnéticas é o espectro de luz visível, como
mostra a Figura 2.
A frequência dessa onda luminosa está relacionada diretamente à cor percebida, que
varia do vermelho ao violeta, no espectro visível ao olho humano.
As frequências abaixo do vermelho são chamadas de infravermelhas e as que estão
acima do violeta são conhecidas como ultravioleta.

102 104 106 108 1010 1012 1014 1016 1018 1020

Micro-Ondas Ulatravioleta f(Hertz)


rádio AM FM, TV Infravermelho Raios X

106 104 102 10 10–2 10–4 10–6 10–8 10–10 10–12


Visível

Vermelho (4.3x1014Hz), laranja, amarelo,..., verde, azul, violeta (7.5x1014Hz)

Figura 2 – Espectro de Luz Visível


Fonte: Adaptada de Getty Images

Agora, quando falamos da percepção do material de um objeto, estamos dizendo que


uma parcela da luz emitida sobre ele é absorvida e outra é refletida. Esta última parcela
é percebida pelos nossos olhos.
Assim, podemos dizer que o que caracteriza uma textura/cor específica é a sua capa-
cidade de refletir a luz, o que se dá pelo material com que o objeto é feito, as ondulações
de sua superfície e a capacidade de reter a luz emitida sobre ele.
É por isso que conseguimos distinguir um pedaço de madeira e um pedaço de plás-
tico, por exemplo.
Um objeto branco tende a refletir quase toda a luz que é emitida sobre ele, enquanto um
objeto preto tende a absorver quase toda a luz. Há alguns estudos, inclusive, que tentam
produzir tinta preta absoluta, ou seja, que absorve toda a luz.
A quantidade de luz que incide sobre o material também pode mudar a nossa per-
cepção dele.
Na Figura 3, veja como o patinho de borracha em b) parece ser feito de um material
amarelo mais vivo do que o mesmo patinho em a).

9
9
UNIDADE Rendering e Iluminação

Isso se dá porque, em b), temos mais uma fonte de luz forte incidindo sobre ele, de
um outro ângulo.

Como o material é translúcido (permite que a luz o atravesse), temos a composição


de diferentes fontes de iluminação.

Figura 3 – Incidência de Luz: a) Luz ambiente; b) Luz ambiente + Spotlight


Fonte: Acervo do Conteudista

Veja ainda que o ângulo de incidência da luz determina regiões com maior exposição,
e outras com menos, como, por exemplo, a luz que entra pela janela na Figura 3(a) gera
um brilho maior sobre a superfície da cabeça do patinho, deixando-a quase branca (pois
reflete muita luz, mas também gera sombras na parte de baixo da asa, fazendo com que
essa região seja mais escura (por absorver mais a luz, ou mesmo receber pouca luz).

Por mais que essas observações já nos pareçam óbvias, elas são muito importantes,
pois serão reproduzidas digitalmente, de alguma forma.

Modelos de Iluminação em CG
Um Modelo de Iluminação em CG define a natureza da luz emanada por uma fonte
e sua interação com todos os objetos em cena (CAVALCANTI, 2019).

Um Modelo de Iluminação em CG é uma técnica utilizada para calcular a intensidade


da cor de um ponto a ser exibido (PINHO, 2021).

Esses modelos levam em consideração a:


• Cor do objeto;
• Cor da luz;
• Posição da luz;
• Posição do ponto;
• Posição do observador.

A maioria dos pacotes gráficos (como o OpenGL, por exemplo) traz métodos sim-
plificados de cálculo de intensidade de luz e são obtidos empiricamente. Modelos mais
precisos calculam a propagação da energia radiante entre as superfícies e as fontes de
luz da cena (MONTENEGRO, 2021).

10
Para continuarmos falando sobre os Modelos de Iluminação, precisamos distinguir os
tipos diferentes de iluminação.

Basicamente, podemos classificá-las em 4 grupos, apresentados a seguir.

Ambiental
Esta fonte de luz ilumina igualmente todas as superfícies do ambiente. Ela gera ilumi-
nação constante para todos os pontos do objeto e depende da cor do objeto e da luz para
identificar a intensidade da luz em um determinado ponto de sua superfície.

A Figura 4 mostra um modelo de uma esfera azul, posicionada sobre um plano cinza
claro, no software de Modelagem Maya.

Nesse ambiente, foi colocada apenas uma fonte de luz. Perceba que todos os pontos
da esfera são iluminados de forma igual. Portanto, não são geradas sombras ou reflexos.

A Figura 4 apresenta, na parte superior, a imagem renderizada, e na parte inferior,


o ambiente modelado.

Figura 4 – Iluminação ambiente


Fonte: Reprodução

11
11
UNIDADE Rendering e Iluminação

Direcional
As fontes direcionais emitem raios paralelos e com a mesma intensidade, por todo o
ambiente. São utilizadas para simular, por exemplo, os raios solares.

Seu efeito é percebido dependendo da orientação da superfície e pode gerar sombras


e reflexos em lados opostos, dependendo do material do objeto iluminado.

Figura 5 – Iluminação Direcional


Fonte: Reprodução

Observe, na Figura 5, na parte inferior, a indicação da direção dos raios incidentes e


o resultado de sombreamento obtido na parte superior.

Pontual
A fonte de luz pontual emite luz em todas as direções a partir de um ponto e atinge
os objetos com intensidade e direções diferentes dependendo da distância entre eles.

A intensidade, então, varia de acordo com a distância da fonte de luz.

A Figura 6 apresenta duas renderizações do mesmo cenário, com uma luz pontual
branca, com distâncias diferentes.

Na primeira, a fonte de luz está bem próxima, enquanto na segunda, ela está muito
distante.

Veja que temos efeitos de iluminação bem diferentes:

12
Figura 6 – Iluminação Pontual
Fonte: Reprodução

Spotlight
A fonte do tipo Spotlight é semelhante à Iluminação Pontual, mas os raios de luz são
emitidos na forma de um cone, apontado para uma direção específica. A intensidade da
luz diminui conforme o raio de luz se distancia da fonte (CAVALCANTI, 2021).

A Figura 7 mostra o mesmo cenário com uma fonte de luz do tipo Spotlight. Veja que ela
atua como um canhão de luz, desses que encontramos nos teatros, por exemplo. O cenário
não é completamente apresentado no render, pois não há luz fora do cone estabelecido.

Figura 7 – Iluminação Spotlight


Fonte: Reprodução

A computação gráfica trabalha com a combinação dessas fontes de luz para gerar
ambientes cada vez mais realistas.

13
13
UNIDADE Rendering e Iluminação

Reflexão
Quanto à emissão de luz, os objetos podem ser classificados como fontes de luz,
como vimos anteriormente, e como refletores.

Os primeiros possuem fontes de luz própria, como lâmpadas, lanternas, etc. e são ca-
racterizados pela intensidade, pela frequência e pela direção, como vimos no item anterior.

Já os materiais refletores não têm fontes de luz própria, mas refletem a luz. São obje-
tos coloridos e a reflexão depende das propriedades da superfície do objeto.

Podemos, então, distinguir esses modelos de reflexão em três categorias: ambiente,


difusa e especular, apresentadas a seguir.

Ambiente
A quantidade de luz refletida depende das propriedades das superfícies. Elas depen-
dem de uma fonte de luz para ser refletida e seguem as propriedades do tipo de luz
incidida. Por exemplo, uma luz direcional atinge a superfície e é refletida com um raio
de ângulo calculado de acordo com a incidência na superfície.

Essa reflexão pode iluminar outros objetos. É muito comum usarmos rebatedores de
luz, por exemplo, em Estúdios de Fotografia. Esses rebatedores aproveitam uma fonte
de luz para refleti-la em um ângulo diferente sobre o objeto em cena.

Refletor Difuso
A luz é refletida em diferentes direções, dependendo das saliências do objeto. A in-
tensidade é proporcional à orientação relativa entre a incidência de luz e a superfície do
objeto (CAVALCANTI, 2021).

Essa forma de reflexão gera um efeito de gradiente nos objetos, como nas figuras
anteriores. No Maya, foi usado um objeto com material do tipo Lambert, que é um
material difuso.

A quantidade de luz incidente pode ser estabelecida para cada superfície por meio de
um parâmetro K d , que é o coeficiente de reflexão difusa e é um valor in intervalo [0,1].
Esse coeficiente é uma função da cor da superfície (MONTENEGRO, 2021).

Se uma superfície é exposta somente à luz ambiente, podemos expressar a intensida-


de da reflexão difusa em cada ponto como:

I ambdiff = K d I a

Especular
O ângulo de reflexão em um refletor especular é igual ao ângulo de incidência, o que
acontece em superfícies polidas, lustradas ou brilhantes. Ele gera brilho com a cor da
luz, não com a cor do objeto.

14
A Figura 8 apresenta uma comparação entre os tipos de iluminação:

Figura 8 – Comparação entre os materiais refletores: a) ambiente; b) difusa; c) especular


Fonte: Adaptada de CAVALCANTI, 2021

Sombreamento
Também conhecidos como Tonalização, os Métodos de Sombreamento buscam si-
mular o efeito de diferentes intensidades de iluminação em um objeto.

É impossível falarmos de iluminação sem considerarmos as Técnicas de Sombreamento.

Esses modelos utilizam tanto as características das fontes de luz quanto o material dos
objetos para calcular o tom exato de cor em cada ponto.

É inviável levarmos em consideração todos os aspectos físicos para os cálculos. Por


isso, criamos modelos simplificados que fazem bem o papel de inferir o tom de cada ponto.

Sombreamento Constante
O cálculo é feito apenas uma vez por superfície, o que dá uma aparência mais blocada
ao render. Todos os pontos da mesma superfície terão o mesmo aspecto, independente
de variações de incidência de luz.

A Figura 9 mostra a diferença entre o sombreamento flat e um sombreamento suavizado.

Figura 9 – Flat Shading


Fonte: TORRES, 2013

Sombreamento Gouraud
Nesse modelo, o cálculo de reflexão da luz é feito com base em cada vértice do mo-
delo tridimensional, o que apresenta suavidade na transição dos tons entre um ponto e
outro do modelo.

15
15
UNIDADE Rendering e Iluminação

Os pontos internos da face recebem um tom gerado pela interpolação dos valores
obtidos por cada vértice da face em questão. O nome do Método vem de seu criador,
Henri Gouraud.

A grande diferença dos demais Métodos é que a iluminação é calculada pelos vértices
das faces do objeto, e não pela normal da face, como mostra a Figura 10.

Figura 10 – Gouraud Shading


Fonte: Wikimedia Commons

Phong
O Método de Phong é uma adaptação do Gouraud, e adiciona o cálculo dos vetores
especulares.

Ele produz efeitos mais realistas, mas é também um processo demorado e, por isso,
a renderização pode ser mais lenta.

Na Figura 11, veja um comparativo dos Métodos de Sombreamento.

Figura 11 – Comparação dos Modelos de Sombreamento


Fonte: Adaptada de Wikimedia Commons

Até então, trabalhamos com Técnicas de Iluminação e renderização locais. Vamos


explorar as técnicas globais, para compor todo o cenário.

16
Ray Tracing
A ideia da Técnica, criada por Turner Whitted, em 1979, é muito simples e segue
como uma das principais, desde sua criação (PINHO, 2021).

Imagine que seja possível emitir raios partindo do ponto de vista do observador da cena.

Se ele interceptar algum objeto no espaço tridimensional, deve-se calcular o valor da


intensidade de cor naquele ponto. Se não tiver resposta, significa que nada foi intercep-
tado e se pode usar a cor de fundo da cena.

Perceba que, nesse Sistema simples, pode-se utilizar materiais com transparência, ou
mesmo reflexivos, para cálculo.

O importante é descobrir onde o raio interceptou algum objeto. Caso o material


tenha transparência, por exemplo, o raio segue seu curso para encontrar o que há por
trás desse objeto, a fim de calcular a cor exata no ponto, considerando a cor do objeto
transparente, a do objeto ao fundo e as fontes de iluminação.

A Figura 12 mostra uma representação desse modelo. Vamos analisar os pontos pro-
jetados no anteparo virtual:

Objeto reflexivo
2

Objeto transparente
4
5

Figura 12 – Ray Tracing


Fonte: Adaptada de PINHO, 2021

Veja que um raio pode ser emitido do ponto de vista do observador até o objeto 1 (azul).

Ao refletir e retornar ao ponto de observação, a cor azul pode ser calculada levando
em consideração a iluminação para definir sua tonalidade.

No entanto, ao emitirmos um raio em direção ao objeto 2, que tem natureza reflexiva,


a cor neste ponto levará em consideração tudo aquilo que se reflete em sua superfície
naquele ponto em questão, como, por exemplo, o objeto 3.

O objeto 3 também aparece na projeção, mais abaixo, de forma análoga ao objeto 1.

Já o objeto 4 tem natureza transparente e, portanto, deve apresentar a cor dos obje-
tos ao fundo, levando em consideração o seu material e a refração da luz no seu interior.
Por isso, a sua cor sofre uma leve alteração na projeção.

17
17
UNIDADE Rendering e Iluminação

Ray Casting
O Ray Casting é muito parecido com o processo inicial do Ray Tracing. Ele também
trabalha com a emissão de raios a partir do observador em busca de objetos em cena.

É importante ressaltar que o fato de os raios saírem do observador economiza pro-


cessamento para os métodos, vez que não é necessário renderizar todo o ambiente.

O Ray Tracing, como dito, é um processo recursivo, ou seja, novos raios saem dos
pontos de intersecção com os objetos, para tratar casos, como os objetos transparentes
ou os reflexivos, por exemplo.

E essa é a grande diferença para o Ray Casting. Esse é um processo não recursivo e,
portanto, não considera os pontos de reflexão e transparência. É ideal para jogos, por
exemplo, em que o processamento precisa ser muito mais rápido, pois é atualizado em
uma alta taxa de quadros por segundo.

Radiosidade
A Radiosidade surgiu em uma época em que a Computação Gráfica não tinha um
modelo que levasse em consideração as reflexões dos objetos (SILVA, 2008).

Esse modelo trata da quantidade de energia luminosa que sai de uma superfície,
sendo uma composição da energia que é refletida nessa superfície e a energia emitida
por ela mesma.

Assume-se que os objetos são refletores difusos ideais, já que a maior parte da ener-
gia percebida vem da reflexão difusa das superfícies. A Figura 13 mostra como a refle-
xão difusa é modelada. Especifica-se um ângulo de visão. Uma intensidade é definida e
a intensidade final percebida em todas as direções é constante em todo o hemisfério de
reflexão. Para saber a intensidade que deixa uma dada superfície é necessário apenas
multiplicar a intensidade em um dado ângulo por π (SILVA, 2008).

Normal

Visão
intensidade = i = k ф

0 k
kcosф
Figura 13 – Reflexão difusa ideal sobre uma superfície
Fonte: Adaptada de SILVA, 2008

18
Pode-se dizer, então, que:

Radiosidade
= Luzemitida + Luzrefletida

Existem outras equações que detalham essa relação, mas essa equação resume muito
bem o que o modelo se propõe a fazer.

Para a radiosidade, a iluminação não vem apenas das fontes de luz, mas de todas as
superfícies refletoras do ambiente que interagem entre si.

Perceba, ainda, que este modelo não depende do ponto de vista do usuário, o que inten-
sifica a quantidade de cálculos necessários para determinar a intensidade em cada ponto.

Esse é, então, um algoritmo mais custoso que o Ray Tracing ou o Ray Casting.

Photon Mapping
É um outro algoritmo de iluminação global que considera Modelos de Radiância para
obter maior realismo da simulação.

Leva em consideração a refração e a reflexão dos materiais. Portanto, considera os


materiais transparentes e/ou reflexivos nos cálculos.

É um modelo considerado de duas passadas, no qual raios saem tanto das fontes de
luz quanto do observador (câmera), independentes, até que uma condição de parada
seja determinada.

Em um segundo momento, eles são conectados para determinar o valor da radiância


nos pontos do ambiente.

Veja que esse é um processo ainda mais custoso e que precisa determinar muito bem
as condições de parada para evitar sobrecarga desnecessária dos processadores.

Técnicas de Animação 3D
Já trabalhamos um pouco com animação em WebGL, na Unidade anterior.

Naquela ocasião, definimos a animação por meio de Código como a modificação de


parâmetros dos elementos ao longo do tempo.

Quando estudamos mais a fundo a Animação Digital, percebemos que existem Téc-
nicas de Animação Tradicional que foram transportadas para a Animação Digital.

Nos Princípios da Animação, os animadores faziam muitas imagens sequenciais, que


eram reproduzidas em série a uma alta velocidade.

Você já deve ter feito isso alguma vez: desenhar nos cantinhos do seu caderno uma
cena quadro a quadro e depois passar as folhas rapidamente.

19
19
UNIDADE Rendering e Iluminação

Esse processo de animação é chamado de quadro a quadro e é muito comum na


animação tradicional, mas pode ser reproduzido também no 3D. É possível determinar
as poses-chave para um objeto e dizer quanto tempo ele deve permanecer nessa pose.

Essa é a forma mais simples e tradicional de animar. E, claramente, podemos fazer


isso também via Código, determinando as configurações (translação, rotação e escala)
de um objeto e por quanto tempo ele deve permanecer nessa pose.

Depois, determinamos a próxima pose, e repetimos o processo até o fim da Animação.

Outra técnica muito usada é a interpolação de movimento. Nela, nós determinamos


as poses principais, mas criamos todos os quadros intermediários para que haja um
movimento mais suave.

Hoje em dia, é possível determinar esses quadros intermediários por meio de um


algoritmo que calcula as propriedades intermediárias.

O que fizemos em WebGL se aproxima muito dessa ideia, pois o Código ia calculando
os quadros intermediários da Animação em tempo real.

Cinemática Inversa e Cinemática Direta


Uma das formas de Animação Digital mais comuns hoje em dia é a Cinemática.

Na Cinemática Direta, partimos das posições das articulações para encontrar a posi-
ção e a orientação de um atuador.

Na Figura 14, veja um modelo de um personagem tridimensional e o seu esqueleto.


Vamos analisar juntos a sua configuração. Pensando no seu braço, por exemplo, a mão
dele seria o atuador, seu cotovelo e ombro seriam as articulações, ou juntas.

Figura 14 – Cinemática Inversa


Fonte: Reprodução

Na Cinemática direta, nós moveríamos as articulações, como o cotovelo, por exem-


plo, para poder determinar a posição final da mão. Como temos um esqueleto bem
definido e conectado com o modelo 3D, é possível trabalharmos com as relações trigo-
nométricas e determinar a posição do atuador.

20
Temos, ainda, algumas limitações determinadas, como a força máxima que pode ser
aplicada sobre um ponto, ou o ângulo limite de giro de cada articulação.

Com todas essas limitações, é possível criar regras matemáticas para estimar a posi-
ção dos atuadores.

A Cinemática inversa trabalha com o movimento dos atuadores para calcular as po-
sições das articulações. No nosso exemplo, movimentamos a mão do personagem e o
braço acompanharia o movimento, dobrando o cotovelo quando necessário.

Como estamos trabalhando sempre com elementos tridimensionais, podemos aplicar


qualquer uma das transformações estudadas a eles. O esqueleto, inclusive, apesar de não
ter uma renderização no final, também pode ser movimentado dessa forma. Se temos
um modelo atrelado a ele, este pode ser movimentado e posicionado corretamente.

A Cinemática inversa pode ser usada com muita frequência para a animação de
personagens, como no nosso exemplo, mas também em qualquer outra animação que
apresente elementos conectados, como um braço robótico e um trator, por exemplo, e
uma cauda articulada de um animal, entre outros.

Em Síntese
A Computação Gráfica tem muitas Áreas de Atuação, como vimos ao longo desse com-
ponente curricular.
Vimos que ela se estende desde o processamento de imagens até a visão computacional.
Um profissional dessa área pode trabalhar com diferentes projetos, mas todos eles se
relacionam à imagem e como ela é gerada ou interpretada.
Nestas aulas, trabalhamos com os principais conceitos relacionados à Disciplina.
Caso você queira se especializar nesta Área, busque aprender mais a fundo sobre os al-
goritmos citados e as Teorias por trás dele.

21
21
UNIDADE Rendering e Iluminação

Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:

Vídeos
Ray tracing: o que é e como funciona
https://youtu.be/k48rfJt55-k
Disney’s practical guide to path tracing
https://youtu.be/frLwRLS_ZR0

Leitura
Computação Gráfica
https://bit.ly/3gBk0HY
Computação Gráfica – Iluminação
https://bit.ly/3cNAKcH

22
Referências
CAVALCANTI, J. Computação Gráfica. 2019. Disponível em: <http://www.univasf.edu.
br/~jorge.cavalcanti/comput_graf13_Iluminacao.pdf>. Acesso em: 04/04/2021.

FARLEX. Gouraud shading. Disponível em: <https://encyclopedia2.thefreedictionary.


com/Gourad+shading>. Acesso em: 04/04/2021.

MONTENEGRO, A. Computação Gráfica 1. Disponível em: <http://www.ic.uff.br/~anselmo/


cursos/CGI/slidesGrad/CG_aula12(iluminacao).pdf>. Acesso em: 04/04/2021.

PINHO, M. S. Síntese de Imagens Realistas. Disponível em: <https://www.inf.pucrs.


br/~pinho/CG/Aulas/Iluminacao/Ilumina.html>. Acesso em: 04/04/2021.

SANTOS, M. A. da S. Olho humano: um instrumento óptico. In: Mundo Educação. Dispo-


nível em: <https://mundoeducacao.uol.com.br/fisica/olho-humano-um-instrumento-optico.
htm>. Acesso em: 04/04/2021.

SILVA, A. R. da. Eficiência e Precisão no Cálculo de Iluminação por Radiosidade


com GPUS. Dissertação (Mestrado em Ciências da Computação). Universidade Federal
de Minas Gerais. Belo Horizonte, 2008.

SILVA, D. C. M. da. Luz Visível. In: Mundo Educação. Disponível em: <https://mun-
doeducacao.uol.com.br/fisica/luz-visivel.htm>. Acesso em: 04/04/2021.

TORRES, J. J. Cycles toon shading tutorial: use Cycles and Blender compositor to
create comic style renders. 2013. Minima Expression. Disponível em: <http://www.
minimaexpresion.es/en/cycles-toon-shading-tutorial-use-cycles-and-blender-compositor-
-to-create-comic-style-renders/>. Acesso em: 04/04/2021.

GOURAUD S. Wikiwand. Disponível em: <https://www.wikiwand.com/en/Gouraud_


shading>. Acesso em 04/04/2021.

23
23

Você também pode gostar