Genere
ND
Lingua
ND
PEGI
ND
Prezzo
ND
Data di uscita
ND

Radeon 9700

Anteprima

Radeon 9700 - L'architettura - Seconda Parte

Nella prima parte di questo approfondimento tecnologico abbiamo visto le interessanti innovazioni introdotte da Radeon 9700 per quanto riguarda bus di sistema supportati, controller di memoria e motori geometrici. Passiamo adesso a vedere i motori di rendering, il sistema di AntiAliasing, la gestione del video digitale e l'output su schermo, che si annunciano ancora più rivoluzionari.

di Antonino Tumeo, pubblicato il

SMOOTHVISION 2.0 – ANISOTROPIC FILTERING

ATi con questo nome riassume due aspetti profondamente diversi, ma atti a migliorare la qualità grafica finale dell'immagine elaborata, della sua scheda: l'Anisotropic Filtering e l'AntialiAsing. Sostanziali, rispetto al primo Smoothvision, sono i miglioramenti in entrambi gli ambiti. Partiamo, sempre procedendo nell'ordine di elaborazione della pipeline grafica, dall'Anisotropic Filtering, facendo un breve riepilogo sul filtraggio delle texture. Come sapete, una volta determinata la posizione e l'apparenza di un poligono di un determinato modello nella scena 3D, diviene necessario, per migliorarne la resa grafica, applicarvi sopra una texture. Chiaramente, la grandezza della superficie può variare, a seconda della sua posizione: se è in primo piano sarà più grande, se è distante sarà molto più piccola... La texture deve esservi applicata sopra in tutti i casi. Il problema è che la texture ha una dimensione (una risoluzione) fissa, e non infinita: se la superficie è troppo vicina, per adattarsi alla grandezza superiore della superficie, deve essere "stiracchiata", creando così quel fastidioso effetto che volgarmente abbiamo spesso chiamato "spixellamento", se è troppo lontana, la texture deve essere ridotta sempre di più dando origine all'effetto di "shimmering", con dettagli che appaiono e scompaiono all'improvviso. Una prima soluzione è quella di utilizzare le cosiddette "mip map", cioè delle serie di texture riscalate a varie risoluzioni. A seconda della posizione del poligono sulla scena viene dinamicamente scelto quale applicarvi. Ma anche qui, pur diminuendo considerevolmente l'effetto di shimmering, si hanno problemi nella gestione dei livelli intermedi e nella gestione delle superifici in primo piano, dove la risoluzione massima della mipmap potrebbe non essere sufficiente. Nuova soluzione è dunque quella del filtraggio: il colore di un singolo texel della texture da applicare direttamente alla superficie viene ottenuto mediando il colore di quattro texel della stessa zona del livello di mipmap più vicino. Questo modo di procedere si chiama Bilinear filtering, ed in questa maniera si riduce nettamente l'effetto di "spixellamento" facendo apparire la superficie molto più omogenea. La soluzione non è però sufficiente, perché i campioni vengono presi da una sola mipmap e nei passaggi da una mipmap all'altra la differenza si nota in maniera consistente. Interviene così la tecnica definita "Trilinear filtering", nella quale si interpolano otto campioni dai livelli di mipmap più vicini: quattro dal livello leggermente più alto e quattro dal livello leggermente più basso della dimensione richiesta (analogamente, potremmo dire che vengono interpolati due texel filtrati bilinearmente). Le cose migliorano e di molto, ma ancora emerge un problema: sulle superfici poste angolarmente rispetto all'osservatore per l'effetto prospettico, un pixel occupa "più spazio" rispetto a quello occupato da un pixel in posizione frontale. Ciò significa che per determinare il colore di un pixel posto su queste superfici, saranno necessari più texel (cioè, singoli pixel di un texel), anche nel caso di una diretta "corrispondenza" tra dimensioni della superficie e dimensioni della texture, pena il vedere una texture "mossa", impastata. Ecco, dunque, che entra in gioco l'Anisotropic filtering, che sfruttando svariati campioni (8, o 16) di texel, a loro volta già filtrati bilinearmente o trilinearmente, presi lungo tutta la "slope" della superficie. Il risultato è un resa perfettamente chiara e di alta qualità della texture applicata. SMOOTHVISION 2.0 implementa chiaramente l'Anisotropic filtering con varie impostazioni: con 2, 4, 8 o 16 campioni per pixel. Tali impostazioni possono essere utilizzate in modalità performance, cioè con campioni filtrati bilinearmente (come nel vecchio Smoothvision), o in una nuova modalità "quality", che usa campioni filtrati trlinearmente. Tutte le modalità utilizzano un algoritmo adattivo, già introdotto nel vecchio Smoothvision, che calcola l'orientamento di ciascun poligono per determinare il numero ottimale di campioni da prendere. In questa maniera vengono presi ulteriori campioni solo nelle zone dove se ne ha reale beneficio, migliorando nettamente le prestazioni rispetto ad una soluzione "a forza bruta" che non fa alcun distinguo. La versione implementata in Smoothvision è stata migliorata nel supporto ai poligoni ruotati intorno all'asse Z (verso lo schermo), che adesso possono beneficiare completamente dell'Anisotropic filtering.

SMOOTHVISION 2.0 – TEORIA DELL'ANTIALIASING

Dopo aver finalmente realizzato la nostra immagine 3D, possiamo passare all'applicazione dell'AntiAliasing, cioè della, diciamo così, "rimozione" delle seghettature antiestetiche e fastidiose, particolarmente visibili sui bordi dei modelli della scena 3D. Uno dei grossi problemi evidenziati da Radeon 8500 è sicuramente identificabile nelle basse prestazioni fornite dal Full Scene AntiAliasing. La qualità si è sempre rivelata molto elevata, ma ciò a discapito delle prestazioni. Per spiegarne il motivo bisogna fare riferimento alla tecnica implementata per realizzarlo. Partiamo dalle basi. La soluzione utilizzata in Radeon 8500 si basava sul cosiddetto "SuperSampling", un approccio che potremmo definire di forza bruta, in quanto in tutte le sue varianti si richiede comunque il rendering di una quantità di pixel di 2 o 4 volte superiore rispetto a quella della risoluzione dell'immagine da visualizzare. La prima variante, chiamata Ordered Grid SuperSampling, si basa semplicemente sul rendering dell'immagine a risoluzione 2 o 4 volte (a seconda della modalità 2X o 4X scelta) superiore rispetto a quella dell'immagine desiderata e sul suo riscaldamento. In questa maniera, ad ogni pixel dell'immagine finale vengono a corrispondere due o quattro pixel dell'immagine elaborata, come se avessimo una griglia di campionamento di due o quattro pixel sostanzialmente nei vertici di un quadrato. Un tale schema però risulta poco efficiente sulle linee orizzontali, verticali e a 45°, quelle che l'occhio umano nota più facilmente. La seconda variante, denominata Rotated (o Jittered) Grid SuperSampling pone un buon rimedio a questo problema, e fu implementata già ai tempi del Voodoo 5 da 3dfx. Infatti, a seconda della modalità scelta, vengono elaborate due o quattro immagini diverse. Ciascuna immagine viene però elaborata lievemente spostata in alto e in basso rispetto al normale riferimento di una frazione di pixel, in modo tale che al momento della ricostruzione dell'immagine finale, ciascun pixel venga ricavato da una griglia di quattro pixel (lievemente differenti tra loro perché presi in zone leggermente diverse) che assomiglia molto ad un quadrato lievemente ruotato. Il Rotated Grid SuperSampling migliora molto la qualità sulle linee orizzontali e verticali e produce risultati migliori con meno campioni. Il primo SmoothVision è in sostanza un miglioramento di questa tecnica: lo spostamento delle varie immagini può essere programmato tramite una apposita jitter table (e quindi ottimizzato a seconda delle necessità senza dover modificare fisicamente il chip) dando così origine al Programmable Jittered Super Sampling (PJSS). L'approccio in multisampling, adottato da nVidia a partire dal GeForce 3, è invece piuttosto diverso. Le immagini non vengono elaborate a risoluzioni superiori, o elaborate più volte. L'hardware è già "a conoscenza" del fatto che utilizzerà più campioni di uno stesso pixel e dunque direttamente in fase di rendering campiona già più copie dello stesso pixel, prese secondo maschere che possono essere ordinate, ruotate, o programmabili. Se, analizzando i dati di Z-Buffer, la superficie di tale pixel risulterà parzialmente coperta dal poligono attualmente in elaborazione, il chip potrà quindi, stabilendo se un campione è stato preso all'interno della superficie del poligono o sullo sfondo, fare una media pesata dei colori dei singoli campioni per ottenere il colore finale del pixel. Siccome non c'è un rendering effettivo (cioè con tutti i passaggi attraverso la pipeline) a risoluzioni superiori o comunque di un numero più alto di immagini, si hanno, come grosso vantaggio, delle prestazioni molto alte. Dall'altra parte della bilancia, però, si ha una certa perdita qualitativa, vuoi per la minore precisione (visto che i campioni sono ottenuti a partire dagli stessi dati del pixel elaborato), vuoi perché l'algoritmo di filtraggio (e quindi l'effettiva realizzazione dell'AntiAliasing) entra in azione solo sulle estremità di un poligono, creando discreti problemi dove si usano trasparenze alpha (interpretate come superfici vere e proprie e quindi non passibili di filtraggio).

SMOOTHVISION 2.0 – LE NOVITA'

Tanto per cominciare, SMOOTHVISION 2.0, per non dover scegliere "da che parte stare", supporta sia il multisampling che il supersampling (e anche eventuali combinazioni delle tue tecniche) prendendo gli aspetti migliori di entrambi e migliorandoli, con 2, 4, 6 campioni per pixel e una jitter table programmabile per le griglie di campionamento. Di default sono fornite quelle che in base a test ed esperimenti hanno finora fornito i migliori risultati, ma rimane comunque la possibilità per i programmatori di ciascun videogioco di stabilire la propria griglia per ottimizzare la resa dell'AntiAlising con i propri titoli. Per quanto riguarda l'aspetto del SuperSampling, per cercare di migliorare le performance (il tallone d'Achille di questa tecnica come sopra evidenziato), con Radeon 9700 viene introdotta una nuova tecnica di compressione dei campioni di colore che dovrebbe ridurre drasticamente la maggiore banda di memoria richiesta dal SuperSampling. L'idea è al tempo stesso semplice e geniale: si confrontano i valori di colore dei campioni per ciascun pixel e quelli che sono identici vengono salvati una sola volta in uno speciale buffer. Quando il rendering dell'immagine è completo, il colore dei pixel con valori diversi nel buffer di colore è determinato mediando i valori registrati. Ciò significa sostanzialmente migliorare moltissimo le performance dell'AntiAliasing in SuperSampling in scene con grosse aree di colore simile. Dal punto di vista del multisampling, invece, per migliorare ulteriormente le prestazioni e fornire praticamente AntiAliasing 2X praticamente senza impatto sulla velocità e 4X con un impatto minimo, Radeon 9700 trae vantaggio da HyperZ III. Infatti SMOOTHVISION 2.0 usa la loseless Z Compression messa a disposizione da HyperZ per comprimere i valori dello Z buffer campionati con rapporti tra 2:1 e 4:1. Per migliorarne l'aspetto qualitativo, invece, si è lavorato sul supporto per texture che fanno uso di alpha blending (hanno, cioè, una percentuale di trasparenza). Nelle attuali implementazioni per decidere se un campione di un pixel fa parte della superficie attualmente in elaborazione o no, si possono solo assegnare due valori (1 se lo è, 0 se invece fa parte dello sfondo) e se i campioni finiscono su un'area di una texture sulla quale è applicato alpha blending (e quindi più o meno trasparente) vengono considerati come parte di una superficie (gli viene cioè assegnato il valore 1), e dunque su di essi non viene applicato antialiasing. Naturalmente "sotto" alla superficie trasparente potrebbero esserci altri modelli, ben visibili, sui quali andrebbe applicato l'AntiAliasing. Per risolvere questo problema, Radeon 9700 può attribuire non solo i valori 0 o 1, ma tutta la scala di valori tra loro compresa, effettivamente rappresentando la "scala" di trasparenza del canale alpha. Tali valori vengono poi mediati con i valori di colore campionati per ciascun pixel per fornire AntiAliasing anche sulle texture con alpha blending applicato. Ultimo accorgimento, infine, che agisce su entrambe le modalità, è il supporto per una tecnica di correzione della gamma di colore brevettata. La correzione della gamma è un metodo che "compensa" la risposta spesso e volentieri non lineare e diversa, da monitor a monitor, per quanto riguarda la luminosità. Un semplice esempio è il fatto che mandando a un monitor un pixel di luminosità 2, esso potrebbe benissimo non risultare il doppio "più luminoso" di un pixel di luminosità 1, ma solo "più luminoso" di un valore determinato da una particolare curva di "gamma". Ancora, molti giochi offrono l'opzione luminosità per calibrare l'immagine sulle caratteristiche dello schermo e della luminosità dell'ambiente: quello che fa questa opzione è per l'appunto impostare la gamma a livello dell'applicazione. Anche nella generazione dei gradienti di colore atte a rendere le linee e i bordi dei poligoni meno seghettate ai nostri occhi, sarebbe dunque cosa buona tenere conto della gamma apportando eventuali correzioni per far sì che il risultato sia qualitativamente buono ai nostri occhi. Radeon 9700 lo fa, applicando una curva di correzione ai campioni dei pixel quando sono mediati tra loro per determinarne il colore finale.