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

IL MOTORE DAGLI INFINITI EFFETTI

Il GeForce 3 è il primo processore grafico che, grazie al suo nFiniteFX engine, supporta in hardware i Vertex ed i Pixel Shader programmabili introdotti con le DirectX 8.0.
Gli Shader sono, in sostanza, delle funzioni grafiche che aggiungono degli effetti speciali agli oggetti in una scena 3D. Con il motore nFiniteFX, il GeForce 3 può agire a due livelli: in fase di creazione degli oggetti che compongono la scena, sui vertici dei triangoli che costituiscono i modelli e a livello dei pixel delle texture che ricoprono l'"ossatura" poligonale degli oggetti stessi. Sul nuovo chip nVidia, questi Shader sono completamente programmabili: ciò vuol dire che un programmatore può decidere, utilizzando un apposito linguaggio messo a disposizione dalle DirectX 8.0 (e dalle estensioni nVidia alle OpenGL), di creare e di personalizzare gli effetti caricando delle apposite istruzioni nella memoria degli Shader.

VERTEX SHADER: LARGO AL NUOVO!

Un Vertex Shader, come abbiamo detto, opera sui dati dei vertici degli oggetti. Ogni vertice è definito da una serie di dati, che possono limitarsi alla sola posizione sugli assi X, Y e Z, ma possono anche comprendere informazioni sul colore, l'alpha-channel, le texture e l'illuminazione. Il Vertex Shader non creano né eliminano vertici, ma operano su di essi, cambiando i valori dei dati che li descrivono. Dopo essere "passato" attraverso il Vertex Shader, il vertice può risultare spostato nello spazio, con colori differenti, più o meno trasparente o con coordinate differenti delle texture. Naturalmente, per ottenere certi effetti, a volte non tutti i vertici di un oggetto devono essere cambiati da un Vertex Shader e dunque è possibile dire alla funzione di operare solo su quelli con determinate proprietà. Sul GeForce 3, entra in gioco anche la programmabilità: una volta finita l'elaborazione su un certo gruppo di vertici, il Vertex Shader in memoria può essere sostituito da un'altra funzione in grado di applicare effetti completamente diversi.
L'unità di Vertex Shading può essere considerata un'"estensione" dei motori di Transformation & Lightining dei predecessori del GeForce 3. Quando è utilizzato un Vertex Shader, i motori T&L sono inattivi. Infatti, l'output di un Vertex Shader è un vertice completamente trasformato ed illuminato, dunque già pronto per la fase di setup. Le unità T&L sono però state mantenute nel GeForce 3 per evitare problemi di compatibilità con i giochi, vecchi e nuovi, che ancora si appoggiano sulle DirectX 7.0: un gioco creato per DirectX 8.0 in grado di avvantaggiarsi dei Vertex Shaders, sfrutterà la nuove unità senza chiamare in gioco quelle "vecchie", un titolo invece basato sulla versione di API precedente utilizzerà le unità di T&L statici.
Siccome i Vertex Shaders sul GeForce 3 sono completamente programmabili, il loro numero è virtualmente limitato solo dalla creatività dei programmatori. Ma naturalmente, per dare una buona base di partenza agli sviluppatori, NVIDIA nelle sue librerie di sviluppo ha fornito una lunga serie di effetti già pronti.
Quelli più importanti, contemplano sicuramente le animazioni complesse dei personaggi: il matrix skinning e la keyframe interpolation. Il matrix skinning è quella tecnica grazie alla quale, rappresentando (in maniera un po' semplicistica, ma l'esempio calza) i dati relativi a un "muscolo" o a un "osso" di una piccola parte del corpo del personaggio che stiamo realizzando (per esempio la zona dove si uniscono spalla e braccio) con delle matrici, si possono rendere le giunture più precise e realistiche, con pelle e vestiti che si adattano perfettamente e movimenti più fluidi. Con il GeForce 2 potevano essere utilizzate fino a 2 matrici di controllo per rappresentare singole parti del corpo del personaggio, con il Radeon 4.
Tramite i Vertex Shader, invece, sul GeForce 3 i programmatori possono utilizzare fino a ben 32 matrici per ogni singola parte, definendo quindi migliaia di "ossa" e muscoli per personaggio. Ora, potendo contare su 32 punti di controllo, il livello di dettaglio che si può raggiungere è veramente elevatissimo, tanto da permettere di creare volti con rughe che appaiono e scompaiono quando i personaggi parlano o sorridono. Tutto sta, naturalmente, nel saper sfruttare bene questa tecnica. La keyframe interpolation, è invece una tecnica (fornita fino a ora solo dal Radeon di ATi) che permette di realizzare le animazioni partendo da dei fotogrammi "chiave" (per esempio, inizio e fine) e facendo creare al sistema tutti i fotogrammi intermedi, in modo da rendere l'animazione più fluida possibile. Anche questa tecnica può essere gestita tramite i Vertex Shader, e naturalmente su un hardware più potente, poiché non vengono cambiati i tempi di inizio e fine dell'animazione, vengono generati più fotogrammi intermedi che rendono il movimento ancora più realistico.
Sono poi fornite funzioni per gestire i cosiddetti effetti ambientali: i Vertex Shaders possono applicare gli effetti di fumo o nebbia volumetrica, facendo trasparire oggetti piccoli o grandi perché vengono gestiti in base all'altezza o all'elevazione dei loro vertici. I Vertex shaders possono modellare la rifrazione delle luci o proiettare una texture nello spazio tridimensionale per far apparire più realistici gli effetti di uno stagno o di un corso d'acqua. Ancora, diviene possibile realizzare la diffrazione dovuta al calore (onde di calore). Molto utili sono le funzioni di Procedural Deformation, che permettono di aggiungere del movimento a oggetti altrimenti statici, come bandiere svolazzanti o i corpi di animali che si espandono e si contraggono nella respirazione, o possono essere utilizzate per realizzare degli effetti statici sugli oggetti stessi come, per esempio, le ammaccature su un corpo di metallo dovute all'impatto con un proiettile.
Il morphing è una tecnica di animazione simile alla keyframe interpolation. Fissando una versione di partenza e una di arrivo di un oggetto, il vertex shader genera autonomamente le versioni intermedie, estrapolando la posizione dei vertici dai dati di arrivo e di fine. Queste versioni intermedie esistono solo temporaneamente, non sono salvate in maniera permanente e sono create solo quando è necessario. A differenza della keyframe interpolation, i tempi di inizio e fine animazione non sono fissi, dunque su hardware più veloci si hanno effetti di morphing più rapidi. Regolando scene di partenza e numero di scene intermedie, si può naturalmente ottenere un'animazione via via più realistica. Con i Vertex Shader possono essere creati numerosi effetti di movimento. Viene fornita, per esempio, la funzione per gestire il Motion Blur, utile per creare l'impressione di alte velocità. Particolarmente interessanti sono gli effetti di lenti ottiche: si possono realizzare delle funzioni di Vertex Shading personalizzate per riprodurre gli effetti di distorsione che si producono guardando attraverso le lenti di un binocolo o attraverso gli spessi vetri di un bombardiere della seconda guerra mondiale e così via...
Ancora, non si possono non citare gli effetti di illuminazione. Utilizzando un motore di Lighting statico come quello del GeForce 2 GTS o del Radeon, è possibile applicare solo un numero limitato di luci ad ogni vertice (otto). Utilizzando i Vertex Shader, invece, è in teoria possibile applicare un numero infinito di luci hardware. Inoltre, viene data anche la possibilità di gestire la cosiddetta two sided lighting, cioè di applicare effetti di illuminazione differente sulle due facce dei triangoli. Con i vecchi processori grafici, infatti, i programmatori per impostare degli effetti di illuminazione particolari per l'interno di un oggetto erano obbligati a modellarlo, dovendo così utilizzare il doppio dei poligoni. Utilizzando i Vertex Shader, invece, una singola superficie può avere proprietà di illuminazione diversa per ciascuna delle due sue facce, permettendo così una maggiore ottimizzazione delle risorse.
Questi sono solo alcuni degli effetti che è possibile realizzare sfruttando i Vertex Shader. L'importante è ricordarsi che si basano sul principio della programmabilità: è possibile creare programmi specifici per ogni necessità, in grado di operare su gruppi più o meno ampi di vertici, e in pochi istanti riconfigurare il tutto per un'altra funzione. Ciò permette di implementare un numero virtualmente infinito di funzioni, anche complesse (un sistema di matrix skinning con 32 matrici, se non fosse riprogrammabile, richiederebbe un numero di transistor quasi pari a quello dell'unità di vertex shading programmabile), limitate in teoria solo dalle capacità degli sviluppatori di sfruttare il linguaggio messo a disposizione per realizzare i Vertex Shader. Naturalmente, ci sono dei limiti hardware (lunghezza dei miniprogrammi, che possono essere al massimo di 128 istruzioni, tempo di esecuzione, di 1 ciclo di clock per istruzione), ma le potenzialità sono moltissime. Bisognerà naturalmente vedere come saranno sfruttate.