Présentation des textures dans Direct3D 11

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

Il existe plusieurs types de textures : 1D, 2D, 3D, chacune pouvant être créée avec ou sans mipmaps. Direct3D 11 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. Les textures 1D sont représentées par l’interface ID3D11Texture1D .

illustration d’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.

illustration d’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 11 prend également en charge les tableaux de textures. Un tableau de textures 1D est également représenté par l’interface ID3D11Texture1D . Un tableau de textures 1D ressemble conceptuellement à l’illustration suivante.

illustration d’un 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. Les textures 2D sont représentées par l’interface ID3D11Texture2D . Une ressource de texture 2D entièrement remplie ressemble à l’illustration suivante.

illustration d’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). Un tableau de textures 2D est également représenté par l’interface ID3D11Texture2D . 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.

illustration d’un 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.

illustration d’un 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.

Notes

Les appareils que vous créez avec le niveau de fonctionnalité 10_1 et supérieur peuvent prendre en charge des tableaux de cubes de texture dans lesquels le nombre de textures est égal au nombre de cubes de texture dans un tableau fois six. Les appareils que vous créez avec le niveau de fonctionnalité 10_0 ne prennent en charge qu’un seul cube de texture de six faces. En outre, Direct3D 11 ne prend pas en charge les cubemaps partiels.

 

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. Les textures 3D sont représentées par l’interface ID3D11Texture3D . Une texture 3D entièrement remplie ressemble à l’illustration suivante.

illustration d’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, en déclarant un composant scalaire des données de sortie comme valeur système SV_RenderTargetArrayIndex.

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

Textures