Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Non è necessario che le applicazioni utilizzino il filtro di texture. Direct3D può essere configurato in modo che calcoli l'indirizzo del texel, che spesso non si traduce in numeri interi, e copia il colore del texel con l'indirizzo intero più vicino. Questo processo viene chiamato campionamento del punto più vicino. Il campionamento al punto più vicino avviene quando le dimensioni della texture sono simili a quelle dell'immagine della primitiva sullo schermo. In caso contrario, la texture deve essere ingrandita o minimizzata. Il risultato della mancata corrispondenza delle dimensioni delle trame alle dimensioni primitive dell'immagine può essere un'immagine in blocchi, con alias o sfocata.
Usare attentamente il campionamento dei punti più vicino, perché a volte può causare artefatti grafici quando la trama viene campionata al limite tra due texel. Questo confine è la posizione lungo la texture (u o v) in cui il texel campionato passa da un texel a quello successivo. Quando si usa il campionamento dei punti, il sistema sceglie un texel di esempio o l'altro e il risultato può cambiare bruscamente da un texel al texel successivo man mano che viene superato il limite. Questo effetto può apparire come elementi grafici indesiderati nella trama visualizzata. Quando si utilizza il filtro lineare, il texel risultante viene calcolato a partire dai texel adiacenti e si fonde gradualmente tra di essi man mano che l'indice della texture attraversa il confine.
Questo effetto può essere visto quando si esegue il mapping di una trama molto piccola in un poligono molto grande: un'operazione spesso detta ingrandimento. Ad esempio, quando si usa una trama simile a una scacchiera, il campionamento dei punti più vicino genera una scacchiera più grande che mostra bordi distinti. Al contrario, il filtro lineare delle trame genera un'immagine in cui i colori della scacchiera variano uniformemente attraverso il poligono.
Nella maggior parte dei casi, le applicazioni ottengono i risultati migliori evitando il campionamento al punto più vicino, ove possibile. La maggior parte dell'hardware è attualmente ottimizzata per il filtro lineare, quindi l'applicazione non dovrebbe subire prestazioni ridotte. Se l'effetto desiderato richiede assolutamente l'uso del campionamento dei punti più vicino, ad esempio quando si usano trame per visualizzare caratteri di testo leggibili, l'applicazione deve prestare molta attenzione per evitare il campionamento ai limiti del texel, che potrebbe causare effetti indesiderati. La figura seguente mostra l'aspetto di questi artefatti.
I due quadrati in alto a destra del gruppo appaiono diversi rispetto ai vicini, con spostamenti diagonali che li attraversano. Per evitare artefatti grafici come questi, è necessario avere familiarità con le regole di campionamento delle trame Direct3D per il filtro a punto più vicino. Direct3D esegue il mapping di una coordinata di trama a virgola mobile compresa tra [0,0, 1,0] (0,0 e 1,0 inclusi) a un valore di spazio texel intero compreso tra [ - 0,5, n - 0,5], dove n è il numero di texel in una determinata dimensione sulla trama. L'indice della trama risultante viene arrotondato all'intero più vicino. Questo mapping può introdurre delle imprecisioni di campionamento ai confini dei texel.
Per un esempio semplice, si immagini un'applicazione che esegue il rendering dei poligoni con la modalità di indirizzamento della trama a capo. Usando il mapping usato da Direct3D, l'indice di trama u viene mappato come illustrato nel diagramma seguente per una trama con una larghezza di 4 texel.
Le coordinate della trama, 0,0 e 1,0 per questa illustrazione, sono esattamente al limite tra i texel. Usando il metodo con cui Direct3D esegue il mapping dei valori, le coordinate della trama vanno da [ - 0,5, 4 - 0,5], dove 4 è la larghezza della trama. In questo caso, il texel campionato è il texel 0 per un indice di texture pari a 1,0. Tuttavia, se la coordinata di texture era solo leggermente inferiore a 1,0, il texel campionato sarebbe stato il texel n invece del texel 0.
L'implicazione di questo è che l'ingrandimento di una piccola texture usando le coordinate di texture esattamente 0,0 e 1,0 con filtraggio al punto più vicino su un triangolo allineato con lo spazio dello schermo porta a pixel per cui la texture viene campionata al confine tra i texel. Eventuali imprecisioni nel calcolo delle coordinate della trama, tuttavia piccole, comportano artefatti lungo le aree dell'immagine sottoposta a rendering che corrispondono ai bordi del texel della mappa delle trame.
Effettuare il mapping delle coordinate di texture a virgola mobile ai texel interi con precisione perfetta è difficile, computazionalmente dispendioso e in genere non necessario. La maggior parte delle implementazioni hardware usa un approccio iterativo per calcolare le coordinate delle trame in ogni posizione in pixel all'interno di un triangolo. Gli approcci iterativi tendono a nascondere queste imprecisioni perché gli errori vengono accumulati uniformemente durante l'iterazione.
Il rasterizzatore di riferimento Direct3D usa un approccio di valutazione diretta per calcolare gli indici delle texture in ciascuna posizione dei pixel. La valutazione diretta differisce dall'approccio iterativo in quanto qualsiasi imprecisione nell'operazione presenta una distribuzione di errori più casuale. Il risultato è che gli errori di campionamento che si verificano ai limiti possono essere più evidenti perché il rasterizzatore di riferimento non esegue questa operazione con precisione perfetta.
L'approccio migliore consiste nell'usare il filtro dei punti più vicino solo quando necessario. Quando è necessario usarlo, è consigliabile sfalsare leggermente le coordinate della texture rispetto alle posizioni limite per evitare artefatti.
Argomenti correlati