Q&A Nintendo Switch Oggi alle ore 16:00

Domande e Risposte sulla nuova console Nintendo!

Speciale Orizzonti di Rendering

Personal Computer, PlayStation 4, Xbox One e l'arrivo delle DirectX 12. Come cambieranno le prestazioni, e quale futuro ci aspetta dopo l'attesissimo aggiornamento delle API di Microsoft?

speciale Orizzonti di Rendering
INFORMAZIONI GIOCO
Articolo a cura di
Andrea Schwendimann Andrea Schwendimann nasce smontando un 486DX e divorando qualsiasi videogame da allora in avanti. Non ha resistito a nessuna piattaforma, appassionandosi a qualsiasi genere, pur prediligendo gli FPS, gli action-adventure, gli RPG e l'hardware da gaming in ogni declinazione. Lo trovate su Facebook, su Steam e su Google Plus.

Stanno per arrivare e non stiamo più nella pelle. Le DirectX 12 cambieranno il modo di programmare la grafica in tempo reale, con ripercussioni notevoli sulle prestazioni dei giochi su PC e Xbox One. Ma, diciamolo subito, forse non tutti immaginano che è ragionevole pensare un incremento prestazionale anche su PS4, in barba ai detrattori. Sin dall'annuncio delle nuove librerie di Microsoft c'è un grande fermento tra gli sviluppatori e, senza ulteriori indugi, proveremo a spiegarvi come mai questo cambio di passo potrebbe davvero portare grandi benefici su tutte le piattaforme: su entrambe le console e su tutti i PC che montano una scheda grafica feature level 11_0. Se non sapete nulla di overhead o della differenza tra API e feature level, non preoccupatevi: siamo qui per questo, oltre che per offrire alcune speculazioni sullo sviluppo dei videogame del futuro.

Overhead: una trafficata autostrada

Iniziamo spiegando il motivo principale per cui tutti stanno attendendo le nuove librerie grafiche. Il discorso è valido sia per le nuove OpenGL (nome in codice Vulkan), sia per le DirectX 12 tanto chiacchierate.
Nella programmazione l'overhead è il totale del tempo in eccesso necessario a portare a termine un certo tipo di calcolo, sia esso tramite CPU o GPU. Può essere dovuto all'hardware o alla scelta di algoritmi usati da un software, ma per lo scopo di questo articolo, l'overhead di cui stiamo parlando si riferisce al tempo in eccesso che una GPU impiega a calcolare un frame rispetto al tempo idealmente necessario per compiere lo stesso calcolo in uno scenario ottimale. Per semplificarci la vita, useremo l'esempio fornito da AMD nella conferenza di Marzo:

Immaginate che ogni istruzione che arriva alla GPU mentre state giocando sia una vettura che deve instradarsi su una trafficatissima autostrada. Le DirectX 11 instradano le istruzioni in arrivo come mostrato nell'immagine riportata sopra: un incrocio a T, per cui se due istruzioni arrivano nello stesso momento alla GPU, una delle due deve aspettare un piccolo lasso di tempo prima di venire instradata verso il processore. Questo determina in grande parte l'overhead, il tempo in eccesso per calcolare ciascun frame.

Quello mostrato nella seconda immagine invece è come verranno instradate le istruzioni da calcolare una volta che potremo usare le nuove API. Invece di arrivare nello stesso momento, due istruzioni si immetteranno sulla "autostrada" principale (nel gergo, la pipeline grafica) in due momenti diversi, andando a posizionarsi negli "spazi" giusti (ovvero negli intervalli di tempo -detti bubble, o bolle- permessi dalle istruzioni già instradate sulla pipeline) e di conseguenza riducendo drasticamente l'overhead.

Per ottenere questo risultato sia Vulkan che DirectX 12 introdurranno nativamente una migliore distribuzione delle istruzioni tra i diversi core di CPU e GPU. Abbiamo detto che i dettagli troppo tecnici non ci interessano, ma in sostanza si tratta di una nuova introduzione detta Asynchronous Computing che divide letteralmente le istruzioni in arrivo sulla pipeline in istruzioni "più piccole", sfruttando le grandi possibilità del computo in parallelo offerte dai processori moderni e permettendo quindi il loro "instradamento" in maniera molto più meticolosa e quindi più efficiente.

DirectX 12: il nuovo standard per ogni piattaforma

Ottimizzare l'overhead, quindi, significa direttamente avere più tempo a disposizione per compiere altri calcoli o, in altri termini, poter mandare più istruzioni alla GPU e calcolare più velocemente gli stessi frame, grazie a un accesso diretto all'hardware tramite API, sfruttando l'Asynchronous Computing. In generale le API sono un insieme di istruzioni a disposizione dei programmatori per sfruttare le potenzialità dell'hardware a cui si riferiscono, ovvero, in questo caso, ciò che permetterà a tutti gli sviluppatori di sfruttare la riduzione dell'overhead nel computo dei frame dei giochi futuri.
Per poter trarre qualche ipotesi sui benefici che tutto questo porterà sulle diverse piattaforme, occorre spiegare la distinzione che Microsoft si è inventata tra API e le cosiddette feature level. Se le prime, come abbiamo detto, sono l'insieme delle istruzioni software utilizzabili, le feature level sono l'insieme delle caratteristiche che queste istruzioni andranno a sfruttare a livello hardware. Microsoft, stabilendo questa distinzione, intende rendere DirectX 12 il più compatibile possibile per molteplici piattaforme hardware, dando un punto di riferimento fisso a tutti gli sviluppatori, su qualsiasi computer, sia esso PC, Xbox One, tablet o cellulare.
Innanzitutto riportiamo la descrizione delle feature level di DirectX 12, da specifiche Microsoft:


Feature LevelTecnologie DirectX 12
11_0Resource Binding Tier 1, Tiled Resources Tier 1
11_1Livello di passaggio con qualifiche "miste" *
12_0Resource Binding Tier 2, Tiled Resources Tier 2, Typed UAV
12_1Conservative Rasterization, Raster Order Views
*Microsoft ha dichiarato GCN 1.0 e le schede con chip Kepler come 11_1 anche se mutualmente supportano tecnologie DirectX 12 differenti.Non è quindi chiaro come definire questo feature level.

Questa tabella mostra quali delle nuove tecnologie delle API Microsoft saranno sfruttabili da hardware che implementano differenti feature level. Tenete presente che feature level successive implementano tutte le caratteristiche delle feature level precedenti, quindi, ad oggi, per definizione della stessa Microsoft, l'hardware compatibile feature level 12_1 è l'unico a sfruttare appieno le nuove librerie. Per farla breve, tra le feature level 11_0 e le 12_1 cambia quanto l'overhead viene ottimizzato: le GPU costruite per sfruttare le 11_0 beneficiano delle API DirectX 12 in maniera molto minore rispetto alle GPU che sfruttano le 12_0 o le 12_1.

Riportiamo una descrizione generale di ciascuna implementazione per darvi un'idea. Se siete stufi di lungaggini tecniche, vi consigliamo di saltare al prossimo paragrafo di questa disanima.

Tiled Resources: normalmente una texture viene caricata in memoria tutta in una volta. Le Tiled resources invece permettono al programmatore di caricare in memoria solo le parti delle texture necessarie per il computo di una determinata istruzione, salvando molto spazio in memoria e riducendo contemporaneamente il tempo di accesso (ovvero parte dell'overhead). Per differenti feature level abbiamo tre differenti implementazioni (o Tier) delle Tiled Resources. Ogni Tier frammenta sempre di più una specifica risorsa, fino ad arrivare al Tier in cui le risorse vengono frammentate anche sul piano verticale, sfruttando le tre dimensioni.

Resource Binding: è la funzione che lega ogni risorsa (come una texture) all'esatto momento in cui servirà ad una particolare istruzione nella pipeline (l'"autostrada" di cui sopra). Prima delle DirectX 12 questo processo avveniva in automatico, mentre ora i programmatori potranno specificare a quali risorse legare che cosa in quale esatto momento, risolvendo il problema del "traffico" spiegato nel primo paragrafo, ottimizzando ulteriormente l'overhead. E' divisa anch'essa in tre Tier, ma non ci sono ancora informazioni riguardo alle differenze dettagliate.

Typed Unordered Access Views (UAV): una risorsa (ad esempio la solita texture) potrebbe servire nello stesso momento a più processi. In passato questo conflitto creava parecchio overhead e già con le DirectX 11 si erano risolte parzialmente le cose permettendo un accesso simultaneo a un limitato numero di risorse (divise per tipo). Le DirectX 12 portano questo concetto un passo avanti, permettendo a qualsiasi risorsa di venire letta nello stesso momento da differenti processi calcolati in parallelo.

Conservative Rasterization e Raster Order Views: appannaggio del solo hardware con feature level 12_1, queste due funzioni permettono in sostanza di ottenere un rendering molto più preciso al pixel che in passato. Questo significa un'immagine più nitida e, soprattutto, meno aliasing in determinate situazioni, come la proiezione delle ombre. Vi lasciamo con un video esplicativo di queste due tecnologie, creato da Nvidia.

Piattaforme a confronto

Tornando al confronto fra diverse piattaforme, ciò che deve interessarci è che le GPU di PC, Xbox One e PS4 implementano differenti feature level. I vari livelli sono mostrati nella nostra comoda tabella qui sotto.

Feature LevelXboxOnePS4AMDNVIDIA
11_0SiSiGCN 1.0Fermi
11_1SiSiGCN 1.01, 1.1Kepler2
12_0SiNoGCN 1.2, 2.0Maxwell 1.0
12_1NoNoNoMaxwell 2.0
1. Come per Nvidia, non è chiara l'estensione del supporto delle schede con GCN 1.0 alle feature level definite da Microsoft. Quest'ultima ha però garantito che tutte le schede GCN 1.0 sono feature level 11_1.
2. Nonostante Microsoft l'abbia contraddetta, Nvidia ha specificato che Kepler avrà supporto solo parziale ai feature level 11_1, che significa una manciata di istruzioni in meno a disposizione dei programmatori.

Prima di fare altre considerazioni chiariamo che abbiamo inserito Playstation 4 in questa tabella per darvi un'idea delle potenzialità del suo hardware, al pari della concorrenza. Di fatto PS4 è in grado di supportare quello specifico feature level se mai a Microsoft venisse la malsana idea di rilasciare le sue API anche per Sony. Ma vi poniamo una domanda provocatoria: secondo voi gli ingegneri Sony responsabili dello sviluppo delle loro API che cosa faranno? Dormiranno sugli allori?

Xbox One

La console di Redmond fa la parte del leone con l'introduzione delle DirectX 12. Le caratteristiche tecniche della sua GPU, nome in codice Durango, basata su tecnologia Bonaire delle schede AMD HD 7790, parlano chiaro: Xbox One sfrutterà le feature level 12_0, ovvero la maggior parte delle ottimizzazioni software garantite dalle nuove API Microsoft. Il beneficio tra i giochi che le sfruttano e quelli che invece non lo fanno (quelli usciti finora) sarà senza ombra di dubbio notevole. Dobbiamo aspettarci con sicurezza framerate più elevati e stabili e possiamo anche dare fiducia alle dichiarazioni dei vari tecnici Microsoft sull'aumento della risoluzione. Realisticamente, ottimizzando il tempo necessario per calcolare ciascun frame, potremo aspettarci un rendering a 1080p da tutti i titoli futuri, tenendo comunque presente che la discriminante in questo caso sarà il modo in cui ciascuno sviluppatore sarà in grado di sfruttare le nuove librerie Microsoft e che quindi i risultati varieranno da gioco a gioco. Una cosa però è certa: tutti i titoli ne beneficeranno in qualche modo e gli utenti Xbox One devono davvero gioire per il prossimo update, anche considerando che l'hardware di One, rispetto a PS4, viaggia di base a una velocità di clock superiore sia sulla GPU che sulla CPU, cosa che aumenterà ulteriormente i benefici derivanti da DirectX 12.

Playstation 4

In casa Sony le cose sembrerebbero meno allettanti. Tuttavia possiamo con buona certezza affermare che non c'è nulla di cui preoccuparsi: basta che ricordiamo le differenze tecniche già uscite più di un anno fa tra le due console. Al di là delle frequenze di clock, la GPU di Playstation 4, nome in codice Liverpool, è una riedizione delle schede grafiche AMD basate su tecnologia Pitcairn, quella che troviamo all'interno delle schede video AMD HD 7870. Fin qui nulla di nuovo e il motivo per cui finora i titoli multipiattaforma hanno goduto di performance in generale più soddisfacenti sulla macchina Sony è esattamente la maggiore potenza della sua GPU rispetto a quella di One.
Arrivano le DirectX 12 e siamo certi che non le si vedranno mai su Playstation 4. Tuttavia da questa introduzione molti benefici ne trarranno anche le console Sony, perchè la scheda grafica che monta è ipoteticamente in grado di farle girare a un feature level 11_1. Non è quindi difficile immaginare che per le API proprietarie attualmente in uso dagli sviluppatori Playstation (che sono due, GNM e GNMX), sia in dirittura di arrivo un aggiornamento volto ad integrare tutte le funzioni che saranno introdotte con DirectX 12 su One. A conferma di questo vi basti pensare che alcuni titoli PS4, uno su tutti The Order, utilizzano già tecnologie molto simili a Tiled Resources e Typed UAV.
Realisticamente si assisterà quindi a un recupero significativo di Xbox, per colmare un divario a tutti evidente fino ad oggi. Un recupero di cui non possiamo prevedere l'entità, ma certo non così drammatico come alcuni detrattori prospettavano.

PC

Sul fronte Personal Computer le cose si fanno parecchio complesse. Ogni edizione delle schede grafiche AMD e Nvidia implementa infatti diverse feature level, quindi i benefici che gli utenti PC trarranno da DirectX 12 dipendono in sostanza dalla scheda video che monta il loro sistema. Per semplificarci la vita, abbiamo espanso la tabella precedente in una seconda immagine che riassume i feature level divisi per generazione di scheda video:

Feature LevelAMDNVIDIA
11_0Radeon HD 7000 Series
Radeon R7 200 Series

Radeon R9 270 (X), 370
Radeon R9 280 (X)
Geforce 400 Series
Geforce 500 Series
11_1Radeon HD 7000 Series
Radeon R7 200 Series

Radeon R9 270 (X), 370
Radeon R9 280 (X)
Geforce 600 Series
Geforce 700 Series
Geforce Titan (Black, Z)
12_0Radeon HD 7790
Radeon R7 260 (X), 360
Radeon R9 285, 380
Radeon R9 290 (X), 390 (X)
Radeon Fury (X)
Geforce GTX 750 (Ti)
12_1NessunaGeforce 900 Series
Geforce Titan X
Abbiamo segnato in verde le schede compatibili, mentre in rosso quelle parzialmente compatibili con il feature level 11_1.

Innanzitutto ribadiamo l'ovvio, ovvero che le schede riportate sono completamente compatibili con il feature level 11_0, che significa di fatto che beneficeranno tutte delle ottimizzaioni DirectX 12. In secondo luogo è molto interessante rilevare che tutte le schede AMD, a partire dalla serie 7000, supportano in qualche maniera il feature level 11_1, mentre tutte le schede video Nvidia precedenti alla serie 900 (ad esclusione delle 750 e 750Ti) lo supportano solo parzialmente. Dovremmo compilare una tabella apposta per farvi capire che schede Nvidia serie 600 e 700 e che schede AMD serie 7000 e R7 200 supportano quali precise istruzioni 11_1 e quali no, e non ci sembra il caso. Per maggiori dettagli consultate quindi questa informativa a cura di Microsoft, che tuttavia contraddice le dichiarazioni sia di AMD che di Nvidia. Un bel mal di testa non ce lo toglie nessuno.
In generale è comunque palese che AMD fornisce ai suoi utenti un supporto molto più ampio a DirectX 12 su tutti i suoi modelli di schede; d'altra parte però al momento solo le schede Nvidia serie 900 e la Titan X offrono piena compatibilità alle API di Microsoft, fattore molto rilevante se state considerando un acquisto che performi meglio nei titoli in pubblicazione negli anni a venire.
Per adesso non sappiamo altro sul fronte PC, ma possiamo aggiungere che, oltre ai vari feature level, su PC sarà possibile, per ogni livello, adottare via driver l'Asynchronous Computing per sfruttare diverse GPU in parallelo nei giochi DirectX 12. Questo significa come prima cosa che saremo in grado, sia su AMD che su Nvidia, di utilizzare le risorse aggiuntive di tutti i processori APU con scheda grafica integrata, in tandem con la scheda dedicata. Nell'analisi fornita da Intel, questo parallelismo tra CPU e GPU è il vero cuore di DirectX 12 e il motivo principale per cui gli utenti PC vedranno un incremento ancor più ragguardevole delle prestazioni rispetto alle altre piattaforme. Addirittura si vocifera che sarà possibile sfruttare due GPU dedicate di modelli e case differenti nei titoli DirectX 12, come se fosse uno SLI o un Crossfire multi-brand. Prendete comunque questa notizia con un paio di pinze lunghe qualche chilometro.

DirectX 12 Le DirectX 12 stanno per arrivare e si prospetta una nuova età d'oro del rendering in tempo reale per tutte le piattaforme di ultima generazione. Partendo dai PC, quelli che monteranno schede grafiche con chip Fiji e Maxwell saranno i veri draghi dell'ottimizzazione dell'overhead, potendo contare in pieno sul feature level 12_0. Curioso che le ultimissime Fury di casa AMD non supportino il 12_1, in una mossa che onestamente ci lascia parecchio perplessi a fronte del pieno supporto della serie 900 di Nvidia. Nonostante questo, il maggiore overhead attualmente presente nei vari titoli in versione Windows, e anche la possibilità di sfruttare in parallelo le GPU integrate, rende di fatto il PC la piattaforma che gioverà maggiormente dalle nuove librerie di Microsoft. Sul fronte console la battaglia è più ardua. Da quanto sappiamo finora dalle caratteristiche tecniche riportate, Xbox One beneficerà in maniera decisiva dall'implementazione di DirectX 12 nei futuri update. Quindi PS4 sembrerebbe rimanere un passo indietro, ma per gli utenti Sony la bella notizia è che la loro scheda grafica è in grado non solo di svolgere le stesse funzioni, ma anche con un carico computazionale maggiore: sarebbe da folli non immaginare che gli ingegneri Sony non le integrino anche loro nelle loro API. Tutto questo contribuirà quindi a mantenere molto vicina una relativa divergenza prestazionale fra entrambe le console negli anni a venire. La differenza effettiva tra le due? Non possiamo prevederla in alcun modo. Sono troppi i fattori in ballo, ma possiamo azzardare una previsione su quando vedremo davvero i benefici descritti in questo articolo: ragionevolmente ci vorranno ancora parecchi mesi per una larga adozione di DirectX 12 sui titoli multipiattaforma (azzardiamo fine 2016, nel migliore dei casi). Tuttavia, anche dai tweet di Phil Spencer, possiamo già aspettarci che Halo 5 sarà la prima prova su strada per questo nuovo orizzonte di rendering. In definitiva, gli utenti Xbox saranno i primi a beneficiare di quella che si prospetta come una rivoluzione prestazionale per l'intera industria dei videogiochi. Microsoft con questa release ha voluto offrire uno standard comune per un vastissimo range hardware; un traguardo precisamente volto a porre una base comune per tutto il software che verrà sviluppato negli anni futuri. Una grande rivoluzione per l'industria dei videogiochi, di cui tutti -ma proprio tutti- gioveremo, indipendentemente dalla piattaforma di riferimento.