|
La piena compatibilità con le DirectX 9.0 di
Microsoft ha implicato il ridisegno ed il miglioramento della pipeline
grafica. Perciò ATi, e lo stesso sta facendo nVidia con il prossimo
NV30, ha dovuto apportare delle modifiche anche sostanziali rispetto al
vecchio disegno del chip R2xx.
La pipeline inizia dalla connessione AGP 8x di cui
abbiamo già parlato nella pagina precedente. Attraverso questo canale
avviene la comunicazione di dati e istruzioni da parte della CPU
passando per il Northbridge della scheda madre.
Le informazioni che arrivano dalla CPU, in forma di
vertici, passano attraverso l'interfaccia di memoria per essere
immagazzinate nella memoria video e/o elaborate direttamente dal Vertex
Processing Engine, meglio noto come T&L. Le prime operazioni che la
pipeline deve compiere sui vertici sono quelle di trasformazione: queste
includono numerose operazioni matriciali eseguite su numeri in virgola
mobile e sono necessarie per calcolare spostamenti e ridimensionamenti
(trasformazioni affini) oltre che rotazioni dell'oggetto 3D:
L'elaborazione di tutti questi
calcoli è davvero molto pesante, soprattutto se deve essere realizzata
su variabili floating point. Basta guardare come sono fatte le matrici
che regolano il comportamento degli oggetti (soprattutto quelle di
rotazione):
Lo stadio successivo è quello di
illuminazione dei vertici che andranno a comporre la scena 3D. Il chip
R300 offre la totale programmabilità di questa unità e, grazie a
questa opportunità, si ha la possibilità di cambiare le forme, le
caratteristiche, la "pelle", etc.
Il chip R300 è stato dotato di 4
pipelines programmabili di vertex shader:
Il passo successivo alle operazioni
di T&L è il setup dei triangoli, operazione realizzata attraverso il
Triangle Setup Engine. ATi, con la GPU R300, è in grado di fornire un
throughput rate dei triangoli di oltre 300 milioni di triangoli/s. Per
avere un'idea, il chip GeForce4 Ti 4600, riesce ad avere un throughput
rate pari a meno della metà (circa 140 milioni di triangoli/s).
Fra le altre cose in cui ATi ha
reso il chip R300 un avversario da battere, occorre prendere in
considerazione la pipeline di Pixel Rendering. ATi, infatti, è il primo
produttore ad implementare una pipeline di Pixel Rendering ad otto stadi
a 128-bit di tipo floating point che rappresenta una notevole tappa in
avanti rispetto alle 4 pipeline di Pixel Rendering a 64-bit di tipo
integer integrate nei chip Radeon 8500 e GeForce 4. Dunque non solo
potenza (le 8 pipeline offrono un notevole boost prestazionale nel fill
rate della scheda) ma anche precisione maggiore!
L'impiego di una pipeline di Pixel
Rendering completamente floating point e con una precisione di 128-bit
porta notevoli benefici in termini di immagini realistiche anche con i
giochi attuali, dato che la scheda video stessa evita innaturali
arrotondamenti sulle cifre meno significative del risultato delle
operazioni di Pixel Rendering.
Il chip R300 supporta anche le
specifiche Vertex Shader 2.0 e Pixel Shader 2.0 implementate nelle
specifiche DirectX 9. I maggiori benefici dell'uso del Vertex Shader 2.0
stanno nella possibilità di usare istruzioni di controllo del flusso (ad
esempio i cicli for, i salti, le subroutine, etc.) e
nell'incremento del numero di istruzioni (fino a 1024 istruzioni per
ciclo di clock) che possono essere eseguite per ogni ciclo di clock.
Inoltre, il chip R300 supporta anche la tecnologia Hardware Displacement
Mapping introdotta con il chip Matrox Parhelia.
Il supporto al Pixel Shader 2.0 include numerosi miglioramenti rispetto
alla precedente versione. Nella tabella qui sotto potete leggerne i
dettagli, oltre a quelli relativi al Vertex Shader ed alle High Order
Surface:
|
Dettagli Pixel Shader 2.0 |
| |
DirectX 8.0 |
DirectX 8.1 |
DirectX 9.0 |
| Vertex Shaders |
1.1 |
1.1 |
2.0 |
| Massimo numero Istruzioni |
128 |
128 |
256 |
| Massimo numero Costanti |
96 |
96 |
256 |
| Controllo di flusso |
No |
No |
Si |
| Pixel Shaders |
1.1 |
1.4 |
2.0 |
| Texture in ingresso |
4 |
6 |
16 |
| Massimo istruzioni Indirizzamento |
4 |
8 |
32 |
| Massimo istruzioni Colore |
8 |
8 |
64 |
| Tipo di dati |
Interi |
Interi |
Virgola mobile |
| Precisione dei dati |
32-bit |
32-bit |
128-bit |
| Render Targets |
1 |
1 |
4 |
| High Order Surface |
|
|
|
| N-Patches |
Si |
Si |
Si |
| Tessellation continua |
No |
No |
Si |
| Adaptive Tessellation |
No |
No |
Si |
| Displacement Mapping |
No |
No |
Si |
Come è possibile leggere dalla
tabella, le nuove specifiche sul Pixel Shader permettono di avere 16
textures in ingresso. Questo vuol dire poter applicare 16 textures per
ciclo di clock, mentre GeForce4 e Radeon 8500 ne possono applicare solo
6! Inoltre le specifiche 2.0 del Pixel Shader offrono una maggiore
flessibilità nella programmabilità dello stesso, grazie al supporto di
un maggior numero di istruzioni.
Grazie all'uso di registri in
virgola mobile per contenere i dati ed una precisione incrementata di
ben 4 volte (da 32-bit a 128-bit), le scene potranno avere un realismo
decisamente maggiore. Una delle più importanti cause di non realismo
delle scene 3D che escono fuori dagli attuali chip video è quella
dell'illuminazione della scena stessa. Le specifiche Pixel Shader 1.4
offrono un massimo di 256 possibili valori interi (32-bit / 4 canali)
per ogni canale RBGA della scena. Questo fa sì che una scena illuminata
in un certo modo debba subire per forza una illuminazione uniforme senza
poter distinguere bene le sorgenti di luce. Ad esempio, si abbia una
scena complessa come quella qui sotto:
Sovraesponendo o sottoesponendo la
scena 3D, attraverso un controllo di luminosità, di un valore pari a
64x, si ottengono i seguenti risultati:
Come vedete l'aumento della
luminosità non riesce a distinguere i vari punti della scena ma esegue
una modifica uniforme alla luce di tutta la scena. Questo a causa del
numero limitato di livelli disponibili per ogni canale RBGA. Passando a
dati in virgola mobile con precisione a 128-bit, ogni canale avrà a
disposizione ben 32-bit per immagazzinare valori; dunque 4.294.967.296
valori possibili! Il risultato, per una sottoesposizione di 64x è il
seguente:
Infine, nella tabella si fa
riferimento ai Render Targets. Come vedete, le nuove specifiche
prevedono fino a 4 Render Targets, il che vuol dire avere la possibilità
di gestire oggetti specifici della scena 3D per applicare gli algoritmi
di pixel shader. Questa possibilità è chiamata, all'interno delle
DirectX 9, supporto per Multiple Render Targets.
|