Partager via


Filtrage de textures avec mipmaps

Un mipmap est une séquence de textures, chacune d’elles étant une représentation de résolution progressivement inférieure de la même image. La hauteur et la largeur de chaque image, ou niveau, dans le mipmap est une puissance de deux plus petite que le niveau précédent. Les Mipmaps n’ont pas besoin d’être carrés.

Une image mipmap haute résolution est utilisée pour les objets proches de l’utilisateur. Les images de résolution inférieure sont utilisées comme l’objet apparaît plus loin. Mipmapping améliore la qualité des textures rendues au détriment de l’utilisation de plus de mémoire.

Direct3D représente des mipmaps sous la forme d’une chaîne de surfaces jointes. La texture de résolution la plus élevée est à la tête de la chaîne et a le niveau suivant du mipmap en tant que pièce jointe. À son tour, ce niveau a une pièce jointe qui est le niveau suivant dans le mipmap, et ainsi de suite, jusqu’au niveau de résolution le plus bas du mipmap.

Les illustrations suivantes illustrent un exemple de ces niveaux. Les textures bitmap représentent une connexion à un conteneur dans un jeu de première personne 3D. Lorsqu’elle est créée en tant que mipmap, la texture de résolution la plus élevée est d’abord dans l’ensemble. Chaque texture réussie dans l’ensemble mipmap est plus petite en hauteur et en largeur par une puissance de 2. Dans ce cas, le mipmap de résolution maximale est de 256 pixels de 256 pixels. La texture suivante est 128x128. La dernière texture de la chaîne est de 64 x 64.

Ce signe a une distance maximale à partir de laquelle il est visible. Si l’utilisateur commence loin du signe, le jeu affiche la plus petite texture dans la chaîne mipmap, ce qui, dans ce cas, la texture 64x64.

illustration d’une texture 64 x 64 d’un signe de danger

À mesure que l’utilisateur déplace le point de vue plus proche du signe, les textures à résolution plus élevée dans la chaîne mipmap sont utilisées. La résolution dans l’illustration suivante est 128x128.

illustration d’une texture 128x128 d’un signe de danger

La texture de résolution la plus élevée est utilisée lorsque le point de vue de l’utilisateur est à la distance minimale autorisée du signe, comme illustré dans l’illustration suivante.

illustration d’une texture de 256 x 256 d’un signe de danger

Il s’agit d’un moyen plus efficace de simuler une perspective pour les textures. Au lieu d’afficher une seule texture à de nombreuses résolutions, il est plus rapide d’utiliser plusieurs textures à différentes résolutions.

Direct3D peut évaluer quelle texture dans un jeu mipmap est la résolution la plus proche de la sortie souhaitée, et elle peut mapper des pixels dans son espace texel. Si la résolution de l’image finale se trouve entre les résolutions des textures du jeu mipmap, Direct3D peut examiner les texels dans les deux mipmaps et fusionner leurs valeurs de couleur.

Pour utiliser des mipmaps, votre application doit générer un ensemble de mipmaps. Les applications appliquent des mipmaps en sélectionnant le jeu mipmap comme première texture dans l’ensemble de textures actuelles. Voir Fusion de textures.

Ensuite, votre application doit définir la méthode de filtrage utilisée par Direct3D pour échantillonner des texels. La méthode la plus rapide du filtrage mipmap consiste à sélectionner direct3D le texel le plus proche. Utilisez la valeur énumérée D3DTEXF_POINT pour sélectionner ceci. Direct3D peut produire de meilleurs résultats de filtrage si votre application utilise la valeur énumérée D3DTEXF_LINEAR. Cela sélectionne le mipmap le plus proche, puis calcule une moyenne pondérée des texels entourant l’emplacement dans la texture à laquelle le pixel actuel est mappé.

Les textures Mipmap sont utilisées dans les scènes 3D pour réduire le temps nécessaire au rendu d’une scène. Ils améliorent également le réalisme de la scène. Toutefois, ils nécessitent souvent de grandes quantités de mémoire.

Notez que chaque surface d’une chaîne mipmap a des dimensions d’une moitié de la surface précédente de la chaîne. Si le mipmap de niveau supérieur a des dimensions de 256x128, les dimensions du mipmap de deuxième niveau sont 128x64, le troisième niveau est 64x32, et ainsi de suite, jusqu’à 1x1. Vous ne pouvez pas demander un certain nombre de niveaux mipmap dans les niveaux qui entraîneraient la largeur ou la hauteur d’un mipmap dans la chaîne à une taille inférieure à 1. Dans le cas simple d’une surface mipmap de niveau supérieur 4x2, la valeur maximale autorisée pour les niveaux est de trois. Les dimensions de niveau supérieur sont 4x2, les dimensions de deuxième niveau sont 2x1 et les dimensions du troisième niveau sont 1x1. Une valeur supérieure à 3 dans Niveaux entraîne une valeur fractionnaire dans la hauteur du mipmap de deuxième niveau et est donc interdite.

 

Direct3D peut effectuer automatiquement le filtrage de texture mipmap. Les applications peuvent parcourir manuellement une chaîne mipmap pour charger des données bitmap dans chaque surface de la chaîne. C’est souvent la seule raison de traverser la chaîne. La génération automatique de mipmaps au moment de la création de texture tire parti du filtrage matériel, car le mipmap réside dans la mémoire vidéo.

Filtrage de texture