TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

39
TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et d’autres ….

Transcript of TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Page 1: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

TEXTURES

M. NEVEU

à partir notamment du cours Siggraph 97 et d’autres ….

Page 2: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

TEXTURES

Gain de réalisme

Pas « cher »

Attacher la texture à l’objet travailler dans l’espace de l’objet

Page 3: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Textures 2D et 3D

Images réelles ou virtuelles

Analogies : papier peint (2D) , sculpture (3D)

Page 4: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

PRINCIPE

Page 5: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

PRINCIPE

S-1

A

Page 6: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Application A

Page 7: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Projection selon un axe

Page 8: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Projection cylindrique

Page 9: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Projection sphérique

Page 10: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Projection par Développement

Page 11: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Projection par Développement

Page 12: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Application triviale de texture sur un objet paramétrique. (a) et (c) sans transformations, (b) et (d) avec la transformation l = 2.h et = /4 (qui implique h = V2/3).

Plus généralement : Application A

Page 13: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

(a) La texture déformée (b) Application sur la sphère.

Déformation de la texture pour l’adapter à la paramétrisation de la surface. On utilise une texture déformée (respectant le facteur d’échelle 2 :1)

Application A : déformation

Page 14: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

u

v

u= mod(u',1/n ):

v=mod(v',1/n )

u u

u

v v

v

mod(u',1/n ) si u.n estpair

1-mod(u',1/n ) sinon:

mod(v',1/n ) si v.n estpair

1-mod(v',1/n ) sinon

u

v

Application A : répétition avec

Page 15: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Utilisation d’une texture naturelle. (a) Texture de bois. (b) Sphère en bois vue sous son meilleur jour. (c) Pendant ce temps là, de l’autre côté de la sphère : discontinuité sur la frontière de recollement. (d) Paramétrisation multiple.

Textures cycliques

Page 16: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Vecteur réfléchi (environnement mapping)

Vecteur normal à la surface (exagère les déformations)

Vecteur normal à la surface intermédiaire (atténue les déformations)Centre

Surfaces complexes : application intermédiaire

Page 17: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Composition application intermédiaire - projection

Page 18: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Si P = (1 - α - β).P0 + α.P1 + β.P2 alors Q = (1 - α - β).Q0 + α.Q1 + β.Q2

Cas des facettes

on associe à chaque sommet (P0, P1, P2) d’une facette des coordonnées (Q0,Q1,Q2) dans l’espace des textures

Page 19: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Cas des facettes

Si on utilise une interpolation similaire à l’ombrage de Gouraud :ie si P dans l’espace de l’écran est défini par : P’ = (1 – α’ – β’).P’0 + α’.P’1+ β’.P’2Et qu’on calcule Q = (1 – α’ – β’).Q0 + α’.Q1 + β’.Q2 alors erreur projective

0 1 2

0 1 2

0 1 2

(1 ):

(1 ) / / /

Q Q Qw w w

il faut Qw w w

Page 20: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Problèmes d’échelle

Petite échelle Grande échelle

At<Ap AtAp At>Ap

Ecran Objet Texture

Page 21: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Facteur de compression d

Pij : pixel

Puv : polygone correspondant dans l’espace texture

( )uvd P Α

Ex :

d = 1 : le pixel couvre tt l’espace texture

d = ¼ : le pixel couvre ¼ de l’espace texture

Taille image = 2N x 2N => aire d’un pixel At = 2-N x 2-N

2 Nt td ΑFacteur de compression d’un pixel :

Si d<dt alors pixellisation

Si d>dt alors aliasing

Page 22: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Pixellisation

(uc,vc) : image du centre de Pij

Dans l’image Tij, (n.uc,n.vc) est dans [i’,i’+1]x[j’,j’+1] avec i’=n.uc et j’=n.vc

Interpolation bilinéaire

Interpolation bicubique

Page 23: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Pixellisation

Interpolation pour lutter contre la pixellisation. De gauche à droite sur chaque exemple :image pixellisée, interpolation bilinéaire, interpolation bicubique.

Page 24: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Sous échantillonnage (aliasing)

Mip-Mapping : texture à plusieurs échelles

1, 2 ,2 2 1,2 2 ,2 1 2 1,2 1

1( )

4k k k k k

i j i j i j i j i jT T T T T

On suppose l’image de la texture carrée et de taille 2N × 2N.Changement de résolution le plus simple : construire une image deux fois plus petite. A chaque pixel de l’image deux fois plus petite, on associe un bloc de 2×2 pixels sur l’image originale de valeur = moyenne des 4 pixels du bloc.

,k

i jTLa taille de l’image est 2k × 2k.

A partir de l’image T N on construit un ensemble de N + 1 images T k , k de 0 à N

Facteur de compression au niveau k : dk = 2-k

Page 25: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Ensemble des images calculées pour le mip-mapping.

Stockage optimal du mipmap d’une texture couleur (de la figure précédente) en mémoire.

Mip-Mapping

Page 26: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Mip mapping : couleur d’un pixel

Pixel courant (uc,vc,d)

kc = -log2(d)

' ' '', '( , ) ' , ( ', ') .2 , .2k k k

c c i j c c cC u v T k k i j u v Voisin le plus proche

Interpolation bilinéaire

'

' '', ' ', ' 1

' ' '' 1, ' ' 1, ' 1

( , ) ( ', ') ' , ( ', ') ,

1( , ) 1

c c k c c c c c

k ki j i j

k k ki j i j

C u v C u v k k u v u u v v

T T vC u v u u

T T v

Interpolation trilinéaire ' ' 1

'

( , ) (1 ) ( ', ') ( ', ')

(1 ) ' ( ' 1)

', ( ', '), ( , )

c c k k

c

k

C u v C u v C u v

k k k

k u v C u v comme bilinéaire

Page 27: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Technique du mip-mapping appliqué à l’échiquier

bilinéaire trilinéaire

Page 28: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

En 3D

Page 29: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

3D

Pour faire des bandes sur la théière de gauche partie entière des x( resp y ou z) de chaque point. Si impair rouge; Si pair blanc .

Page 30: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

3D

• Pour faire les anneaux, on prend les coord en x et y (resp x et z, y et z) pour calculer la distance d’un point au centre de l’objet + troncature.

• Si impair rouge; Si pair blanc

Page 31: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Bruit

Lattice noise : grille de bruitValeur aléatoire pour chaque ccord entièreSi coord entière : lookup table Si coord réelle : interpolation trilineaire

Gradient noise : vecteurs de bruit générés pour chaque coord entière

Interpolation trilinéaire

Page 32: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Bump Mapping/ Displacement Mapping

Carte de hauteurs

Modification des normales

Page 33: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

En Opengl

placer une image (la texture ) sur un objet

image rectangulaire face rectangulaire facile !

échelle ? Répétition de motif?

objets à faces non rectangulaires ?

Page 34: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Recette

créer un Objet-Texture et spécifier la texture à utiliser. choisir le mode de placage de la texture avec glTexEnv[f,i,fv,iv]()

• Le mode replace remplace la couleur de l'objet par celle de la texture.

• Le mode modulate utilise la valeur de la texture en modulant la couleur précédente de l'objet.

• Le mode blend mélange la couleur de la texture et la couleur précédente de l'objet.

• Le mode decal avec une texture RGBA utilise la composante alpha de la texture pour combiner la couleur de la texture et la couleur précédente de l'objet.

autoriser le placage de textures : glEnable(GL_TEXTURE_2D) (ou GL_TEXTURE_1D).

spécifier les coordonnées de texture en plus des coordonnées géométriques pour les objets à texturer.

Page 35: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

coordonnées de texture

de 0.0 à 1.0 pour chaque dimension.

glTexCoord*(): pour chaque sommet un couple de coordonnées de texture

Tout ou partie de la texture

Page 36: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Répétition de la texture

en dehors de l'intervalle [0.0, 1.0] ?

glTexParameter() GL_TEXTURE_WRAP_S « horizontale »GL_TEXTURE_WRAP_T « verticale »GL_CLAMP sans répétitionGL_REPEAT avec répétition

Page 37: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Les Objets-Textures

déclarer, nommer et rappeler des Objets-Textures.

• glGenTextures(GLsizei n, GLuint *textureNames) renvoie n numéros de textures dans textureNames[]

• glBindTexture(GL_TEXTURE_2D, GLuint textureNames) : – la première fois qu'il est appelé avec une valeur textureNames non

nulle, un nouvel Objet-Texture est crée, et le nom textureNames lui est attribué.

– avec une valeur textureNames déjà liée à une objet-Texture, cet objet devient actif

– avec la valeur zéro, OpenGL arrête d'utiliser des objets-textures et retourne à la texture par défaut, qui n'a pas de nom.

• glDeleteTextures(GLsizei n,const GLuint *textureNames)efface n objets-textures du tableau textureNames

Page 38: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Filtrage

si la partie de l'image de texture appliquée sur un pixel est plus petite qu'un texel : agrandissement.

si la partie de l'image de texture appliquée sur un pixel contient plus d'un texel : réduction.

glTexParameter() spécifie les méthodes d'agrandissement (GL_TEXTURE_MAG_FILTER) et de réduction (GL_TEXTURE_MIN_FILTER) utilisées : – GL_NEAREST choisit le texel le plus proche – GL_LINEAR calcule une moyenne sur les 2x2 texels les plus

proches.

L'interpolation produit des images plus lisses, mais prend plus de temps à calculer.

Page 39: TEXTURES M. NEVEU à partir notamment du cours Siggraph 97 et dautres ….

Niveaux de détail

Selon la distance à la caméra taille + ou - importante de l'image de texture utilisée (mipmapping)

Soit fournir les images de texture aux différentes tailles (glTexImage2D() à différentes résolutions),

ou bien gluBuild2DMipmaps(), qui calcule les images réduites.

Et le Filtrage ?• Avec les mipmaps, 4 autres filtres :

– GL_NEAREST_MIPMAP_NEAREST et GL_LINEAR_MIPMAP_NEAREST utilisent l'image mipmap la plus proche, et dans cette image, le premier choisit le texel le plus proche, et le deuxième réalise une interpolation sur les quatre texels les plus proches.

– GL_NEAREST_MIPMAP_LINEAR et GL_LINEAR_MIPMAP_LINEAR travaillent à partir de l'interpolation de 2 mipmaps.