Partager via


Introduction aux textures

Une ressource de texture est une structure de données permettant de stocker des texels, qui sont la plus petite unité d’une texture pouvant être lue ou écrite. Lorsque la texture est lue par un nuanceur, elle peut être filtrée par des échantillonneurs de texture.

Une ressource de texture est une collection structurée de données conçue pour stocker des texels. Un texel représente la plus petite unité d’une texture qui peut être lue ou écrite par le pipeline. Contrairement aux mémoires tampons, les textures peuvent être filtrées par échantillonneurs de texture, car elles sont lues par unités de nuanceur. Le type de texture a un impact sur la façon dont la texture est filtrée. Chaque texel contient 1 à 4 composants, organisés dans l’un des formats DXGI définis par l’énumération DXGI_FORMAT.

Les textures sont créées en tant que ressource structurée avec une taille connue. Toutefois, chaque texture peut être typée ou sans type lorsque la ressource est créée tant que le type est entièrement spécifié à l’aide d’une vue lorsque la texture est liée au pipeline.

Types de textures

Direct3D prend en charge plusieurs représentations à virgule flottante. Tous les calculs à virgule flottante fonctionnent sous un sous-ensemble défini des règles ieee 754 32 bits à virgule flottante de précision unique.

Il existe plusieurs types de textures : 1D, 2D, 3D, chacune pouvant être créée avec ou sans mipmaps. Direct3D prend également en charge les tableaux de textures et les textures multi-échantillonnée.

Textures 1D

Une texture 1D dans sa forme la plus simple contient des données de texture qui peuvent être traitées avec une seule coordonnée de texture ; elle peut être visualisées sous la forme d’un tableau de texels, comme illustré dans l’illustration suivante.

L’illustration suivante montre une texture 1D :

une texture 1d

Chaque texel contient un certain nombre de composants de couleur en fonction du format des données stockées. En ajoutant plus de complexité, vous pouvez créer une texture 1D avec des niveaux mipmap, comme illustré dans l’illustration suivante.

une texture 1d avec des niveaux mipmap

Un niveau mipmap est une texture qui est une puissance de deux plus petite que le niveau au-dessus. Le niveau supérieur contient le plus de détails, chaque niveau suivant est plus petit. Pour un mipmap 1D, le plus petit niveau contient un texel. En outre, les niveaux MIP sont toujours réduits à 1:1.

Lorsque des mipmaps sont générés pour une texture de taille impaire, le niveau inférieur suivant est toujours de taille égale (sauf lorsque le niveau le plus bas atteint 1). Par exemple, le diagramme illustre une texture 5x1 dont le niveau le plus bas suivant est une texture 2x1, dont le niveau de mip suivant (et le dernier) est une texture de taille 1x1. Les niveaux sont identifiés par un index appelé LOD (niveau de détail) qui permet d’accéder à la texture plus petite lors du rendu de la géométrie qui n’est pas aussi proche de la caméra.

Tableaux de textures 1D

Direct3D prend également en charge les tableaux de textures. Un tableau de textures 1D ressemble conceptuellement à l’illustration suivante.

tableau de textures 1d

Ce tableau de textures contient trois textures. Chacune des trois textures a une largeur de texture de 5 (ce qui correspond au nombre d’éléments de la première couche). Chaque texture contient également un mipmap à 3 couches.

Tous les tableaux de textures dans Direct3D sont un tableau homogène de textures ; cela signifie que chaque texture d’un tableau de textures doit avoir le même format et la même taille de données (y compris la largeur de texture et le nombre de niveaux de mipmap). Vous pouvez créer des tableaux de textures de différentes tailles, à condition que toutes les textures de chaque tableau correspondent à la taille.

Textures 2D et tableaux de textures 2D

Une ressource Texture2D contient une grille 2D de texels. Chaque texel est adressable par un vecteur u, v. Comme il s’agit d’une ressource de texture, elle peut contenir des niveaux de mipmap et des sous-ressources. Une ressource de texture 2D entièrement remplie ressemble à l’illustration suivante.

une ressource de texture 2d

Cette ressource de texture contient une texture 3x5 unique avec trois niveaux mipmap.

Une ressource de tableau de textures 2D est un tableau homogène de textures 2D ; autrement dit, chaque texture a le même format de données et les mêmes dimensions (y compris les niveaux mipmap). Il a une disposition similaire au tableau de textures 1D, sauf que les textures contiennent désormais des données 2D, comme illustré dans l’illustration suivante.

tableau de textures 2d

Ce tableau de textures contient trois textures ; chaque texture est 3x5 avec deux niveaux mipmap.

Utilisation d’un tableau de textures 2D comme cube de texture

Un cube de texture est un tableau de textures 2D qui contient 6 textures, une pour chaque face du cube. Un cube de texture entièrement rempli ressemble à l’illustration suivante.

tableau de textures 2d qui représentent un cube de texture

Un tableau de textures 2D qui contient 6 textures peut être lu à partir de nuanceurs avec les fonctions intrinsèques de la carte de cube, une fois qu’ils sont liés au pipeline avec une vue de texture de cube. Les cubes de texture sont traités à partir du nuanceur avec un vecteur 3D pointant vers le centre du cube de texture.

Textures 3D

Une ressource de texture 3D (également appelée texture de volume) contient un volume 3D de texels. Étant donné qu’il s’agit d’une ressource de texture, elle peut contenir des niveaux mipmap. Une texture 3D entièrement remplie ressemble à l’illustration suivante.

une ressource de texture 3D

Lorsqu’une tranche mipmap de texture 3D est liée en tant que sortie cible de rendu (avec une vue cible de rendu), la texture 3D se comporte de manière identique à un tableau de textures 2D avec n tranches. La tranche de rendu particulière est choisie à partir de la phase geometry-shader.

Il n’existe aucun concept de tableau de textures 3D ; par conséquent, une sous-ressource de texture 3D est un seul niveau mipmap.

Les systèmes de coordonnées pour Direct3D sont définis pour les pixels et les texels.

Système de coordonnées de pixels

Le système de coordonnées de pixels dans Direct3D définit l’origine d’une cible de rendu dans le coin supérieur gauche, comme illustré dans le diagramme suivant. Les centres de pixels sont décalés par (0,5f,0,5f) des emplacements entiers.

diagramme du système de coordonnées de pixels dans direct3d 10

Système de coordonnées Texel

Le système de coordonnées texel a son origine dans le coin supérieur gauche de la texture, comme illustré dans le diagramme suivant. Cela rend le rendu des textures alignées sur l’écran trivial, car le système de coordonnées de pixels est aligné sur le système de coordonnées texel.

diagramme du système de coordonnées texel

Les coordonnées de texture sont représentées avec un nombre normalisé ou mis à l’échelle ; chaque coordonnée de texture est mappée à un texel spécifique comme suit :

Pour une coordonnée normalisée :

  • Échantillonnage de points : Texel # = floor (U * Width)
  • Échantillonnage linéaire : Texel gauche # = plancher (U * Largeur), Texel droit # = Texel gauche # + 1

Pour une coordonnée mise à l’échelle :

  • Échantillonnage de points : Texel # = floor(U)
  • Échantillonnage linéaire : Texel gauche # = plancher(U - 0,5), Texel droit # = Texel gauche # + 1

Où la largeur est la largeur de la texture (en texels).

L’encapsulation d’adresses de texture se produit après le calcul de l’emplacement du texel.

Textures