Mapeamento de Texturas - ULisboa

39
Mapeamento de Texturas 1

Transcript of Mapeamento de Texturas - ULisboa

Page 1: Mapeamento de Texturas - ULisboa

Mapeamento de Texturas

1

Page 2: Mapeamento de Texturas - ULisboa

TexturasQuando o resultado começa a parecer real

Superfícies “no mundo real” são muito complexas

Não se pode modelar todos os pequenos detalhes

Como podemos então adicionar detalhe na superfície?

Modelo Geométrico Modelo Geométrico

+

Sombreamento

Modelo Geométrico

+

Sombreamento

+

Texturas 5

Page 3: Mapeamento de Texturas - ULisboa

Motivação

Limites da Modelação Geométrica

Placas gráficas mais recentes...

... pintam biliões de polígonos de segundo

... fazem dezenas de TeraFLOPs

Insuficiente para criar realismo em

Nuvens

Relva

Terreno

Pele

6

Page 4: Mapeamento de Texturas - ULisboa

Exemplo

Modelação de uma Laranja

7

Page 5: Mapeamento de Texturas - ULisboa

Exemplo

Modelação de uma Laranja

Solução:

Tirar foto de uma laranja

Aplicar imagem na esfera

É necessário alterar a forma

Usa-se bump-mapping

Texture Mapping

Bum

pM

apppin

g

8

Page 6: Mapeamento de Texturas - ULisboa

Mapeamento de Texturas

Texture Mapping

Usa imagens para preencher os polígonos

Bump Mapping

Altera as normais à superfície durante a visualização

Environment (reflection) Mapping

Usa um snapshot da cena para fazer texture mapping

Simular superfícies altamente especulares sem ray-tracing

9

Page 7: Mapeamento de Texturas - ULisboa

Modelo Sombreado

10

Page 8: Mapeamento de Texturas - ULisboa

Texture Mapping

11

Page 9: Mapeamento de Texturas - ULisboa

Environment Mapping

12

Page 10: Mapeamento de Texturas - ULisboa

Bump Mapping

13

Page 11: Mapeamento de Texturas - ULisboa

Onde acontece o mapeamento?

No final do pipeline!

Eficiente porque menos polígonos passam o recorte

14

Page 12: Mapeamento de Texturas - ULisboa

Mapeamento de texturas: é simples?

Apesar de ser “simples” mapear imagem na superfície

Há 3 ou 4 sistemas de coordenadas envolvidos

2D image

3D surface

15

Page 13: Mapeamento de Texturas - ULisboa

Sistemas de Coordenadas

Coordenadas da Textura (s, t)

Coordenadas do Mundo (x, y, z)

Coordenadas do Dispositivo

16

Page 14: Mapeamento de Texturas - ULisboa

Mapeamento Texturas

texture coordinates

world coordinatesdevice coordinates

17

Page 15: Mapeamento de Texturas - ULisboa

Mapeamento de coordenadas

Textura → Superfície

s

t

(x,y,z)

Considere o mapeamento das coordenadas da textura

para um ponto na superfície:

dada uma posição (s,t) na textura, qual é a posição (x,y,z)

na superfície?

Aparentemente precisamos de:

x = X(s, t)

y = Y(s, t)

z = Z(s, t)

Mas na realidade queremos fazer exactamente o inverso –

ou seja – vamos do dispositivo para a textura.

18

Page 16: Mapeamento de Texturas - ULisboa

Backward MappingNa realidade queremos andar “para trás”

Dado um fragmento, queremos saber a que ponto do objecto corresponde

Dado um ponto no objecto, queremos saber a que ponto na textura ele corresponde

Precisamos de ter um mapeamentos = s(x,y,z)

t = t(x,y,z)

ou

s = s(u,v)

t = t(u,v)

Estas funções difíceis de determinar genericamente

Com polígonos:

Especificam-se as coordenadas (s,t) nos vértices

Interpola-se (s,t) para os restantes pontos

19

Page 17: Mapeamento de Texturas - ULisboa

Mapeamento de TexturasMapeamento de Textura adiciona detalhe ao mapear padrões de textura na superfície.

O padrão pode ser repetido.

Por exemplo, o padrão de textura para o cubo à direita é:

Texel = “texture element”.

Um texel é um pixel numa textura.

p.ex., uma textura 128x128 tem 128x128 texels.

No ecrã isto pode resultar em +/- pixeis dependendo da distância a que está o objecto e da escala. 20

Page 18: Mapeamento de Texturas - ULisboa

Como definir

coordenadas de textura (s,t)?

OU Definir as coordenadas manualmente

Definirmos nós as coordenadas para cada vértice

OU Calcular as coordenadas automaticamente

Usar um algoritmo que define as coordenadas da textura para nós

21

Page 19: Mapeamento de Texturas - ULisboa

Especificação Manual

Podemos especificar manualmente as coordenadas para cada vértice:

22

Page 20: Mapeamento de Texturas - ULisboa

Mapeando Textura em Polígonos

23

Page 21: Mapeamento de Texturas - ULisboa

Mapeamento de Texturas

x

y

z

image

geometry display

24

Page 22: Mapeamento de Texturas - ULisboa

Mapeamento de Texturas no Pipeline

Imagens e geometria atravessam pipelines separados, que se

juntam no andar de rasterização

Texturas “complexas” não afectam complexidade geometrica

geometry pipelinevertices

pixel pipelineimage

rasterizer

25

Page 23: Mapeamento de Texturas - ULisboa

Mapeando a Textura

Baseado nas coordenadas parametricas da textura

s

t1, 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

bc

Texture Space Object Space

26

Page 24: Mapeamento de Texturas - ULisboa

Wrapping Modes

Clamping: if s, t > 1 use color at 1, if s, t < 0 use color at 0

material.map.wrapS = THREE.RepeatWrapping; (GL_REPEAT in OpenGL)

material.map.wrapT = THREE.RepeatWrapping; (GL_REPEAT in OpenGL)

Repeating : use s, t modulo 1

material.map.wrapS = THREE.ClampToEdgeWrapping; (GL_CLAMP in OpenGL)

Atribuir coordenadas de textura fora do intervalo [0,1]: cortar ou repetir a textura

27

Page 25: Mapeamento de Texturas - ULisboa

Tiling Repetitivo de Texturas

Uma textura pode ser repetida através da superfície repetindo a parametrização

(s,t) ao longo da superfície

Os melhores efeitos obtém quando a textura é composta em azulejos

Isto significa que o lado direito da textura se junta suavemente com o lado

esquerdo (o mesmo para o topo e fundo)

28

Page 26: Mapeamento de Texturas - ULisboa

Magnification and Minification

Textura Polígono

Magnification Minification

Mais de um texel para um pixel (minification)

Mais de um pixel para um texel (magnification)

point sampling (nearest texel) ou

filtro linear (filtro 2 x 2) para obter valor da textura

Textura Polígono

29

Page 27: Mapeamento de Texturas - ULisboa

Modos de Filtragem

Modos determinados por

texture.minFilter

texture.magFilter

texture.minFilter = THREE.LinearFilter;

texture.magFilter = THREE.LinearFilter;

Ou

texture.minFilter = THREE.NearestFilter;

texture.magFilter = THREE.NearestFilter;

Nota: Filtro linear requer a margem com

extra texel para filtrar nas arestas

30

Page 28: Mapeamento de Texturas - ULisboa

Filtro de Minification Um pixel mapeia a vários texels

Comum em vistas perspectivas

Mau mapeamento de texturas

deforma o tabuleiro Usando Mipmaps melhora-se o

mapeamento, reduzindo a

deformação do tabuleiro 31

Page 29: Mapeamento de Texturas - ULisboa

Mipmaps Ideia base:

criar texturas de tamanho decrescente

usar a subtextura apropriada

Pre-filtrar as texturas (mipmaps)

32

Page 30: Mapeamento de Texturas - ULisboa

Mipmaps: Optimização no Armazenamento

Lados da textura devem serpotências de 2

33

Page 31: Mapeamento de Texturas - ULisboa

Sumário sobre Filtragem

“Zoom-in” => filtro Magnification

“Zoom-out” => filtro Minification

Filtros mais avançados

necessitam mais tempo de computação

mas produzem melhores resultados

Mipmapping é um filtro Minification avançado

34

Page 32: Mapeamento de Texturas - ULisboa

Texturas em Mipmap

Mipmapping permite o uso de texturas pre-filtradas de

resoluções decrescentes

Reduz erros de interpolação para pequenos objectos

texturados

Declara-se o nível do mipmap durante a definição da

textura

Nota: Não têm de usar mipmaps nos laboratórios!

35

Page 33: Mapeamento de Texturas - ULisboa

Exemplo

point

sampling

mipmapped

point

sampling

mipmapped

linear

filtering

linear

filtering

36

Page 34: Mapeamento de Texturas - ULisboa

Texturas em Three.JS

Texture( image, mapping, wrapS, wrapT,

magFilter, minFilter, format, type,

anisotropy )

Detalhes

https://threejs.org/docs/#api/textures/Texture

Parametros de Textura

https://threejs.org/docs/#api/constants/Textures

37

Page 35: Mapeamento de Texturas - ULisboa

Texturas em Three.JS

// load a texture, set wrap mode to repeat

var texture = new

THREE.TextureLoader().load(

"textures/water.jpg" );

texture.wrapS = THREE.RepeatWrapping;

texture.wrapT = THREE.RepeatWrapping;

texture.repeat.set( 4, 4 );

38

Page 36: Mapeamento de Texturas - ULisboa

Texturas em Three.JS

// load a texture, map it to a mesh, using UV mapping

function createMesh(geom, imageFile) {

var texture =

THREE.ImageUtils.loadTexture(imageFile);

var mat = new THREE.MeshPhongMaterial();

mat.map = texture;

var mesh = new THREE.Mesh(geom, mat);

return mesh;

}

39

Page 37: Mapeamento de Texturas - ULisboa

UV Mapping

40

Page 38: Mapeamento de Texturas - ULisboa

UV Mapping

41

p(x,y,z) p(u,v)

Page 39: Mapeamento de Texturas - ULisboa

UV Mapping

42