Speciale Le nuove tecnologie NVIDIA

Da Dynamic Super Resolution a VR Direct, ecco tutte le nuove funzionalità delle schede NVIDIA.

Speciale Le nuove tecnologie NVIDIA
Articolo a cura di

Le novità introdotte da Nvidia con le nuovissime schede video Maxwell 2.0 non si fermano solo alle eccezionali performance tecniche. E' noto ormai che a Santa Clara i laboratori software sono importanti almeno quanto quelli hardware, perché i risultati si vedono. Lato driver, Nvidia è sempre stata un passo avanti rispetto alla concorrenza e nel corso degli ultimi due anni ha introdotto novità importantissime, come l'ottimo Geforce Experience (un tool per automatizzare l'aggiornamento dei driver e la configurazione dei profili di avvio di ogni videogioco in modo ottimale), il TXAA e il Vsync adattivo. A questo giro le novità sono davvero dense: si parla di illuminazione a Voxel, downsampling integrato e Realtà Virtuale. E sembra di entrare davvero nella next-gen...

Dynamic Super Resolution: downsampling per tutti

I titoli portati come esempio da Nvidia per spiegare le due tecnologie software di punta sono Dark Souls 2 e Battlefield 4. Il motivo è che tecnicamente si tratta di due poli opposti: DS2 non richiede affatto una gran potenza di calcolo ma soffre di problemi di qualità dell'immagine; BF4 al contrario richiede un bel po' di risorse video, ma rende bene al naturale, senza mod o strani artifici da hacker.
Una tecnica per ovviare al primo problema (ottime prestazioni, scarsa qualità dell'immagine) che usano i patiti del PC gaming è il famigerato downsampling. In pratica si tratta di calcolare un frame a una risoluzione più elevata rispetto a quella a cui poi verrà visualizzato. Il trucchetto per gli utenti Nvidia è, ormai da anni, quello di inserire manualmente delle risoluzioni fittizie nel pannello di controllo dei driver, in modo da "far credere" al gioco che il vostro schermo sia un 4K (detta così sembra chissà che cosa, ma in realtà è semplicissimo). Chi scrive gioca già ad Assassin's Creed 4, Dark Souls 2, Elite: Dangerous e alla maggior parte dei titoli proprio in downsampling a una risoluzione che varia dai 1440p ai 2160p, su un monitor 1080p. Il vantaggio è evidente: i dettagli a schermo aumentano in maniera netta e di conseguenza la qualità dell'immagine. Il problema è che non sempre si può effettuare un'operazione simile, soprattutto in giochi non molto recenti o in quelli in cui l'interfaccia non scala con la risoluzione. Spesso mi è capitato di giocare in downsampling con il contatore della vita grande quanto la capocchia di uno spillo, o l'inventario che per usarlo si perdevano dieci diotrie. Inoltre, anche in caso di una gestione ottimale da parte del videogioco della risoluzione e dell'interfaccia, la discrepanza tra input driver (che riconoscono una risoluzione nativa dello schermo) e output video (che ne richiede una differente fuori parametro) a volte fa impallare il gioco, rendendolo instabile.

La Dynamic Super Resolution vuole risolvere ogni problema di compatibilità e, al contempo, ottimizzare il processo di riduzione del frame dalla risoluzione di calcolo alla risoluzione di output. Il punto chiave è che in downsampling si recuperano parecchie risorse video eliminando del tutto (o quasi) l'utilizzo di ogni forma di Anti Aliasing, effetto che tipicamente sporca molto l'immagine. Un esempio eclatante di questo tipo di aberrazione visuale da filtro AA è Far Cry 3, che il sottoscritto non è riuscito a giocare a causa delle macchie oleose che vedeva a schermo al posto dei poligoni. Tanto orribile quanto non disabilitabile dalle opzioni. Ora, grazie al supporto diretto via driver, avremo tutti vita più facile nel praticare l'antica arte del downsampling su schede Nvidia, non solo della serie 900, ma anche di quelle delle serie passate. Il tutto sarà perfino integrato nei profili Geforce Experience da scaricare di volta in volta per ogni gioco, anche se per i più smanettoni sarà possibile intervenire sullo scaling direttamente dal pannello di controllo impostando due valori: il moltiplicatore (ovvero di quante volte volete aumentare la risoluzione del frame) e l'ottimizzazione software dello stesso. Quest'ultima segue un algoritmo di conversione gaussiano, contrapposto a quello più esoso pixel per pixel e non ci ha particolarmente impressionato in positivo dagli screenshot rilasciati. Il motivo è che con un filtro di quel tipo si perde moltissimo in termini di profondità di colore e luminosità del frame, che risulterà come "annacquato". Per fortuna sembrerebbe possibile disabilitarlo completamente ma ci servirà un test completo per chiarirci le idee. Se fosse possibile eliminare questo espediente di dubbio utilizzo, ci potremmo trovare di fronte a una forma indiretta di Anti Aliasing di indiscusso valore perché tutti sanno che aumentare brutalmente la risoluzione è molto meglio che applicare qualsiasi tipo di filtro. Fidatevi.

Multi Frame sampled AA: torna il Temporal

Il Multi Sampling è una forma di Anti Aliasing molto usata tra gli appassionati perché, nonostante l'età (fu introdotta da 3Dfx nel lontano 1998), è quella che a tutt'oggi possiede il rapporto tra prestazioni e qualità dell'immagine più vantaggioso. Esperimenti come il MLAA di AMD (usato soprattutto sulle console Sony) e il FXAA di Microsoft (usato sulle Xbox), se abituati a giocare in Multi Sampling, danno come risultato un pugno nell'occhio di chi gioca. E tanti saluti alla qualità dell'immagine, la quale diventa una pozza impaludata di confusione cromatica. All'opposto metodi più raffinati come lo Sparse Grid Super Sampling Anti Aliasing (SGSSAA per gli amici) sono come le belle donne e pretendono tutto e subito dalla vostra scheda video: una gran qualità d'immagine, si, ma che prestazioni che richiede! Al momento le alternative rimangono quindi il caro vecchio MSAA e il meno efficace ma molto meno esoso SMAA, applicato tramite un programmino hack esterno ai file di gioco, procedura che spesso crea problemi come crash improvvisi e artefatti grafici.
Le nuove schede Nvidia della serie 900 arrivano con una bella rinfrescata alle loro Raster Operations Pipeline (o più simpaticamente dette ROP), le unità logiche della GPU adibite tra le altre cose al calcolo degli effetti di post-processing. Ebbene le entità dedicate al calcolo del MSAA all'interno delle nuove ROP di Nvidia sono in grado di effettuare passaggi parziali sui pixel da smussare e di riutilizzare i passaggi effettuati nella stessa posizione nei frame successivi. Quindi al posto di ricalcolare l'intero filtro MSAA per ciascun frame, ne calcolano solo la metà, lo duplicano per propagarlo lungo un determinato bordo poligonale e in seguito correggono il tutto confrontando il bordo stesso con quello calcolato nei frame precedenti.

In soldoni: un MFAA 4x equivale a un MSAA 2x, più una correzione di tipo temporale (cioè basata sui frame calcolati in precedenza). Già AMD nel 2005 ci aveva provato col Temporal Anti Aliasing (o TAA) a fare una cosa simile, abbandonando il tutto qualche anno dopo perchè orribile a vedersi, ma Nvidia sembra convinta delle qualità del suo nuovo effetto. Anche in questo caso siamo costretti a rimandare il giudizio dato che non basta un'immagine per capire l'efficacia di un simile filtro. Tutto dipende infatti da come si comporteranno in movimento gli algoritmi temporali dell'MFAA rispetto a quelli (pessimi) del TAA perchè il concetto di base è assolutamente identico. Per spezzare una lancia in favore di Nvidia è anche vero che al tempo della serie x800 di AMD non c'erano ROP dedicate o altri supporti hardware, per cui questa potrebbe essere davvero la volta buona per questo tipo di soluzione.

DirectX 11.3: Voxel per tutti!

La strada verso le DirectX 12 è ancora piuttosto articolata. Nonostante Microsoft non sembri troppo entusiasta di lanciarle in un futuro prossimo (forse a causa di un supporto hardware poco incisivo sul fronte Xbox), negli ultimi due anni sono state introdotte due estensioni delle Directx 11.1 che Nvidia ora ha inserito nelle sue due nuove schede Gtx 980 e Gtx 970, le uniche al momento che offrono compatibilità completa con Directx 11.3. Le novità introdotte più significative sono essenzialmente due e riguardano entrambe i cosiddetti voxel.
Volume Tiled Resources

Vi ricordate le MegaTexture di John Carmack, uno dei papà di Doom? Nel motore di Rage (iD Tech 5) implementò una novità assoluta per cui invece di caricare una notevole quantità di texture da posizionare sui vari poligoni, veniva caricata un'unica grossa texture per il paesaggio, che veniva spezzettata in texture più piccole a seconda della posizione del giocatore e usate o meno di volta in volta a differenti risoluzioni (questa tecnica di caricare solo le texture utili al rendering viene detta Sparse Allocation). Questa tecnologia permette in sostanza di ottimizzare notevolmente lo streaming delle texture in memoria ed è esattamente ciò che si propone di fare la nuova feature delle DirectX, con due differenze fondamentali. La prima è che Carmack inventò il sistema come estensione delle API OpenGL e quindi l'iD Tech 5 lo usa a livello software; invece questa istruzione DirectX, detta Tiled Resources, lo implementa a livello hardware, velocizzando ulteriormente il computo all'interno dei set di istruzioni della stessa scheda video. La seconda differenza, e vera novità, è che ora le Tiled Resources sono applicabili direttamente alla terza dimensione (da qui il suffisso Volume). In altre parole grazie alle Volume Tiled Resources è molto più veloce applicare le texture ai voxel (i pixel dotati di volume), per le schede video che adottano tutte le istruzioni DirectX 11.3. Le 980 e 970 sono per ora le sole schede già in grado di usare questa tecnologia, ma ci aspettiamo rapidamente una risposta da parte di AMD. L'importante, ai fini di questo articolo, è che da questa innovazione dipendono le due successive, tra cui quella più importante riguardante la Global Illumination.
Conservative Rasterization

La seconda grossa novità riguarda sempre i famigerati voxel di outcastiana memoria. Prima di inoltrarci ulteriormente dobbiamo dire due parole per chi non conoscesse la Rasterizzazione. Un'immagine qualsiasi è formata da una serie di linee e curve che, per ottimizzare la rappresentazione digitale dell'immagine stessa, vengono rappresentate da funzioni matematiche; questa in sostanza è detta grafica vettoriale e viene usata per semplificare la creazione di un'immagine e in alcuni casi anche la sua visualizzazione a schermo. Tuttavia una simile rappresentazione non è molto fruibile all'esterno dell'ambiente software in cui viene creata (ad esempio per un output video generico, come un monitor) e per questo è necessario "ridurla" in una classica rappresentazione pixel per pixel, senza funzioni di mezzo. Per farlo giunge in soccorso proprio il processo di Rasterizzazione che converte in sostanza un'immagine 2D vettoriale (quindi ad esempio una texture) in immagine 2D "a pixel", detta appunto raster. Nella conversione tipicamente si perde in qualità dell'immagine a causa del metodo a campione comunemente usato: un software o una scheda video qualsiasi assegna ad ogni pixel (su cui è rappresentata l'immagine vettoriale) un punto centrale e in seguito seleziona quali pixel riportare nel raster a seconda di alcuni criteri di distanza da quel centro.
Nella Conservative Rasterization invece tutto questo viene effettuato senza usare la distanza punto per punto ma direttamente usando l'area dell'immagine vettoriale. Il miglioramento è notevole in termini di qualità, ma non solo! Introducendo la variabile di volume con questa tecnica è possibile letteralmente costruire un voxel da un'immagine vettoriale in modo molto più rapido e semplice di quello standard, guadagnando millisecondi preziosi nel calcolo di un frame in tempo reale. Il tutto direttamente a livello hardware grazie all'implementazione diretta delle istruzioni DirectX 11.3 nelle schede video.

Voxel Global Illumination (VXGI): illuminare in Voxel!

Fin'ora abbiamo parlato di voxel e termini strani, in puro slang da grafico dell'era digitale. Ma queste due novità a cosa potrebbero servire esattamente in un videogioco? Una risposta possibile la dà Nvidia grazie alla sua nuova tecnica di Global Illumination a Voxel. La Global Illumination è il Santo Graal di ogni grafico e permette di rendere un'immagine (o una scena) a schermo in modo molto più realistico, illuminandola a cascata e simulando l'impatto che una o più sorgenti di luce (poste manualmente dal grafico) hanno sugli elementi a schermo. La simulazione che tiene conto della geometria, dei materiali e dell'ottica fisicamente credibile per creare ombre, riflessi e rifrazioni (detta Path Tracing) è fuori discussione -per ora- nell'ambito della grafica in tempo reale. In termini di risorse una precisione simile è infatti esosissima e per questo sono state create tecniche per simularla come l'Ambient Occlusion, o la più recente tecnica usata nel Chrome Engine 6 di Techland nel prossimo Dying Light. Entrano in scena i voxel, che, come abbiamo appena visto, grazie alle DirectX 11.3 dovrebbero venire calcolati e utilizzati in maniera molto più rapida nel computo video. Applicando i voxel nel computo classico della Global Illumination abbiamo quindi, in linea teorica, tre vantaggi per realizzare l'illuminazione perfetta senza sperperare risorse hardware: il primo derivante dalla Volume Tiled Resource, per cui in una scena vengono calcolati e renderizzati solo i voxel strettamente necessari a chi osserva lo schermo; il secondo derivante dalla Conservative Rasterization, per cui ogni texture viene direttamente computata come un voxel (quando necessario), creandoli di fatto nella scena da illuminare; il terzo vantaggio, vera chiave di volta dell'intera tecnologia VXGI, Nvidia l'ha chiamato Multi-Projection Acceleration (MPA).L'idea di fondo è che in uno stesso scenario coesistono stesse geometrie, quindi non è necessario ricalcolare. Ed è proprio qui che casca l'asino! Essendo i voxel dei cubi, proiettare la luce dalle varie sorgenti equivale a proiettare la stessa geometria (il cubo) su ampie regioni della scena, in modo molto più veloce rispetto a farlo coi metodi classici di simulazione ottica. In parole povere è come se ogni fonte luminosa in una scena renderizzata in tempo reale proiettasse un numero altissimo di cubetti che vanno a formare l'illuminazione realistica a cui tutti aspiriamo fin da bambini. E questo è molto più conveniente in termini prestazionali rispetto a farlo coi metodi classici lineari perché il calcolo viene effettuato direttamente su piccole regioni del frame e non per ciascun pixel. Pazzesco.
E se non avete capito nulla fin'ora, datevi una botta in testa e beccatevi questo video di una singola 980 che usa questa tecnica per ricreare l'allunaggio dell'Apollo 11:
Tutto questo non sarà esclusiva Nvidia, ma potremo vederlo su ogni scheda grafica esistente, posto che il videogioco supporti questa tecnologia, anche se ovviamente i possessori di Maxwell 2.0 godranno di alcuni benefici in termini prestazionali. Quindi non possiamo che far festa e darci alla pazza gioia voxel lanciando dei raudi che proiettano luce a cubetti per le strade di ogni città. Occhio che gli spigoli fan male!

VR Direct: realtà virtuale a latenza zero

La realtà virtuale arriverà solo tra un po'. Forse tra un anno, magari due. Giusto il tempo che Oculus finalizzi il prototipo commerciale Crescent Bay. Intanto NVIDIA non dorme sugli allori e si prepara il terreno per quella che potrebbe essere una rivoluzione in ambito video anche sulle schede della serie 900. Per farlo, ha lavorato a stretto contatto proprio con quelli di Oculus VR che, interpellati, chiesero a gran voce: "Vi prego noi lo famo strano! Noi per calcolare un frame usiamo una doppia risoluzione e pure l'head tracking! Riduceteci la latenza a schermo!". E Nvidia ha esaudito.
VR Direct è in pratica un set di risorse per sviluppatori volto a ottimizzare il tempo necessario per il calcolo a schermo di un'immagine VR. Tale immagine deve tenere conto di due punti di vista differenti (i due occhi), dell'aberrazione per rendere le due immagini credibili quando si indossa il visore e infine del movimento della testa di chi lo indossa. Per un simile computo ci vogliono un bel po' di risorse hardware. Infatti a parità di risoluzione il calcolo di un frame VR è quasi il doppio più pesante rispetto a quello di un frame calcolato normalmente.Sulla prima barra nel grafico soprastante vedete il tempo necessario per preparare un frame VR senza l'ausilio del nuovo set Nvidia. Sulla barra appena sotto vediamo chiaramente quale sia la prima ottimizzazione introdotta, ovvero una riduzione netta del tempo che impiega il sistema operativo a elaborare il frame in congiunta con le altre componenti. In generale è molto più lungo che per quello di un frame normale, proprio perché sono coinvolti i fattori di cui sopra (tracking e aberrazione). E già così eliminiamo una bella fetta di latenza. Ma adesso veniamo al piatto forte:L'Asynchronous Warp è in realtà già noto agli sviluppatori di Oculus, che lo chiamano più semplicemente Time Warp. In sostanza si tratta di calcolare un frame VR senza tenere conto del tracking della testa (e quindi prima ancora che venga utilizzato a schermo) e solo in seguito applicare una deformazione alla visuale (Warp) che tiene conto del movimento del capo. In pratica il grosso del frame viene calcolato ancor prima di essere utile ai fini video, per poi essere modificato all'ultimo momento poco prima della visualizzazione a schermo. In questo modo si eliminano, a quanto dice Nvidia, ben 25 ms di latenza, uno sproposito nell'ambito della computer grafica. Resta da vedere la resa finale di un simile effetto di deformazione visiva. Sospetto che la qualità dell'immagine possa risentirne parecchio, ma è interessante vedere che qualcosa si sta muovendo sul lato hardware per venire incontro alla realtà virtuale.
Ultima ottimizzazione di rilievo, e quella realisticamente più importante di tutte le altre, è la cosiddetta VR SLI, che è anche semplicissima da spiegare per vostra fortuna. Grazie ad essa e a uno SLI di schede Nvidia (non necessariamente serie 900) dedicheremo il computo video della metà sinistra del frame a una delle due e quello della metà destra all'altra, facilitando notevolmente il rendering. E' un po' come già accade quando si possiede una scheda dedicata per il Physx: siamo curiosi di capire come potrebbe funzionare un sistema con tre schede video di cui solo due in SLI. Ma lasciamo a tempi più maturi il giudizio su queste tecnologie, che per ora rimangono, purtroppo, solo un miraggio, almeno per chi non sta sviluppando un titolo per Oculus.