gif-23205 qualité et performance du rendu en infographie patrick hébert [email protected]...
TRANSCRIPT
GIF-23205 Qualité et performance du rendu en infographie
Patrick Hé[email protected]
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)