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

GeForce 3 - Prima Parte

Speciale

GeForce 3 svelato - La tecnologia - Prima parte

Evoluzione o rivoluzione? La nuova GPU nVidia porta numerose novità nel campo della grafica 3D e Carmack è stato il primo a decretarne il futuro successo. Andiamo a vedere in dettaglio le sue caratteristiche, e cerchiamo di capire se questo chip grafico è veramente ciò che tutti si aspettano.

di Antonino Tumeo, pubblicato il

PIXEL SHADER: COME MIGLIORARE UNA VECCHIA CONOSCENZA?

Nella creazione di una scena tridimensionale, dopo aver superato la fase di trasformazione ed illuminazione (o nel caso del GeForce 3, di Vertex Shading) si passa alla fase di setup dei triangoli, durante la quale i triangoli e i vertici usciti dall'elaborazione precedente vengono convertiti "matematicamente" in pixel o frammenti, in modo che possa entrare in azione il motore di Pixel Shading. Questo motore, in sostanza, si occupa di tutti i calcoli a livello di pixel per determinare come deve essere il colore finale di ciascuno di essi, in relazione alle informazioni ricevute dai motori di trasformazione e illuminazione e in relazione alle texture che si vogliono applicare sopra ai modelli. Naturalmente le texture possono contenere informazioni su cambiamenti di colore, di illuminazione, riflessi dagli oggetti circostanti, proprietà del materiale... Si tratta, insomma, di tutti quegli effetti che servono a rendere la scena effettivamente una "gioia" per gli occhi, con oggetti realistici e dal grande impatto visivo.
Avevamo avuto un assaggio delle potenzialità di un motore di Pixel Shading con funzione fisse con l'nVidia Shading Rasterizer (NSR) del GeForce 2 GTS.
Se ricordate, grazie all'NSR, in grado di sovrapporre fino a due texture per passata, era possibile applicare alcuni effetti di illuminazione per-pixel (per la precisione 7), tra i quali anche il raffinato dot3 bump mapping (effetto tramite il quale si possono rappresentare, per esempio, i riflessi su una sfera di metallo), che consentivano di ottenere immagini ricche di dettaglio senza però aumentare il numero di poligoni dei modelli. Considerato da nVidia come la naturale "estensione" del motore di Vertex Shading nell'nFiniteFX engine, il sistema di Pixel Shading nel GeForce 3 ha avuto numerosi miglioramenti: è programmabile, consente di combinare fino a quattro texture in una passata con otto diverse operazioni, gestisce letture dipendenti di texture e può ricevere parametri dal motore di Vertex Shading. Analizziamone le caratteristiche punto per punto.
Prima di tutto, la programmabilità come per i Vertex Shader, benché limitata alla realizzazione di funzioni di sole 12 istruzioni (4 per la lettura delle texture e 8 per combinarle), dovrebbe fornire la possibilità agli sviluppatori di creare effetti a proprio piacimento, invece che basarsi su degli effetti fissi e non adattabili a tutte le situazioni. Utilizziamo il condizionale perché John Carmack ha espresso qualche dubbio proprio riguardo questo aspetto: "Sono partiti da una buona idea, ma sembra che abbiano dovuto tagliarla sempre di più fino ad arrivare a supportare pochi specifici effetti speciali che sono stati ritenuti importanti al prezzo di una adeguata soluzione generale". Ciò nonostante, il motore di Pixel Shading del GeForce 3 è in grado di gestire fino a 4 texture in una passata per pixel. Chiariamo che ciò non implica un maggiore fill rate: in ogni ciclo di clock, possono essere sempre applicati due texel (cioè due texture) a ogni pixel, come nel GeForce 2 GTS. Però, se con il vecchio chip grafico si voleva realizzare un effetto per il quale era necessario applicare, per esempio, tre texture a un singolo pixel, bisognava passare per una ulteriore elaborazione dei modelli poligonali e dovevano essere riscritti nuovamente tutti i dati riguardanti il colore e la posizione sull'asse Z di ciascun pixel nei relativi buffer, con la conseguente occupazione della banda di memoria. Erano, cioè, necessarie due passate. Con il GeForce 3, invece, benché la velocità pura in termini di fill rate sia la stessa, per applicare fino a quattro texture a uno stesso pixel, è necessaria una sola passata. Ciò significa che per ogni quattro texture caricate i dati di colore e di posizione vengono elegantemente scritti solo una volta, risparmiando parecchia banda (che come sappiamo, è molto importante per le prestazioni).
La lettura di queste texture, inoltre, può essere "dipendente", dando più flessibilità e la possibilità di creare effetti come l'Environmental Mapping Bump Mapping, che è quindi adesso supportato anche dal nuovo prodotto nVidia. La possibilità dei Vertex Shader di passare dati ai Pixel Shader, infine, è importante perché rende più efficace e comoda la creazione degli effetti. Un esempio lampante è costituito dalla gestione del dot product bump mapping, la versione più potente di bump mapping, la tecnica usata per rendere più realistiche le superfici degli oggetti, con tutte le loro rugosità, senza però incrementarne la complessità poligonale. Per mettere in atto questa tecnica, è necessario sovrapporre alla texture originale della superficie altre due texture "particolari": la height map e la normal map. La prima è una texture a toni di grigio, nella quale toni più o meno chiari corrispondono alle altezze relative delle varie zone della superficie. La seconda, invece, è una mappa a colori RGB (Red Green e Blue), dove i colori rappresentano i dati dei vettori normali alla superficie. I vettori normali danno delle indicazioni sull'orientamento delle varie zone della superficie, permettendo dunque di determinare come esse vengono illuminate.
Ogni volta che un triangolo viene spostato o ruotato, i vettori della normal map devono essere ritrasformati, perché naturalmente è cambiato il loro l'orientamento rispetto alle fonti di luce o il punto di vista. Sulla vecchia GeForce 2, e sul Radeon, in grado di gestire questo tipo di bump mapping, queste operazioni di trasformazione della normal map vengono eseguite interamente dalla CPU del sistema, facendo quindi rallentare pesantemente le applicazioni. L'unità di Vertex Shading del GeForce 3, invece, può calcolare i vettori necessari alla trasformazione della normal map (fase di setup), che vengono passati all'unità di Pixel Shading, la quale poi grazie ai dati ottenuti compie effettivamente questa operazione e crea le normali necessarie a realizzare l'effetto. Tutto questo viene gestito autonomamente dal GeForce 3 senza chiamare in causa la CPU, dunque senza grossi impatti sulle prestazioni dei giochi che sfruttano questo effetto. In aggiunta, si deve anche dire che il dot product bump mapping è uno dei tipici effetti che richiedono più di due texture, e il GeForce 3, grazie alla capacità di gestire quattro texture per passata che abbiamo evidenziato più sopra, può ottimizzare le richieste di banda di memoria.
Ma le potenzialità del GeForce 3 vanno oltre al semplice dot product bump mapping. Grazie ai Pixel Shader, infatti, è possibile realizzare il bump mapping con la gestione dei riflessi (denominata Blinn Bump Mapping): dopo aver elaborato i dati ed applicato il dot product bump mapping, l'unità di Pixel Shading può aggiungere alla superficie i riflessi basandosi sulla cubic environment map (il sistema più avanzato per gestire i riflessi attualmente gestito dalle schede grafiche 3D, già introdotto con il GeForce 256). Altri effetti che possono essere gestiti con i Pixel Shader sono le ombre, gestite con un nuovo metodo che pare essere molto realistico, ma del quale non si è visto neanche un dimostrativo al momento, e la "funzione isotropica di distribuzione del riflesso bi-direzionale basato sull'illuminazione" (Isotropic BRFD Based Lighting), complessa nomenclatura che identifica una tecnica basata su varie formule matematiche il cui scopo è quello di far apparire reali le superfici di materiali diverse indipendentemente dall'angolo da cui le si osserva.
C'è però un particolare importante da far notare: benché non sia precluso (ovviamente) utilizzare le vecchie funzioni per le texture di DirectX 7, se si utilizza l'interfaccia per i Pixel Shader delle DirectX 8.0, si otterranno come risultato applicazioni con effetti più complessi ma che, se lanciate su chip grafici che non offrono supporto hardware ai Pixel Shader, obbligano l'INTERO motore grafico del gioco a funzionare in software, perché, a differenza dei Vertex Shader, non c'è modo di emulare via software solo questa funzionalità. Insomma, anche per quanto riguarda i Pixel Shader, sembra che ci siano grosse possibilità: l'occasione di realizzare superfici sempre più realistiche e dal grande impatto visivo, senza però dover aumentare la complessità dei modelli poligonali, pare alla portata degli sviluppatori. Su questo aspetto, però, pesa il giudizio attualmente negativo di John Carmack, non pienamente convinto che siano stati messi a disposizione tutti i mezzi necessari per sfruttare al meglio le nuove funzioni e alcuni, canonici, problemi di retrocompatibilità. Non possiamo far altro che aspettare e vedere che cosa potranno tirare fuori i programmatori con questi mezzi.

ANCORA MOLTO DA DIRE

In questa prima parte della tecnology preview del GeForce 3, abbiamo visto le novità portate dal nuovo nFiniteFX engine. Sicuramente molte, sicuramente interessanti. Ma si tratta di potenzialità in prospettiva: perché queste caratteristiche vengano sfruttate, è necessario che i giochi si avvalgano pienamente delle DirectX 8.0 o delle estensioni proprietarie di nVidia. Dunque, vedremo un loro utilizzo effettivo e concreto solo tra un po' di tempo, e solo allora potremmo dire se e come le promesse di nVidia si saranno concretizzate. L'High Resolution Anti Aliasing e la Lightspeed Memory Architecture, che analizzeremo nella seconda parte di questo speciale sul GeForce 3, invece, dovrebbero fornire fin da subito degli effetti tangibili. Li discuteremo tra pochissimo, restate con noi!