Ati Radeon X850 XT PE AGP

Pag. 8 - 3Dc

Altra novità della casa canadese e gestita via hardware è il 3Dc. Oggigiorno la mole di dati grafici da gestire per un acceleratore grafico è sempre maggiore. Texture sempre più ricche di dettaglio sono indispensabili per poter consentire all’utilizzatore di immergersi nella scena 3D col massimo realismo. Ma questi dati spesso mettono sotto torchio la banda passante della scheda video. Lo standard al momento universalmente accettato per la compressione delle texture è il DXTC (DirectX Texture Compression) introdotto nel 1999 e noto soprattutto nell’efficacia di compressione per i vettori grafici a 2 dimensioni dei dati di colore memorizzati nei formati RGB e RGBA. Ma adesso sempre più dati vengono memorizzati nelle texture al fine di ottenere risultati grafici che vanno oltre la semplice assegnazione del colore. E’ sempre sui vettori dati a 2 dimensioni che si concentra il 3Dc introdotto da Ati, con particolare dedizione per le normal map e per contenere dati multipli in una sola texture compressa.

Le normal map sono una miglioria delle bump map, texture nate con l’intento di dare forma 3D ad una semplice superficie in 2D, ma a differenza delle ultime, possono assegnare maggiori dettagli. Si può pensare alla normal map come ad un vettore perpendicolare uscente dalla superficie in ogni punto della stessa. L’utilità delle normali sta nel fatto di poter determinare correttamente la direzione della luce che incide sulla superficie stessa nel calcolo di riflessioni e rifrazioni in quanto si va a determinare il fenomeno fisico sul singolo pixel. Ogni modello 3D nasce con le normali ad ogni vertice, ma quanto più si riducono i vertici di un oggetto, tanto maggiore è la distanza di queste normali e, quindi, tanto minore la caratterizzazione di tale oggetto. L’utilizzo delle normal map, per questo motivo, va di pari passo con l’adozione di modelli a basso numero di vertici: questi devono essere solo sufficienti a dare forma all’oggetto, sarà poi la normal map che gli darà dettaglio. Un modo semplice per generare una normal map è quello di andare a fare la differenza tra un modello con un numero alto di vertici e lo stesso generato in maniera molto più semplicistica con un numero di vertici, come detto in precedenza, appena sufficiente a dare forma al modello. Quindi il nuovo approccio prevedrebbe l’adozione di una texture per il colore e di una per le normali andando a raddoppiare le richieste in termini di banda passante (anche se diminuirebbe la richiesta di potenza sui vertex shader). Ecco perché Ati, vista la crescente diffusione nell’adozione delle normal map, ha deciso di andarle a gestirle in hardware, con compressione al volo delle stesse in rapporti fino a 4:1.

Il 3Dc è una tecnica di compressione a blocchi. Una volta generata la normal map, la si scompone in tessere da 4x4 elementi (quindi 16 in totale) e ciascuno a 2 componenti. Per ogni blocco si determina un minino e un massimo, poi memorizzati come valori a 8 bit. A questo punto vengono calcolati altri 6 valori, equidistanti dal minimo e massimo e compresi tra gli stessi. Ad ogni valore si associa un indice a 3 bit che corrisponde a qualsiasi valore sia più vicino all’originale. Quindi in conclusione avremo 4 valori a 8 bit (min-max x 2 componenti) e 32 da 3 bit (8x2x3), per un totale di 128 bit. Poiché l’originale era costituito da 16 valori a 32 bit, per un totale di 512 bit, allora 512 sta a 128 come effettivamente 4 sta a 1; se i valori originali erano da 16 bit, allora la compressione sarà 2:1. Il 3Dc, in realtà, richiede uno step addizionale. Ogni valore di una normal map è un vettore 3D a 3 componenti (x,y,z) che devono essere ridotte a 2 per poter essere compresse in 3Dc. La cosa è presto detta se si assume che la lunghezza del vettore normale è sempre unitaria, in questo modo z è sempre linearmente dipendente alle altre 2, basta solo aggiungere 2 istruzioni di pixel shader al codice (necessarie per la compressione/decompressione) e il gioco è fatto.

 

Scritto da nico64 | il 2005-04-25 00:00:00 |

Annunci Google