Mappage des déplacements (Direct3D 9)

Les cartes de déplacement sont similaires aux cartes de texture, mais elles sont accessibles par le moteur de vertex.

Schéma

Une étape d’échantillonneur supplémentaire est présente dans la première partie du canal de vertex, comme illustré dans le diagramme suivant, qui peut échantillonner une carte de déplacement pour fournir des données de déplacement de vertex.

diagramme de l’étape de l’échantillonneur dans le canal de vertex

L’état de l’échantillonneur de carte de déplacement peut être défini par setSamplerState à l’aide du numéro d’étape 256, qui est un nouveau numéro d’étape. La texture de la carte de déplacement est définie par SetTexture.

La carte peut être pré-échantillonnée ou non, ce qui signifie qu’elle peut être triée de manière à permettre la recherche des valeurs de déplacement sans filtrage.

  • Les cartes de déplacement sont analogues aux cartes de texture, mais elles sont accessibles par le moteur de vertex.
  • Une étape supplémentaire de l’échantillonneur est présente dans la première partie du canal de vertex qui peut échantillonner une carte de déplacement. Cette étape est accessible par l’API SetSamplerState habituelle, mais le numéro d’étape est D3DDMAPSAMPLER = 256.
  • L’état de l’échantillonneur de carte de déplacement peut être défini par setSamplerState(D3DDMAPSAMPLER, ...) API.
  • La texture de la carte de déplacement est définie par l’API SetTexture(D3DDMAPSAMPLER, texture).
  • La carte peut être pré-échantillonné ou non. Cela signifie qu’il peut être ordonné d’une manière particulière qui permet la recherche des valeurs de déplacement sans filtrage.
  • Les modifications apportées à la structure de déclaration permettent de spécifier la coordonnée de texture utilisée pour rechercher la carte de texture. Par exemple, Stream0, Offset, FLOAT2, LOOKUP, Displacement_value. Cela indique au tessellateur d’utiliser le vecteur float 2D dans stream0 à un certain décalage en tant que coordonnée de texture pour rechercher la carte de déplacement et lui associer la sémantique d’utilisation Displacement_value. La déclaration du nuanceur de vertex contient une ligne similaire à {dcl_texture0, v0} indiquant que la sémantique texture0 doit être associée au registre d’entrée v0. La valeur de déplacement recherchée est copiée dans le registre d’entrée v0.
  • Il existe un type spécial de mappage de déplacement, lorsque la carte de texture est pré-échantillonné. L’index séquentiel des sommets générés est utilisé comme coordonnée de texture pour une carte de texture. Par exemple, 0,0,(D3DDECLTYPE)0,D3DDECLMETHOD_LOOKUPPRESAMPLED, Usage, UsageIndex.
  • La sortie de la recherche est de 4 floats.
  • Le mappage de déplacement est pris en charge uniquement avec les N-patchs.
  • Les pilotes doivent ignorer D3DDMAPSAMPLER dans SetTextureStageState s’ils ne gèrent pas les cartes de déplacement.
  • D3DTEXF_ANISOTROPIC mode filtre n’est pas pris en charge.
  • Lorsque D3DSAMP_MIPFILTER dans l’échantillonneur de carte de déplacement n’est pas D3DTEXF_NONE, le niveau de détail est calculé comme suit (Notez que l’état de pavage adaptatif est utilisé même si le D3DRS_ENABLEADAPTIVETESSELLATION a la valeur FALSE) : Tmax = état de rendu D3DRS_MAXTESSELLATIONLEVEL
  • Calculez le niveau de pavage Te pour un sommet Vi : (Xi, Yi, Zi) de la même façon que décrit dans la section « Pavage adaptatif ». Niveau de détail L = log2(Tmax) - log2 (Te).
  • Les opérations de filtrage et d’échantillonnage de textures suivent les mêmes règles que le pipeline de pixels (biais de niveau de détail (LOD) appliqué, etc.).
  • Tous les formats ne peuvent pas être utilisés comme cartes de déplacement, mais uniquement ceux qui prennent en charge les D3DUSAGE_DMAP. L’application peut l’interroger avec CheckDeviceFormat CheckDeviceFormat.
  • D3DUSAGE_DMAP doivent être spécifiés dans CreateTexture pour informer le pilote que cette texture doit être utilisée comme carte de déplacement.
  • D3DUSAGE_DMAP ne peut être utilisé qu’avec des textures. Il ne peut pas être utilisé avec des cartes de cube ou des volumes.
  • Les textures et les cibles de rendu créées avec D3DUSAGE_DMAP peuvent être définies à des étapes régulières de l’échantillonneur et en tant que cibles de rendu.
  • Les états de rendu pour définir le mode d’habillage pour les coordonnées de texture sont ignorés dans le mappage de déplacement. En général, il n’existe aucun mode wrap pour le moteur tessellator.
  • Un échantillonneur de carte de déplacement a un comportement identique à celui des échantillonneurs de texture de pixels. Si une texture avec moins de quatre canaux (comme R32f) est recherchée, les valeurs recherchées vont aux canaux appropriés du registre de destination (le registre d’entrée du nuanceur de vertex marqué avec la sémantique _sample), tandis que les autres canaux ont la valeur par défaut (1, 1, 1). Lors de la recherche, D3DFMT_L8 est diffusé dans les canaux R, G, B et A est défini par défaut sur 1. Le rastériseur de référence contient les détails complets de l’implémentation.

Mappage de déplacement pré-échantillonné

  • Un nouvel état de l’échantillonneur est introduit : D3DSAMP_DMAPOFFSET (DWORD) - décalage (dans les sommets) dans une carte de déplacement pré-échantillonné.
  • Une nouvelle méthode de déclaration est introduite : D3DDECLMETHOD_LOOKUPPRESAMPLED.
  • La pavage adaptatif doit être désactivée.
  • Les paramètres du filtre de texture sont ignorés. L’échantillonnage de points est effectué. Le filtre de texture mip est supposé être D3DTEXF_NONE. Tous les autres modes de filtre de texture sont supposés être D3DTEXF_POINT.
  • Les coordonnées de texture sont calculées comme suit : U = (Index % TextureWidthInPixeles) / (float)(TextureWidthInPixeles) V = (Index / TextureWidthInPixeles) / (float)(TextureHeightInPixeles) où Index est un index séquentiel des sommets générés plus TSS[D3DSAMP_DMAPOFFSET]. L’index séquentiel est défini sur zéro au début de chaque primitive et est augmenté après la génération d’un sommet.

Il s’agit des modifications d’API qui prennent en charge le mappage de déplacement.

  • Ajout d’un format de canal unique, D3DFMT_L16.
  • Nouvel indicateur d’utilisation, D3DUSAGE_DMAP.
  • Étape de texture spéciale, utilisée pour définir une texture de carte de déplacement, D3DDMAPSAMPLER.
  • De nouvelles limites matérielles ont été ajoutées, D3DDEVCAPS2_DMAPNPATCH et D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH. Consultez D3DDEVCAPS2.

Vertex Pipeline