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

Smartshader

Anteprima

ATi al contrattacco parte seconda: Smartshader

Ennesimo passo di ATi verso l'annuncio ufficiale del successore del Radeon: dopo la presentazione della tecnologia Truform, è ora il turno della tecnologia Smartshader, sulla quale si baseranno molto probabilmente le unità programmabili di Pixel e Vertex Shading del nuovo chip. Vediamola in dettaglio.

di Antonino Tumeo, pubblicato il

PIXEL SHADER

L'unità di Pixel Shading è invece quella che è stata veramente ottimizzata da ATi con Smartshader. Con questo step evolutivo, possono essere caricate e manipolate fino a sei texture per passata (attenzione, per passata, non si dice per ciclo di clock: questo può voler dire che il chip grafico in un ciclo di clock visualizza solo due o tre texture per pixel, pur non dovendo rielaborare i dati di geometria per le texture successive fino a sei) per ricavare il colore definitivo del pixel da visualizzare. L'implementazione precedente, quella che troviamo nel GeForce 3 e nelle DirectX 8.0, per intenderci, ne supporta "solo" quattro. Ciò porta a significativi vantaggi nella realizzazione di effetti molto complessi che richiedono l'impiego di numerose texture: caricare più texture in una singola passata permette di ridurre il numero delle volte che ogni singolo pixel passa per la pipeline di rendering, e quindi di ridurre l'occupazione di banda per ciascuno di essi. Le texture possono essere array mono, bi o tridimensionali di dati, e ciascuna "cella" di questi vettori (i texel), oltre a contenere i valori di colore, può anche contenere i dati delle normali, delle ombre, e tutto ciò che è necessario a determinarne l'aspetto. Con Smartshader un Pixel Shader può contenere fino a 22 istruzioni e appoggiarsi a 8 valori costanti e 6 registri per i dati temporanei. Anche in questo caso, il linguaggio è molto simile all'assembler.
Un Pixel Shader può essere diviso in due parti: la prima è l'address shader, che esegue fino ad otto operazioni matematiche (addizione, moltiplicazione, prodotto scalare, ecc...) sulle coordinate delle texture. Prima o dopo il caricamento dell'address shader possono essere caricate fino a sei texture. L'opzione di poter di caricare il valore di una texture, modificarlo, ed utilizzarlo come indirizzo per caricare ancora un'altra texture, viene definito Dependent Texture Read (lettura dipendente delle texture), ed è indispensabile per realizzare effetti come l'Environment Mapped Bump Mapping e l'Anisotropic Lighting. La seconda parte del pixel shader è costituita dal color shader, otto istruzioni che collegano e modificano i valori dei colori delle texture caricate per ottenere il colore finale del pixel da visualizzare.
In DirectX 8.0 le istruzioni di un pixel shader erano limitate, rispettivamente, a quattro per l'address shader e a otto per il color shader. Pur offrendo maggiore liberta che un'unità a funzioni fisse, questa implementazione ha però delle limitazioni (come diceva appunto Carmack) che non consentono di realizzare al meglio tutti gli effetti desiderati, perché la parte più significativa ed importante, quella dell'address shader, può avvalersi di solo 4 istruzioni che alla fine permettevano di arrivare ad un massimo di 40 modi significativi per indirizzare una texture. Con Smartshader (e quindi DirectX 8.1), diventa invece possibile utilizzare fino ad un massimo di 14 istruzioni per l'address shader, che danno modo di indirizzare e caricare le texture in un numero di maniere virtualmente infinito.
Inoltre, in DirectX 8.0, i set di istruzioni per address e color shader sono differenti. Per i color shader vengono utilizzate delle semplici operazioni matematiche, mentre per gli address shader si è scelto di adottare delle istruzioni abbastanza complesse e poco flessibili. Con DirectX 8.1 si è invece deciso di semplificare il linguaggio per i Pixel Shader permettendo di utilizzare il linguaggio per i color shader anche con gli address shader. Ciò porta a due vantaggi: risulta più semplice scrivere pixel shader completi (si utilizza uno stesso linguaggio), e si eliminano molte delle incompatibilità tra tipi di dati creati appunto dall'uso di due differenti linguaggi, permettendo quindi di realizzare molti degli effetti con meno istruzioni rispetto alla soluzione precedente.
Uno degli effetti più semplici, ma più efficaci realizzabili con Smartshader comprende sicuramente la gestione dell'illuminazione per-pixel da sorgenti multiple. Sfruttando la possibilità di caricare sei texture in una singola passata, è possibile gestire in maniera rapida ed efficace molti parametri per rendere i riflessi più realistici.
Da ricordare anche la possibilità di applicare il cosiddetto Phong Shading, un effetto che, dividendo la luce in arrivo su un oggetto in tre componenti (ambiente, diffusione e speculare) e basandosi sulle proprietà materiali della superficie ricevente, permette in base ad un preciso modello matematico di determinare il colore che sarà visto dall'osservatore da un certo punto. Tuttavia, il Phong Shading mal si adatta a superfici che non siano lisce, come vestiti o capelli, e per rappresentare in maniera adeguata i riflessi a questo tipo di oggetti, è necessario far uso della cosiddetta tecnica dell'Anisotropic Lighting. Usando funzioni complesse denominate BRDF (Bidirectional Reflectance Distribution Functions, funzioni bidirezionali di distribuzione del riflesso), si determina come la luce viene riflessa da una superficie in relazione all'angolo di visuale. I risultati vengono salvati in una speciale tabella che è specifica per ogni superficie.
Ancora più interessanti sono gli effetti di Bump Mapping avanzati messi a disposizione con Smartshader e DirectX 8.1. Oltre agli ormai classici Environment Mapped Bump Mapping e Dot Product 3 Bump Mapping, implementabili con i Pixel Shader, ma già presenti anche nelle vecchie GPU a funzioni fisse, diventa possibile creare Bump Map che generano a loro volta ombre (Horizon Mapping) e sovrapporre più mappe tra loro.
L'ultimo esempio che portiamo è quello delle texture procedurali, texture dettagliate generate utilizzando delle funzioni matematiche invece che da determinate mappe grafiche. Il vantaggio è grosso: invece che occupare memoria con dati grafici (che alla fine costituiscono sempre un limite fisico per la qualità ed il dettaglio della texture), la texture viene praticamente generata dal chip in base alla funzione che viene data in input.
Insomma, pare che ATi abbia preparato delle novità interessanti proprio su quell'aspetto, i Pixel Shader, che avevano fatto storcere un po' più il naso all'epoca della presentazione del GeForce 3.

CONCLUDENDO

ATi si avvicina di un ulteriore passo alla presentazione di R200, il nome in codice del nuovo chip grafico che molto probabilmente assumerà il nome di Radeon 2. Si tratta probabilmente del passo più importante: la presentazione della tecnologia dietro alle unità programmabili di Vertex e Pixel Shading, sicuramente il piatto forte della nuova generazione di schede video. Come fu al momento della presentazione della tecnologia Truform, anche con Smartshader la società canadese pare sulla carta essere riuscita ad aggiungere quel qualcosa in più rispetto alla tecnologia del suo maggior concorrente, nVidia, andando a limare, con stile, proprio quegli aspetti che meno avevano convinto gli sviluppatori. Sicuramente ci vorrà del tempo perché le novità vengano implementate (ancora non si vedono molti giochi all'orizzonte specifici per DirectX 8.0, quindi quelli per DirectX 8.1 sono ancora di là da venire), ma è importante che esse ci siano. Il fatto che siano state sviluppate in accordo con Microsoft, e quindi implementate in DirectX 8.1, è quantomeno una garanzia che prima o poi verranno sfruttate, senza dimenticare il grosso supporto che continua giustamente ad essere dato ad OpenGL.
È giusto che queste novità ci siano, perché nVidia è sul mercato con il GeForce 3 da ormai svariati mesi, e senza novità rispetto al concorrente, il ritardo sarebbe solo controproducente per ATi e l'interesse sul nuovo prodotto scemerebbe. Sicuramente nVidia si adatterà al più presto (e le sempre più insistenti voci che vogliono NV25 DirectX 8.1 compatibile lo confermano), ma in questa maniera si mantiene accesa quella concorrenza e quella spinta verso l'evoluzione tecnologica che potrebbe, oltre ad un generale e continuo aumento delle prestazioni, anche portare ad un relativo abbassamento dei prezzi per le nuove schede video, certamente gradito a tutti gli utenti.