GIF-23205 Qualité et performance du rendu en infographie Patrick Hébert hebert@gel.ulaval.ca...

Preview:

Citation preview

GIF-23205 Qualité et performance du rendu en infographie

Patrick Héberthebert@gel.ulaval.ca

Session H0911 février 2009

H13-Les textures (partie 1)

http://www.gel.ulaval.ca

Liste des notions importantes

• La paramétrisation des textures• L’échantillonnage• Le filtrage

• La partie 2 traitera notamment du « bump mapping » et du « environment mapping ».

2

http://www.gel.ulaval.ca

Pourquoi la texture?

• Elle enrichit le réalisme du modèle d’apparence tout en évitant de décomposer la géométrie trop finement pour représenter les sections de couleurs différentes

3

+ =

http://www.gel.ulaval.ca

Deux exemples

• Elle peut même compenser pour une géométrie fine non modélisée

4

Tirée du RTR

http://www.gel.ulaval.ca

Du pixel au texel

5

(0,0) (1,0)

(1,1)(0,1)

(u,v) dans [0,1](u0,v0)

(u1,v1)

(u2,v2)

Carte de texture(texels)

La texture peut être une image ou une procédure.L’exemple suivant montre le cas d’une image.

Le triangle n’est pas forcémentde la taille (ou forme) de celuide la carte de texture

Image(pixel)

http://www.gel.ulaval.ca

Autre exemple

6

http://www.gel.ulaval.ca

La transformation (mapping) n’est pas toujours simple!

7

• Projections sphériques, cylindriques, planes• Nous verrons aussi le cube et le « environment »

mappings• Le défi: paramétriser un

maillage (u,v)• L’espace des paramètres peut

aussi être représenté avec1, 3 ou même 4 paramètres• Oui, on peut définir la texture

sur un droite!

http://www.gel.ulaval.ca

Principe de la projection sur une surface intermédiaire

8

Principe important: 1- on applique la texture sur une surface simple2- on passe de la surface simple à la surface réelle

http://www.gel.ulaval.ca

Extension de l’intervalle [0,1]

• Modes Repeat, mirror, clamp, border• Le comportement peut être configuré différemment en u

vs en v

• Notons qu’une texture peut être R, V, B, alpha et qu’ellepeut aussi encoder d’autres propriétés comme la normale

9

(-1,-1)

(2,2)

http://www.gel.ulaval.ca

L’échantillonnage de la texture

• Traditionnellement, les cartes de textures devaient être de dimensions égales à une puissance de 2. Des valeurs arbitraires sont maintenant possibles.• On doit considérer le sur et le sous échantillonnages du

tampon de couleur vs la carte de textures

10

Carte de 256 x 256texels

Forme 750 x 750

Forme 80 x 80

http://www.gel.ulaval.ca

Le suréchantillonnage

• Rappel:Reconstruire etrééchantillonner

11

• sinc(x) n’est pas pratique• Le Box filter (voisin le plus proche ”nearest-neighbor”) fournit une

qualité discutable

http://www.gel.ulaval.ca

Le suréchantillonnage (suite)

• L’interpolation linéaire améliore significa-tivement le résultat

12

http://www.gel.ulaval.ca

L’interpolation bilinéaire

• Les coordonnées de texture (pu , pv) sont l’intervalle [0,1]

• La taille de l’image de texture: n*m texels• La méthode du plus proche voisin donnerait: ( floor(n*u), floor(m*v) )• L’interpolation bilinéaire peut être vue comme une combinaison de 3

interpolations linéaires

http://www.gel.ulaval.ca

La formule équivalente

• On pourrait aussi pousser davantage avec une interpolation bicubique (sur une zone 4 x 4) qui serait implantée dans un shader

14

http://www.gel.ulaval.ca

Le sous-échantillonnage

• À l’opposé, pour le sous-échantillonnage, il faudrait filtrer avant de reconstruire et d’échantillonner car un pixel couvre plusieurs texels.• Il faut considérer la performance et trouver une méthode

efficace.

15

http://www.gel.ulaval.ca

Le mipmapping

u

v

d• Une pyramide précalculée• Un rapport de 2 par étage

selon chaque axe• Une moyenne sur les 4

texels du niveau inférieurou mieux, vous pouvez construirevotre propre pyramide• N’occupe que 33% plus d’espace

1 + ¼ + 1/16 + 1/64 + 1/256 + ... (une série géométrique: 1/(1-r) avec r= ¼)• Il faut calculer le niveau d qui donne un rapport près de 1:1• Le calcul de d (valeur réelle) indique deux images

On peut ensuite appliquer une interpolation bilinéaire dans les deux images, suivie d’une interpolation linéaire entre les niveaux.

OpenGL peut produire la pyramide et gérer tout

http://www.gel.ulaval.ca

Le mipmapping (suite)

• L’interpolation trilinéaire• Requiert l’accès à 8 texels

v

u

d

niveau n+1

niveau n

(u0,v0,d0)

http://www.gel.ulaval.ca

Calcul du niveau d pour le mipmapping

• Le carré englobant peut être surdimensionné si on prendla plus grande dimension• Produit du flou

pixel projeté dans l’espace des texturestexel

2

surfaceestiméedu quadrilatère

log

A

b A

d b

http://www.gel.ulaval.ca

Exemple

19

Voisin le plusproche

Mipmapping

http://www.gel.ulaval.ca

Une solution: le filtrage anisotropique

16 échantillons

d est choisiavec le pluspetit côté

http://www.gel.ulaval.ca

Tomas Akenine-Mőller ©

2002

Application des textures

• Modulation (multiplier la valeur de la texture par la valeur du rendu de base avec éclairage)• Remplacement de la couleur par la valeur de la texture• Combinaison avec la transparence (alpha)• Autres combinaisons possibles

http://www.gel.ulaval.ca

Considérations pratiques en OpenGL• Étape 1• Glubyte image_texture[512][512][3];• glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 512, 512, 0, GL_RGB,

GL_UNSIGNED_BYTE, image_texture); /* le premier 0 est le niveau du mipmapping car on peut charger manuellement et le second est la bordure */

• glEnable(GL_TEXTURE_2D); // activer le texture mapping

• Étape 2• glBegin(GL_QUAD);• glTexCoord2f(0.0, 0.0);• glvertex3f(x1, y1, z1);• glTexCoord2f(1.0, 0.0);• … // on pourrait aussi ajouter une normale et même une couleur• glEnd();

22

http://www.gel.ulaval.ca

Considérations pratiques en OpenGL (suite)• Répétition de la texture• glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);• glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);

• Échantillonnage• glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,

GL_LINEAR);• glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,

GL_NEAREST);

• MipMap• gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, 64, 64, GL_RGB,

GL_UNSIGNED_BYTE, image_texture2);• glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,

GL_NEAREST_MIPMAP_LINEAR);

23

http://www.gel.ulaval.ca

Considérations pratiques en OpenGL (suite)• Fusion de la texture avec la couleur de base• glTexEnvi(GL_TEX_ENV, GL_TEX_ENV_MODE, GL_MODULATE);• // il y a aussi GL_DECAL

• Interpolation plus précise qui tient compte de la perspective• glHint(GL_PERSPECTIVE_CORRECTION, GL_NICEST);

• Autres fonctions à explorer• glTexGen(); // génère les coordonnées de texture automatiquement

• Le multitexturing• glMultiTexCoord2f(GL_TEXTURE0, s, t);

24

Notion avancée: les champs lumineux

• En supposant un milieu transparent, un CL paramétrisé sur n’importe quelle surface fermée permet de produire le rendu de toutes les vues hors de la surface.

http://www.gel.ulaval.ca

Produire le rendu d’un champ lumineux

• Champ de lumière surfacique: un ensemble multitexture:chaque triangle est couvert par les images des caméras qui le voit

26

Pour un nouveau point de vue,l’image produite est une combi-naison des images (textures) de base

http://www.gel.ulaval.ca

Produire le rendu d’un champ lumineux

• Une question d’interpolation

27

démo

http://www.gel.ulaval.ca

Références utiles

1. Real−Time Rendering, par Tomas Akenine−Möller, Eric Haines et Naty Hoffman, A.K. Peters Ltd., 3e édition, 2008 (chap. 6)

2. OpenGL(R) Programming Guide: The Official Guide to Learning OpenGL(R), Version 2.1, Dave Shreiner, Mason Woo, Jackie Neider, Tom Davis, Addison Wesley, 6ième édition, 2007 (chap. 9)

3. OpenGL Shading Language, Randi J. Rost et al, Addison Wesley, 2e édition, 2006.

4. Interactive Computer Graphics – A Top-Down Approach Using OpenGL, E. Angel, Addison-Wesley, 5e édition, 2009 (chap. 8)

Recommended