Introduzione alle trame

Una risorsa texture è una struttura di dati in cui archiviare i texel, ovvero la più piccola unità di una texture in cui è possibile leggere o scrivere. Quando la texture viene letta da uno shader, può essere filtrata in base ai campioni di texture.

Una risorsa texture è una raccolta strutturata di dati progettata per archiviare i texel. Un texel rappresenta l'unità più piccola di una texture in cui è possibile leggere o scrivere dalla pipeline. A differenza dei buffer, le texture possono essere filtrate in base ai campioni di texture mentre vengono lette dalle unità shader. Il tipo di texture influisce sulla modalità di filtro della stessa texture. Ogni texel contiene da 1 a 4 componenti, disposti in uno dei formati DXGI definiti dall'enumerazione DXGI_FORMAT.

Le texture vengono create come risorsa strutturata con dimensioni note. Tuttavia, ogni texture può essere tipizzata o senza tipizzazione quando la risorsa viene creata, purché il tipo venga specificato completamente usando una visualizzazione quando la texture è associata alla pipeline.

Tipi di texture

Direct3D supporta diverse rappresentazioni a virgola mobile. Tutti i calcoli a virgola mobile operano in un sottoinsieme definito di regole a virgola mobile a precisione singola a 32 bit IEEE 754.

Esistono diversi tipi di texture: 1D, 2D, 3D, ognuno dei quali può essere creato con o senza mipmap. Direct3D supporta anche matrici di texture e texture multicampionamento.

Texture 1D

Una texture 1D nella sua forma più semplice contiene dati di texture che possono essere indirizzati con una singola coordinata; può essere visualizzata come una matrice di texel, come illustrato nella seguente figura.

Nella figura seguente viene illustrata una texture 1D.

a 1d texture

Ogni texel contiene un numero di componenti di colore a seconda del formato dei dati archiviati. Aggiungendo maggiore complessità, è possibile creare una texture 1D con livelli mipmap, come illustrato nella figura seguente.

a 1d texture with mipmap levels

Un livello mipmap è una texture corrispondente a una potenza di due dimensioni inferiori rispetto al livello sopra lo stesso. Il livello superiore contiene il maggior numero di dettagli, ogni livello successivo è più piccolo. Per un mipmap 1D, il livello più piccolo contiene un texel. Inoltre, i livelli MIP si riducono sempre fino a 1:1.

Quando vengono generate mipmap per una texture di dimensioni dispari, il livello inferiore successivo è sempre pari (tranne quando il livello più basso raggiunge 1). Ad esempio, il diagramma illustra una texture 5x1 il cui livello più basso successivo è una texture 2x1, il cui livello mip successivo (e ultimo) è una texture di dimensioni 1x1. I livelli sono identificati da un indice denominato LOD (livello di dettaglio) usato per accedere alla texture più minuscola quando si esegue il rendering della geometria che non è così vicina alla fotocamera.

Matrici di texture 1D

Direct3D supporta anche matrici di texture. Una matrice di texture 1D è concettualmente simile alla figura seguente.

an array of 1d textures

Questa matrice di texture contiene tre texture. Ognuna delle tre texture ha una larghezza di texture pari a 5 (ovvero il numero di elementi nel primo livello). Ciascuna texture contiene anche una mipmap a 3 livelli.

Tutte le matrici di texture in Direct3D sono una matrice omogenea di texture; ciò significa che ogni texture in una matrice deve avere lo stesso formato e dimensioni dei dati (inclusa la larghezza della texture e il numero di livelli mipmap). È possibile creare matrici di texture di dimensioni diverse, purché tutte le texture in ogni matrice corrispondano in base alle dimensioni.

Texture 2D e matrici di texture 2D

Una risorsa texture2D contiene una griglia 2D di texel. Ogni texel è indirizzabile da un vettore u, v. Poiché si tratta di una risorsa di texture, potrebbe contenere livelli mipmap e sottorisorse. Una risorsa texture 2D completamente popolata è simile alla figura successiva.

a 2d texture resource

Questa risorsa texture contiene una singola texture 3x5 con tre livelli mipmap.

Una risorsa di matrice texture 2D è di tipo omogeneo; ovvero, ogni texture ha lo stesso formato di dati e dimensioni (inclusi i livelli mipmap). Inoltre possiede un layout simile alla matrice di texture 1D, ad eccezione del fatto che le texture contengono ora dati 2D, come illustrato nella figura seguente.

an array of 2d textures

Questa matrice di texture contiene tre texture; ogni texture è 3x5 con due livelli mipmap.

Uso di matrice texture 2D come cubo texture

Un cubo texture è una matrice di texture 2D che contiene 6 texture, una per ogni faccia del cubo. Un cubo di texture completamente popolato è simile alla figura seguente.

an array of 2d textures that represent a texture cube

Una matrice 2D contenente 6 texture può essere letta dagli shader con le funzioni intrinseche della mappa del cubo, dopo che sono associate alla pipeline con una visualizzazione di texture cubo. I cubi di texture vengono indirizzati dallo shader con un vettore 3D che punta dal centro del cubo di texture.

Texture 3D

Una risorsa Texture 3D (nota anche come texture del volume) contiene un volume 3D di texel. Poiché si tratta di una risorsa texture, può contenere livelli mipmap. Una texture 3D completamente popolata è simile alla figura seguente.

a 3d texture resource

Quando una sezione mipmap texture 3D è associata come output di destinazione del rendering (con una visualizzazione di destinazione di rendering), la texture 3D si comporta in modo identico a una matrice di texture 2D con n sezioni. La sezione di rendering specifica viene scelta dalla fase geometry-shader.

Non esiste alcun concetto di matrice di texture 3D; pertanto una sottorisorsa di texture 3D è un singolo livello mipmap.

I sistemi di coordinate per Direct3D sono definiti per pixel e texel.

Sistema di coordinate pixel

Il sistema di coordinate pixel in Direct3D definisce l'origine di una destinazione di rendering nell'angolo superiore sinistro, come illustrato nel diagramma seguente. I centri pixel sono sfalsati da (0,5f,0,5f) da posizioni intere.

diagram of the pixel coordinate system in direct3d 10

Sistema di coordinate texel

Il sistema di coordinate texel ha l'origine nell'angolo superiore sinistro della texture, come illustrato nel diagramma successivo. In questo modo, le texture allineate allo schermo risultano semplici, perché il sistema di coordinate pixel è allineato al sistema di coordinate texel.

diagram of the texel coordinate system

Le coordinate delle texture sono rappresentate con un numero normalizzato o scalato; ogni coordinata della texture viene mappata a un texel specifico come indicato di seguito:

Per una coordinata normalizzata:

  • Campionamento dei punti: Texel # = floor(U * Width)
  • Campionamento lineare: Texel sinistro # = floor(U * Larghezza), Texel destro # = Texel destro # + 1

Per una coordinata ridimensionata:

  • Campionamento dei punti: Texel # = floor(U)
  • Campionamento lineare: Texel sinistro # = floor(U - 0.5), Texel destro # = Texel destro # + 1

Laddove la larghezza corrisponde alla larghezza della texture (in texel).

Il wrapping degli indirizzi della texture si verifica dopo il calcolo della posizione del texel.

Trame