Asus Extreme N6800GT

Pag. 4 - CineFX3.0

Il motore di shader è la terza versione del CineFX Engine che promette il pieno supporto dello shader model 3.0 delle DirectX e della versione 2.0 delle librerie OpenGL.

Con il nuovo standard, i vertex shader guadagnano diversi lati positivi: programmi di lunghezza virtualmente infinita, controllo dinamico del flusso delle istruzioni, semplificazione e flessibilità di gestione dei programmi di shader, displacement texture mapping, divisore del flusso di frequenza vertici, ecc.

I primi 2 vanno di pari passo e non a caso la loro forza sta nella collaborazione. Se il primo permette la generazione di particolari effetti visuali con l’ausilio di programmi di grosse dimensioni e senza adoperare tanti piccoli programmi, il secondo permette alla gpu di eseguire solo i calcoli realmente necessari con particolare efficienza di elaborazione. Nel primo caso si vanno ad eliminare tutte le latenza necessarie ad introdurre nella gpu il nuovo set di istruzioni di shader; per esempio ciò che era generabile con 3 programmi di shader passati, ora lo si realizza con 1 solo dalla maggiore lunghezza. Nel secondo caso ogni programmatore avrà la possibilità di realizzare salti all’interno di un programma di shader, ricaricare istruzioni a monte dello stesso, effettuare cicli, ecc., quindi a partire da un unico programma la gpu andrà ad elaborare solo gli effetti ogni volta necessari alla scena.

Il displacement mapping è una tecnica molto importante di rappresentazione poligonale tramite texture (denominata anche elaborazione dei vertici tramite texture) con cui abbiamo avuto il primo contatto in occasione dell’analisi del Parhelia di Matrox. Con questa tecnica è possibile creare superfici dal grande dettaglio semplicemente convertendo una texture di gradazioni di colore (per la precisione di grigio) in vertici; in questo modo la superficie convertirà ciascuna componente di colore in un’altezza diversa del pixel senza passare per tecniche di bump mapping spesso poco efficaci. Questa tecnica, in particolare, si compone di 2 metodi di generazione poligonale: il Depth-Adaptive Tessellation e il Vertex Texturing. Inserire dei tasselli (tessellation) all'interno di una mesh (superficie che definisce un oggetto 3D e costituita da triangoli) significa arricchire lo stesso oggetto di particolari grafici. Per far ciò, alla tessellated mesh si applica una displacement map, una immagine costituita da gradazioni di grigio tale che ad ogni tonalità dello stesso colore corrisponda un'altezza del vertice corrispondente a ciascun pixel dell'immagine. Il realismo regalato da tale soluzione è notevolmente maggiore di quello conferito dal bump mapping, tecnica nata per "ingannare" l'occhio umano con finti rilievi su una superficie. Il displacement mapping, invece, crea degli increspamenti reali. E' anche vero che spesso tutta questa precisione non serve in quanto l'occhio umano è troppo impegnato ad osservare gli oggetti in primo piano. Ecco perchè spesso l'efficienza di calcolo è incrementata tenendo conto della profondità della scena 3D ed è per questo che si parla di adattamento alla profondità (o depth adaptive) per l'arricchimento poligonale di ogni oggetto 3D. A differenza dell’approccio introdotto nel Parhelia, NV40 non permette, però, la generazione di vertici necessari per l'incremento della qualità d’immagine.

Il divisore del flusso di frequenza vertici è un’altra importante novità introdotta nel CineFX 3.0. Quando è necessario creare efficientemente un’animazione caratterizzata da cloni di un oggetto con proprietà di movimento diverse tra loro, si ricorre a questo set di istruzioni di shader. Si pensi a quando è necessario animare in modo diverso uno sciame di api, o i soldati di un esercito, o una mandria di cavalli, o degli alberi mossi dal vento. Detto in altre parole si va ad animare un set di oggetti che per le caratteristiche di base sono identici tra loro, mentre risultano unici per acuni dettagli che rendono il proprio movimento diverso da quello degli altri.

Anche i pixel shader hanno conosciuto importanti novità con il supporto dello shader model 3.0. Se è vero che la vecchia versione di CineFX permetteva il doppio supporto di precisione del colore a 16 e 32 bit (FP16 e FP32), il CineFX3.0 regala il supporto a 32bit per la piena compatibilità delle specifiche Microsoft. In realtà, come accordato da Ati, è l’FP24 quello richiesto dalle specifiche fino alla versione 2.0, ma ora nVidia permette, a chi lo voglia, di andare oltre le specifica senza pregiudicare le prestazioni come nel GeForceFX e, quindi, di attenersi ad FP24 o FP32.

Anche in questo caso la lunghezza degli shader è stata portata a livelli praticamente infiniti con controllo dinamico del flusso, la differenza sta nella possibilità di supportare la precisione a 24bit quando l’applicativo lo decide, mantenendo la stessa compatibilità con la precisione a 16 o 32 bit. Questo significa che NV40 è in grado di adattarsi a ciò che l’applicativo vuole, mentre NV35 in passato era stato costretto a far lavorare le proprie pipeline a 16bit quando la precisione a 24 richiesta dal gioco non permetteva prestazioni decenti. CineFX3.0 è stato ottimizzato nella velocità e nella qualità.

Importante novità, già supportata da Ati sin dalla comparsa di R300, è il Multiple Render Targets. Con questa tecnica è possibile registrare i dati di ogni pixel (alla fine dell’elaborazione dello shader) in buffer diversi e temporanei. Poi dalla fusione dei dati è possibile ottenere effetti di luce dallo straordinario realismo. Questa tecnica è anche denominata “deferred shading” in quanto lo shading della scena vero e proprio è ritardato fino al termine della generazione di tutti i rendering richiesti dall’applicazione. Anche in questo caso l’utilità della tecnica sta nell’efficienza di utilizzo. Questo permette alle pipeline di non dover attendere il ricalcolo geometrico della scena o il caricamento delle texture in quanto la GPU riprende il risultato temporaneo del primo rendering e continua nell’elaborazione degli altri necessari al completamento della scena.

Facciamo un’esempio per meglio comprendere questa tecnica. Ammettiamo che vogliamo creare una scena caratterizzata da effetti di luce di tipo HDR (High Dynamic Range). Con il primo passaggio di rendering riempiamo 3 buffer con color map, normal map e depth map. Con le ultime 2 e con le impostazioni di luce, la GPU crea la mappa di luce che va a fondersi con la color map. A questo punto si vanno ad applicare le impostazioni HDR per arricchire di intensità particolari zone della scena.

 

Nel primo passaggio di rendering si vanno ad elaborare 3 mappe: la depth, la normal e la color map.

In seguito si vanno a fondere le prima due con i primi elementi di luce. Quindi applico la color map.

Infine gli elementi di luce come i glow effect prima non considerati per l'effetto finale.

Diversi sono gli effetti ora realizzabili sui pixel, gli stessi introdotti da Ati in R420: il subsurface scattering (effetti traslucidi su superfici), ombre morbide, ombre ambientali, illuminazione globale. In realtà questi effetti sono permessi dallo shader model sin dalla versione 2.0, il problema che nasceva in passato era la potenza video, spesso insufficiente a gestire un’illuminazione della scena in tempo reale. Nvidia, come anche Ati in R420, punta sulla straordinaria potenza elaborativa, ora sufficiente e gestire in maniera agevole effetti di luce così avanzati.

 

Scritto da nico64 | il 2005-09-16 00:00:00 |

Annunci Google