• Nenhum resultado encontrado

Motivação - Cenas mais realistas

N/A
N/A
Protected

Academic year: 2018

Share "Motivação - Cenas mais realistas"

Copied!
52
0
0

Texto

(1)

Mapeamento de Texturas

(2)

Motivação - Cenas mais realistas

● Imagine que você precisa

criar um ambiente com uma parede como a

representada pela imagem ao lado

● Solução 1: Dividir a cena

em polígonos

suficientemente pequenos para representar os

detalhes

● Problema: Difícil de

(3)

Sumário

Hoje veremos como utilizar a técnica de

mapeamento de textura para adicionar

detalhes aos objetos em sistemas de CG

Discutiremos seu sistema de coordenadas e

(4)

Motivação - Cenas mais realistas

A principal motivação de utilizarmos texturas

é adicionar realismo com o menor custo

computacional possível

Objetos renderizados com os modelos de

reflexão vistos anteriormente fornecem uma

aparência pouco realista

(5)

Noção de Textura

Uma

textura

pode ser

uma imagem com

componentes RGB e

alpha.

O

mapeamento de

textura

é um método

para criar complexidade

numa imagem sem o

ônus de construir

(6)

Definições

Técnica foi desenvolvida por Catmull (1974),

Blinn e Newell (1976) e outros pesquisadores

Em mapeamento de texturas, o pixel é

chamado de texel (abreviatura de

texture

element

)

Uma textura de resolução 128 x 128 possui

(7)

Propriedades Mapeáveis

● Quais parâmetros ou propriedades pode-se reproduzir a partir de

mapas de textura?

● Cor (coeficientes de reflexão

(8)

Propriedades Mapeáveis

● Quais parâmetros ou propriedades pode-se reproduzir a partir de

mapas de textura?

● Cor (coeficientes de reflexão

difusa)

● Coeficientes de reflexão especular

e difusa

(9)

Propriedades Mapeáveis

● Quais parâmetros ou propriedades pode-se reproduzir a partir de

mapas de textura?

● Cor (coeficientes de reflexão

difusa)

● Coeficientes de reflexão especular

e difusa

● Mapeamento de ambiente

● Perturbação do vetor normal

(10)

Propriedades Mapeáveis

● Quais parâmetros ou propriedades pode-se reproduzir a partir de

mapas de textura?

● Cor (coeficientes de reflexão

difusa)

● Coeficientes de reflexão especular

e difusa

● Mapeamento de ambiente

● Perturbação do vetor normal

Bump Mapping

● Perturbação da superfície na

direção da normal

(11)

Propriedades Mapeáveis

● Quais parâmetros ou propriedades pode-se reproduzir a partir de

mapas de textura?

● Cor (coeficientes de reflexão

difusa)

● Coeficientes de reflexão especular

e difusa

● Mapeamento de ambiente

● Perturbação do vetor normal

Bump Mapping

● Perturbação da superfície na

direção da normal

Displacement Mapping

(12)

Mapeamento de textura

● Texturas 2D são funções T (s, t) cujo domínio é um

espaço bidimensional e o contradomínio pode ser cor, opacidade, etc

● É comum ajustar a escala da imagem de tal forma que a

imagem toda se enquadre no intervalo 0 ≤ s, t ≤ 1

t

s

1

1 0

(13)

Mapeamento de Textura

● Problema: Que ponto da textura será utilizado

em um dado ponto da superfície?

● A textura é simplesmente uma imagem com um

sistema de coordenadas 2D (s,t)

● Define-se o mapeamento de (x,y,z) do domínio

da cena para o domínio da textura (s,t) ● Para determinar a cor em (x,y,z) usa-se o

correspondente (s,t) da textura nesse ponto

● Com polígonos, especifica-se (s,t) nos vértices e

(14)

Mapeamento de Textura

● O problema básico está em encontrar a função

(mapping) que mapeia a textura para a superfície

● Dada uma posição (s,t) da textura, qual é a

posição (x,y,z) na superfície?

● Este problema requer 3 funções paramétricas:

x = X(s, t)

y = Y(s, t)

z = Z(s, t)

● No caso da superfície já estar formulada

(15)
(16)

Mapeamento de texturas em polígonos

Especificamos explicitamente as

coordenadas (

u, v

) nos vértices do polígono,

ou seja, afixamos a textura nos vértices

Faz-se então a interpolação dentro do

polígono durante o processo de rasterização,

de forma semelhante ao que é feito no

(17)

Função de Mapeamento

● Uma função de mapeamento retorna o ponto do

objeto correspondente a cada ponto do espaço de textura

(x, y, z) = F (s, t)

● Corresponde à forma com que a textura é usada

para “embrulhar” (wrap) o objeto

● Na maioria dos casos precisamos de uma função que

nos permita “desembrulhar” (unwrap) a textura do objeto, isto é, a inversa da função de mapeamento (mesmo vale para o próprio modelo)

● Se a superfície do objeto puder ser descrita em

(18)

Função de mapeamento

Algumas formas paramétricas que podem ser

utilizadas em mapeamento de textura são:

(19)

Parametrização cúbica

Parametrização

(20)

Parametrização Cilíndrica

Parametrização cilíndrica

Projetada em um cubo

(21)

Parametrização esférica

Parametrização

(22)

Parametrizando Objetos Genéricos

● O que fazer quando o objeto não

comporta uma parametrização natural?

● Uma sugestão é usar um mapeamento

em 2 estágios [Bier e Sloan]:

● Mapear textura sobre uma superfície

simples como cilindro, esfera, etc aproximadamente englobando o objeto

● Mapear superfície simples sobre a

superfície do objeto. Pode ser feito de diversas maneiras

● Raios passando pelo centróide do objeto ● Raios normais à superfície do objeto

● Raios normais à superfície simples

(23)

UV Mapping

Outra técnica muito utilizada em

aplicações 3D é fazer o processo inverso

– mapear o modelo sobre a textura plana

Para tal, é necessário “planificar” a malha

poligonal (também conhecido como

UV

Unwrapping)

A textura será projetada diretamente sobre

(24)

UV

Map

pin

g -

Exemp

lo

(25)

UV

Map

pin

g -

Exemp

lo

(26)

UV

Map

pin

g -

Exemp

lo

(27)

UV

Map

pin

g -

Exemp

lo

(28)

Mapeamento de Texturas em OpenGL

Como já discutido, polígonos são

frequentemente usados para representar

fronteiras de objetos

Em OpenGL, além das coordenadas dos

vértices e do vetor normal, é possível

também especificar coordenadas de textura:

glBegin (GL_POLYGON);

glNormal3fv (N); glTexCoord2fv (T); glVertex3fv (V); ...

(29)

Mapeamento de Texturas em OpenGL

Ligar o mapeamento de texturas

glEnable(GL_TEXTURE_2D);

Especificar a textura

→ Usar o comando glTexImage2D que tem o formato

void glTexImage2D (GLenum target, GLint mipMapLevel,

GLint internalFormat, GLsizei width, GLsizei height, GLint borderWidth, GLenum format, GLenum type,

const GLvoid *pixels);

→ Exemplo de utilização:

glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 128, 128, 0, GL_RGBA, GL_UNSIGNED_BYTE, img);

→ Detalhes sobre este comando aqui

● As cores dos texels são processadas pela parte do

(30)

● Baseado em coordenadas paramétricas de textura ● Chamar glTexCoord*() para cada vértice

s t

1, 1 0, 1

0, 0 1, 0

(s, t) = (0.2, 0.8)

(0.4, 0.2) (0.8, 0.4) A

B C

a

b

c

Espaço de Textura Espaço do Objeto

(31)

Modos de aplicação de Textura

● Ao utilizarmos texturas temos várias opções que

alterarão a forma como ela será aplicada. Entre elas abordaremos:

● Modificação da cor dos objetos com textura

Wrapping Modes

(32)

Modificação da cor dos objetos

● Veja abaixo as principais opções de mistura entre

a cor de uma determinada superfície e a textura a ser aplicada:

modulate: multiplica a cor da superfície pela

cor da textura (apropriado para sistemas com efeitos de iluminação);

replace: substitui cor da superfície pela cor da

textura (ignora efeitos de iluminação);

blend: semelhante à modulate, mas a mistura é

(33)

Modificação da cor dos objetos

O comando abaixo será utilizado para alterar a

cor dos objetos com aplicação de textura

glTexEnv{fi}[v](GL_TEXTURE_ENV, prop, param )

onde se

prop = TEXTURE_ENV_MODE, param

pode

assumir os valores:

● GL_MODULATE (modo default) ● GL_REPLACE

● GL_BLEND (para este modo a cor a ser misturada é

definida pelo comando glTexEnv com

(34)

Modificação da cor dos objetos

GL_REPLACE GL_MODULATE GL_BLEND

(35)

Wrapping Modes

Para definir como as texturas se comportarão

fora da área definida entre [0,1] (para

s

e

t

)

podemos definir os seguintes

Wrapping Modes:

Repeat – repete a textura

Clamp – Estende a borda da textura

● Exemplos:

(36)

Wrapping Modes

(37)

Filtragem

Textura Polígono Magnificação Minificação Polígono Textura Exemplo:

glTexParameteri( target, type, mode );

GL_TEXTURE_2D

GL_TEXTURE_1D GL_TEXTURE_MAG_FILTERGL_TEXTURE_MIN_FILTER

(38)

Filtro de minificação

● Usado quando um pixel é mapeado para muitos texels ● Comum em cenas com perspectiva

Perspectiva (foreshortening) e

(39)

Filtro de magnificação

● Quando um pixel é mapeado para uma pequena

porção de um texel, o resultado é que muitos pixels são mapeados para o mesmo texel

● Sem um método de filtragem surge o fenômeno de

aliasing

● O filtro de magnificação suaviza a transição entre os

pixels

(40)

Texturas Mipmap

● Permite que texturas de diferentes níveis de resolução sejam

aplicadas de forma adaptativa

● Reduz problemas de aliasing gerados por erros de

interpolação

● O nível (level) da textura na hierarquia mipmap é

especificada durante a definição da textura

glTexImage*D( GL_TEXTURE_*D, level, … )

● GLU possui rotinas auxiliares para construir texturas mipmap

com filtragem adequada

gluBuild*DMipmaps( … )

● OpenGL suporta facilidades mais sofisticadas para níveis de

(41)

Texturas Mipmap

(42)

Algumas Facilidades do OpenGL

● Objetos de Textura (Texture Objects)

● Permite mudar rapidamente de texturas durante a

renderização de diversos objetos

● Controle de espaço na memória de texturas

● Texturas residentes na placa são mais rápidas

● Multitexturas (Extensões OpenGL)

● Suportado por placas da NVidia e ATI

● Mais de uma textura mapeada no mesmo objeto ● Permite uma série de efeitos interessantes

(43)

Saiba mais!

Computação Gráfica - Teoria e

Prática.

Capítulo 7

Na Seção 7.4 deste capítulo há um detalhamento das técnicas de

(44)

Saiba mais!

OpenGL Programming Guide

Seventh Edition

Capítulo 9

Neste capítulo há um enfoque

(45)

Saiba mais!

Computer Graphics, C Version

Capítulo 14

Na seção 14.9 os principais métodos de mapeamento de

(46)

Saiba mais!

Learn OpenGL

Capítulo 7

A forma como texturas são

trabalhadas com shaders é

bastante semelhante à feita

pelo OpenGL tradicional,

porém, possui novos

recursos. Neste capítulo

(47)

Resumo

Vimos nesta aula como podemos aumentar o

detalhamento de objetos 3D através do

mapeamento de texturas

Um dos principais problemas no processo de

mapear uma textura em um objeto é

encontrar uma função que faça o

mapeamento dos vértices que compõem um

polígono sobre as coordenadas de textura

Finalmente vimos que o OpenGL fornece

(48)

Prática 1

● Execute o tutorial “Texture” do Nate Robins

(arquivo tutors.zip) para entender o

(49)

Prática 2

● Abra o projeto Texture Mapping

● Analise o funcionamento do sistema de texturas

(50)

Prática 3

● Abra o projeto

Textured OBJ Files

● Verifique no código como

é feito o carregamento dos objetos via arquivo e as texturas com um leitor externo de arquivos PNG

(51)

Exercício 1

● Faça modificações no

arquivo original (Projeto

Texture Mapping) para

criar um cubo com texturas como a figura ao lado

● Para isso, não utilize o

cubo disponível no

OpenGL. Crie um cubo manualmente, com as coordenadas de textura

corretas e centro na origem

(52)

Exercício 2

● A ideia do exercício é criar

um cilindro texturizado

● Para tal, siga os seguintes

passos:

● Utilize as texturas "wood.png" e "woodtop.png" disponíveis na pasta "data"

● Pesquise (ou formule) formas de parametrizar um cilindro para que a textura seja

Referências

Documentos relacionados

17 CORTE IDH. Caso Castañeda Gutman vs.. restrição ao lançamento de uma candidatura a cargo político pode demandar o enfrentamento de temas de ordem histórica, social e política

lhante; linhas vasculares bem v1S1veis, cheias de conteúdo amarelo-pardo, em geral retas; pa- rênquima axial moderadamente abundante, pa- ratraqueal em faixas; raios

O teor de minério neste tipo de reservas pode ir de 0,15% até os 8% de níquel, embora a mai- or parte dos depósitos conhecidos rondem apenas os 2%.. Um dos principais produto- res

Mova a alavanca de acionamento para frente para elevação e depois para traz para descida do garfo certificando se o mesmo encontrasse normal.. Depois desta inspeção, se não

A Variação dos Custos em Saúde nos Estados Unidos: Diferença entre os índices gerais de preços e índices de custos exclusivos da saúde; 3.. A variação dos Preços em

A maneira expositiva das manifestações patológicas evidencia a formação de fissuras devido a movimentação térmica das paredes, Figura 9, que não foram dimensionadas com

Figura 8 – Isocurvas com valores da Iluminância média para o período da manhã na fachada sudoeste, a primeira para a simulação com brise horizontal e a segunda sem brise

Quanto às variáveis relacionadas à satisfação nas duas últimas duas semanas, somente para dinheiro não houve diferença antes e depois da cirurgia, para as demais: