Next Gen - Eccola Qua

 

Finalmente le nuove tecnologie associate con la nona generazione di console stanno arrivando nei titoli moderni. Nel 2023 abbiamo visto i primi giochi in Unreal Engine 5 di terze parti e l'arrivo di tecniche avanzate di gestione I/O su Rift Apart e Forspoken, oppure di illuminazione ambientale in Ray Tracing alla massima espressione su Cyberpunk 2077 o Alan Wake II. Ma con ogni loro uscita ci sono state molte polemiche sulla capacità di far girare tali giochi. Ecco, con questo pezzo volevo un po' dare una panoramica globale sui salti generazionali ed a cosa si sta assistendo ora.

Il mondo dei videogiochi è una industria d'intrattenimento estremamente legata all'evoluzione tecnologica del mondo dei microchip. I videogiochi vengono eseguiti tanto su macchine dedicate, costruite in modo specifico per questo scopo, quanto su sistemi general purpose multifunzionali come i personal computer.



THREE-WAY LOOP

L'evoluzione nel tempo di questo sistema coinvolge tre diversi elementi, tra di loro interconnessi.

  • Piattaforme Hardware - HW
  • Strumenti di lavoro - Tools
  • Software Finale - The Game

La piattaforma hardware è formata dai componenti elettronici che servono ad eseguire i calcoli matematici per eseguire il gioco. L'evoluzione hardware è stata sempre molto veloce. Famosa nell'ambiente è la Legge di Moore. Questa è più un'osservazione empirica che ci va a dire che il numero di transistor integrati in un chipset raddoppia ogni due anni circa.



Con le dovute precauzioni, è un andamento che è stato grossomodo corretto, portando a nuovi prodotti con capacità di calcolo migliorate ogni due anni. Maggiore capacità di calcolo implica maggiore possibilità per la produzione di videogiochi. Molto banalmente, con un esempio solamente qualitativo, se per simulare la vita di 10 cittadini in un gioco gestionale ho bisogno di 1 processore da 1Ghz, con un core da 2Ghz posso simulare ben 20 cittadini, rendendo il mio scenario più complesso del precedente.

Spesso però il software si evolve dando preferenza ad un certo tipo di calcoli. Calcoli che, se eseguiti con le componenti attualmente sul mercato, sono estremamente lenti. Ecco quindi che le esigenze specifiche di calcoli possono informare i costruttori di hardware di nuove possibilità. Anche qui, proviamo ad immagina che un calcolo che permette di applicare la luce a 10 oggetti richieda 100 cicli di calcolo, per via di numerose azioni ripetitive da compiere dal sistema. E questo è un problema per il numero massimo di luci in una scena. Il costruttore di Hardware può vedere questa come un'opportunità e decidere che dalla generazione successiva questo calcolo venga effettuato in un altro modo, con nuove operazioni matematiche che riducono il costo per 10 oggetti a solo 20 cicli. 

Questa funzione però, deve essere implementata all'interno dei software. Gli strumenti usati dai programmatori devono evolvere anch'essi, per poter accedere alle nuovi funzioni dell'hardware. Come nuove esigenze portano a nuove possibilità. Cosa può fare chi non ha accesso alle funzioni hardware delle nuove componenti? Ecco che posso creare una soluzione software di mezzo, che pesa solo 50 cicli, ma accessibile a tutti. Non buona come quella hardware, ma meglio delle soluzioni più vecchie e quindi con il software di sviluppo offro nuove possibilità.

Questo loop esiste praticamente dall'alba dei tempi e soprattutto all'inizio, era molto, molto veloce, con generazioni successive di hardware per elaborazione grafica che diventavano sempre più capaci.

Gli attori di queste evoluzioni sono quindi entità tra di loro sempre in comunicazione. Se lato hardware abbiamo i grandi costruttori come Intel, AMD, Nvidia, ARM e via discorrendo, dal lato tool di lavoro ci sono sia strumenti generalisti offerti da terze parti come i motori grafici di Unreal Engine o Unity giusto per citarne due, strumenti di interfacciamento per la programmazione come le API Direct X o Vulkan a cui aggiungere tutto gli strumenti creati internamente per raggiungere i propri obiettivi dagli sviluppatori che convogliano nei videogiochi rilasciati al pubblico. Le cui limitazioni e voglia di espandersi vanno ad informare le prossime evoluzioni di hardware e strumenti.

Capite però che un mondo in costante evoluzione ed avanzamento, dove i progetti possono richiedere anni per passare dall'idea al prodotto finito, c'è bisogno di paletti fissi sui quali poggiare. Delle decisioni che permettono al prodotto di stabilizzare la propria tecnologia.

GENERATIONS BROKEN

Questo paletto sono le generazioni di console. Con la loro durata di 6-8 anni prima di passare a nuove tecnologie portano ad uno sviluppo a gradino, dove ogni nuova generazione offre un salto netto di miglioramento rispetto agli anni passati. 

Ad ogni nuova generazione possiamo individuare dei passaggi specifici.

  • Aumento capacità di calcolo. Qui sia il processori che le componenti grafiche hanno un aumento prestazionale puro. Permettono di eseguire più calcoli che in passato. La base di tutte le mie produzioni si innalza a questo livello di performance.
  • Aumento delle memorie e degli I/O. Altro importante passo in avanti è nella capacità di immagazzinare dati da parte del sistema. A braccetto con la quantità la tecnologia e velocità di scambio dati è un altro importante fattore.
  • Nuove capacità/comandi/funzioni associati con i nuovi hardware. Questo porta alla creazione di nuovi strumenti che permettono di implementare funzioni prima inesistenti che possono essere usate per gli obiettivi più disparati. Basti pensare al Ray Tracing di recente reso possibile in tempo reale grazie ad hardware dedicato al suo calcolo. Questo porta alla creazione di nuovi strumenti per implementare queste novità.

Nel primo momento, si prende ciò che si è sempre fatto e si sfrutta la maggior potenza per amplificarle. Mano a mano che si procede nella generazione, sono gli strumenti ed i lavori di fino ad estrarre tutto il potenziale.

Nel frattempo il mondo PC, che mantiene i cicli di sviluppo biennali della legge di Moore prima citata, vede diverse generazioni di hardware susseguirsi nello stesso lasso di tempo. Quindi il giocare a qualità console passa diventa sempre più economico. La base rimangono le console e tutto quel che c'è in più abilita uno sguardo al futuro della prossima generazione.

Quel che mi sembra mancare a molte delle discussioni odierne sull'argomento è un minimo di prospettiva storica. Ha senso. Il boom del gaming c'è stato negli ultimi anni, con un aumento di massa di giocatori molto giovani che solo adesso stanno acquisendo senso critico dall'età adulta e mancano della stessa prospettiva sul passato. Quindi proviamo con un pippone storico.


Io ho iniziato a giocare seriamente nella quinta generazione, quindi il periodo della Playstation 1, Nintendo 64 e Sega Saturn. Nvidia ancora non esisteva. È nata nel 1993 ed il nome GeForce ancora non era stato coniato per i suoi prodotti.

Per andare a creare un parallelo che abbia senso, dobbiamo aspettare la generazione successiva, la sesta. Playstation 2 fu lanciata nell'anno 2000 e Playstation 3 arrivò nel 2006. In questi 6 anni, Nvidia passò dalla Geforce 2 alla Geforce 8. 7 GENERAZIONI.

Ad ogni generazione furono introdotti nuovi paradigmi e supporti per nuove tecnologie. La Geforce2 supportava le Direct3D 7, la Geforce 3 le 8, la Geforce 5 le 9.0a, poi le 9.0c e la 8 supportava le DirectX10. Si passò da tecniche di trasformate e illuminazione di seconda generazione a Texture 3D, buffer per le ombre, antialiasing sempre più avanzati, calcoli sui vertex in array, antialiasing su trasparenza, fino ad arrivare al MSAA e filtro anisotropico indipendente dalle angolazioni sulla serie 8000, con la leggendaria 8800 GTX Ultra rilasciata l'8 novembre 2006. Praticamente ogni anno c'era una nuova generazione che poteva supportare nuove feature rispetto alla precedente. AMD, al tempo Radeon, stessa evoluzione. 

E ci fu un altro, grandissimo cambio di paradigma con la serie 8000. Fino al modello precedente, le schede grafiche operavano con unità dedicate per calcoli sulla geometria ed altre, separate per i calcoli sui pixel. Dalla serie 8000 le GPU ebbero un solo tipo di unità di calcolo, lo shader, in grado di fare qualsiasi lavoro a loro richiesto. 

La Playstation 3 racchiudeva al suo interno una GPU derivata dalla linea Geforce 7 di Nvidia. La sua performance di picco era di 172 Gflops, in linea con le Geforce 7800 di quel periodo. Anche Xbox aveva un set up simile. Per avere la stessa potenza su PC bisogna spendere per la scheda grafica sui 400$ di allora.

Prendiamo un gioco multipiattaforma famoso del 2008. Fallout 3. I requisiti minimi erano di 1GB di RAM, 256 MB di memoria grafica ed un processore Pentium 4 da 2.4Ghz. Ma soprattutto DirectX 9.0c. Le schede grafiche più vecchie di 4 anni, non potevano farlo girare, non supportavano le DirectX 9.0C. Ed ho saltato il meme più famoso di sempre apposta. Uscito un anno prima, Crysis, con stessi requisiti. Ed il gioco poteva girare anche in Directx 10, disponibili solo sulle ultimissime schede. Quindi le schede di 3 anni prima erano inutilizzabili. "Eh ma Alan Wake II perché non supporta una scheda di 8 anni fa?


Ora a quel tempo non frequentavo i forum e non c'erano i social allo stesso modo, ma una cosa era chiara. Il livello di dettaglio BASSO di Fallout 3, non era la stessa cosa del livello di dettaglio BASSO di Crysis. E se per questo nemmeno quello Alto confrontato con quello basso, ma tant'è. Al tempo si cercavano i giochi in grado di spingere molto le GPU. Erano una sorta di sogno collettivo, giochi che non sarebbero invecchiati, perché hardware via via più potenti avrebbero sbloccato sempre più i dettagli alti del gioco. Non era inusuale ad un upgrade del PC tornare sui propri passi e rigiocare un gioco vecchio a fps e/o dettagli maggiori. 

C'era consapevolezza, quantomeno nel me del tempo e nei miei amici PCisti, che il miglioramento tecnologico era costante ed accadeva ogni anno. In quel momento legati alle disponibilità economiche dei nostri genitori, potevamo sognare supercomputer, ma ci accontentavamo di quel che avevamo. In questo discorso mi sto concentrando sulle schede grafiche, ma consideralo esteso concettualmente ad ogni componente. Memorie, Processori e così via.

Fast Forward al 2013, anno di uscita di Playstation 4 e Xbox One, anno del DISASTRO. In quel periodo sul mercato c'era la generazione Geforce 700 e Radeon R200. La soluzione adottata da Microsoft e Sony in questo momento non fu di dotare le loro macchine di componenti all'avanguardia, ma di andare su roba scarsa (Ovvero: economica). Lato processore abbiamo dei Jaguar di AMD ad 1.8Ghz. AMD in quel periodo veniva assolutamente asfaltata da qualsiasi cosa Intel (ed infatti creò un monopolio non da poco). Se messi alla stessa velocità di esecuzione, un core Intel poteva eseguire il lavoro in metà del tempo della controparte AMD. 

Anche lato GPU Playstation 4 e Xbox One, scelsero un livello di potenza che era quantificabile con le schede entry level da PC contemporanee. Per eguagliare/superare una Playstation 4 bastava una R270 o GTX760. Che nel 2020, anno di PS5 avevano ancora qualcosa da dire. Schede all'epoca dal costo di 200-250€. Questo cosa vuol dire? Che in una sola generazione PC, arrivò la famosa GTX 970 che per 300€ dava il TRIPLO di performance grafiche di una console. E si poteva aggiungere tranquillamente in sistemi esistenti perché le CPU di Intel vecchie di 2-3 anni volavano in confronto alle console.

E nel 2020, anno di uscita della Playstation 5, era possibile acquistare per prezzi simili (in teoria, ci sono stati aumenti enormi dovuto all'esplosione delle criptovalute) una scheda con 10 volte la potenza di Ps4.


Il risultato è che il meccanismo che c'era nei precedenti due salti generazionali si ruppe fragorosamente. Il gradino della console fu inesistente. Il mondo PC si ritrovò per 7 lunghi anni ad avere così' tanta potenza in eccesso che non si sapeva dove metterla. Ed ecco che iniziarono a diffondersi risoluzioni più ampie del 1080p, refresh rate elevati e soprattutto giocare molto bene su PC costava poco.

Arrivati nel 2020 però, Playstation 5 e Xbox Series hanno alzato il gradino. La loro CPU è finalmente a livello, sono dotate entrambe di SSD veloci e tecnologie di decompressione proprietarie, e in termini di potenza grafica erano parenti di schede da 400-500€.

Tantissime persone non hanno visto il gradino. Non sanno cosa sia. Non sanno come fronteggiarlo. Non sanno che basta abbassare i dettagli grafici. Che bisogna vedere come il software gira sull'hardware base (le console) e da lì capire quanto può essere il margine di miglioramento.

A questo si unisce l'aumento dei prezzi delle componenti grafiche unito alla sparizione della fascia dei 200-300€ e con alcune gen che si sono concentrate più sulle feature che sull'aumento di potenza bruta. O si fanno i magheggi come faccio io, o risulta difficile aggiornare con poco.

E questo è quel che è successo lato Piattaforma Hardware. Il primo punto.

In tutta questa escalation gli strumenti per gli sviluppatori sono migliorati col tempo diventando non solo sempre più potenti, ma anche più democratici. 

SOFTWARE LOOP

La parte software può essere un po' complicata da spiegare, ma è composta da due grossi elementi: le API di programmazione ed i motori di gioco.

Le API (letto all'inglese ei-pi-ai) sono le interfacce di programmazione dell'applicazione, significato che col tempo si è traslato per indicare direttamente le librerie software usate per la programmazione, invece che il metodo applicativo delle stesse. Queste librerie e metodi servono a gestire compiti legati alla multimedialità. Ogni piattaforma porta avanti il suo linguaggio. Windows ha le DirectX di Microsoft e le Vulkan del gruppo Khronos, Playstation ha le GNM e GNMX, Nintendo le NVM e così via. 


I motori di gioco sono delle strutture software che includono tutte le librerie necessarie e programmi di supporto per la creazione di un videogioco. Questi possono essere creati dalle case di sviluppo di videogiochi o fatte da aziende separate che quindi vendono la loro tecnologia in cambio di royalty sul venduto. Per lanciare qualche nome, tra quelli fatti in casa abbiamo il Red Engine di CD Project, il RE Engine di Capcom ed il Northlight di Remedy. Invece di terze parti abbiamo Unreal Engine di Epic e Unity di Unity Technologies tra i tanti. Io quando ho scancherato un po' dopo il fail di Astralis l'ho fatto su GameMaker Studio 2.

Qui siamo di fronte ad un problema dell'uovo e della gallina, cioè chi nasce prima? Diciamo che ogni feature ha una sua storia. L'evento più vicino cronologicamente è l'implementazione del Ray Tracing in tempo reale. Come si fa il Ray Tracing si sa da tantissimi anni con molti studi accademici al riguardo. Qui pezzi della Pixar ad esempio. Nvidia con la serie di GPU Turing nel 2018 fu la prima a proporre hardware dedicato allo scopo. Quindi ha creato anche degli strumenti per implementare i comandi necessari per il ray tracing. Che sono poi state integrate nelle istruzioni delle DirectX 12 e Vulkan. Che poi sono state integrate nei motori grafici.

Chi costruisce le console, offre anche tutte le API per poter programmare su di esse. Siccome si tratta di hardware fisso, è possibile offrire comandi in grado di scendere in grande profondità, per poter sfruttare ogni ciclo macchina al meglio delle possibilità. Gli studi interni dei costruttori di console hanno accesso anticipato alle caratteristiche della macchina, che può essere modificata anche in base ai loro feedback. Ricordiamo che Playstation 3 si ritrovò con una GPU perché fu Naughty Dog a richiederla. Quindi hanno più tempo per preparare strumenti interni in grado di sfruttarne le potenzialità al massimo. In una fase iniziale saranno gli studi interni, i first party, a mostrare cosa una console è in grado di fare.


Chi invece produce software di terze parti, come Epic con il suo motore grafico Unreal, solitamente arriva ad uno stato di pulizia, stabilità nuove feature ed ottimizzazioni delle stesse con qualche anno di ritardo. Quindi i primi prodotti saranno un po' raffazzonati, forse troppo pesanti, performance non pulite e qualche bug. Gli studi con più esperienza possono arrivare con prodotti migliori di studi più piccoli, ovviamente. 

Quando si avvicina la generazione successiva, ci sono progetti che saltano già sul prossimo cavallo tecnologico ed altri che rimangono sulle revisioni attuali ma caricate di così tanta roba che effettivamente stanno chiedendo al motore grafico di più di quel che potrebbe fare senza esplodere.

Potete prendere ad esempio Jedi Surviror o Callisto Protocol come giochi costruiti in Unreal Engine 4 con tecnologie moderne che cedono sotto il loro peso, mentre Lies of P è molto più morigerato e gira discretamente bene.

Tanti altri studi invece sviluppano tecnologie proprietarie, idealmente più adatti ai loro progetti. Farlo richiede specialisti e gente con un know-how specifico, quindi è tipico di realtà consolidate con molta esperienza nel campo. Qui abbiamo spesso le maggiori espressioni tecniche di chi non fa parte dell'ecosistema della macchina, in quanto si tratta di tecnologie affilate per portare alla luce una visione specifica.

The Technology of NOW : LIGHT, I/O AND POLYGONS

Quel che spesso ci si dimentica è che tutto questo avanzamento non è solo grafica. Ma è aumentare le possibilità di espressione degli sviluppatori. Di estrema importanza è ad esempio l'illuminazione dei giochi, che detta l'atmosfera di un titolo e più questa diventa migliore e più apre spazio di espressività.

Su questo argomento sono forse un po' fissato, avendone scritto diverse volte, culminando con un pezzo a due mani dove ho cercato di mostrare come lo studio e l'evoluzione dell'illuminazione nei videogiochi e parallela a quella nelle arti tradizionali.

Siamo arrivati ad un punto dove la resa visiva dei videogiochi è molto buona e permette di mettere in scena tanto scenari iperrealistici quanto completamente fantastici ed idealizzati. Per migliorare notevolmente il punto attuale serve molta più potenza rispetto a quanto otteniamo indietro come salto di qualità percepita. In inglese esiste un termine diminishing returns che comunica molto meglio il concetto rispetto all'italiano.

L'unico modo che abbiamo per andare a migliorare notevolmente la resa grafica dell'illuminazione è passare al calcolo in Ray Tracing che permette di avere una precisione e fedeltà maggiore e di eliminare numerosi artefatti delle tecniche attuali. Per farlo c'è bisogno di molta, molta potenza. Si è quindi messo in moto tutto il sistema di loop di cui ho spiegato prima che ha portato a due implementazioni.

La prima è Hardware. Grazie alla spinta di Nvidia nel 2018 che ha poi portato sia AMD che Intel ad inserire unità simili, nelle GPU moderne esistono unità di calcolo dedicate che servono ad accelerare calcoli usati per il Ray Tracing. E non si è ancora trovata la strada definitiva. Se la serie 20XX accelerava attraversamento ed intersezione dei raggi, la serie 30XX ha permesso di eseguire questi calcoli in parallelo con quelli standard e la serie 40XX ha introdotto tecnologia SER per organizzare i calcoli nell'ordine più consono e due nuove strutture: le Micromap Opache e le Micro-Mesh, utili per velocizzare specifiche operazioni ripetitive delle strutture del Ray Tracing. Ed i vari motori grafici ed API devono integrare queste funzioni al loro interno per poterle sfruttare.

La seconda è software. Motori come il Cryengine, Unreal Engine 5 ed il Northlight hanno sviluppato un ray tracing software per l'illuminazione globale, dove sfruttando le unità di calcolo classiche e metodi matematici molto furbi, si è in grado di approssimare la qualità del Ray Tracing pieno abbastanza bene ad un costo di performance più accettabile. Ma soprattutto, in grado di girare sulle console, che montano hardware purtroppo molto scarso lato Ray Tracing.

Queste tecnologie non sono importanti solo per migliorare la resa visiva di un titolo, ma anche per la pipeline di produzione, che diventa enormemente più snella.

C'è un'intervista di Digital Foundry agli sviluppatori di Metro Exodus che ben spiega questo. Gli artisti che prima dovevano passare molte ore nel sistemare l'illuminazione di qualsiasi ambiente di gioco affinché fosse corretto usando numerose tecniche per simulare la luce reale, con tecnologia Ray Tracing devono concentrarsi solo sulle fonti di luce vere, reali. Per lavoro mi capita di dover preparare dei render in 3DSmax e mettere a posto l'illuminazione è un lavoro che può essere molto tedioso.

Oltre all'illuminazione c'è tutta la gestione della quantità dei poligoni. In generale quando si vuole provare a mettere in scena mondi molto dettagliati poligonalmente si incontrano limiti notevoli e colli di bottiglia alle performance. Sì é provato nel tempo a trovare diverse soluzioni, da inserire informazioni di tridimensionalità nelle texture a sfruttare effetti poligonali "locali", ma c'era bisogno di una nuova procedura per elaborare i poligoni al meglio.

Per risolvere questo problema serve però anche un hardware che funzioni in nuovo modo. AMD propose nel 2017 con l'architettura VEGA una soluzione chiamata Primitive Shaders. Nvidia nel 2018 controbatté con i Mesh Shaders e li inserì nelle nuove schede della famiglia Turing 

Microsoft nel 2019 scelse di implementare i Mesh Shader all'interno del API DirectX 12, dandola vinta ad Nvidia.

Xbox Series supporta la funzionalità, mentre PS5 non essendo una RDNA2 completa, si appoggia ai Primitive Shaders nei suoi software di programmazione.


Il primo gioco che fa utilizzo dei Mesh Shader è Alan Wake II. 5 anni dopo la prima menzione del sistema e la loro comparsa nell'hardware e 3 anni dopo il loro rilascio nei tool software. Se si utilizza software non supportato, il gioco avvertirà della cosa e l'effetto è avere bug grafici e performance terribili.

Di pochi giorni fa l'annuncio da parte di Capcom che il suo successore del RE engine, il REX engine, farà uso di Mesh Shaders.

Epic invece ha tirato fuori gli imparentati Nanite Shaders, sistema che permette di offrire uno scaling automatico del dettaglio poligonale fatto al volo dal sistema. Attualmente devono essere create tante variazioni in termini di qualità per gli oggetti di gioco che vengono cambiati al volo dal sistema in base alla distanza dalla telecamera. Nanite permette di fare tutto in automatico. Si tratta di tantissime ore di lavoro risparmiare.

E questa è un'arma a doppio taglio. L'abbiamo visto direi con un po' tutti i giochi in Unreal Engine 5 recenti, praticamente tutti di case di sviluppo AA. Dove se da un lato si vede la capacità delle nuove tecnologia di mettere in scena in modo convincente la visione degli artisti, dall'altro la più scarsa perizia tecnica porta ad utilizzi di risorse non sempre ottimali. Neanche a farlo apposta mentre stavo attrezzando il pezzo, Digital Foundry ha fatto un video recap dei primi titoli Unreal Engine 5 non di Epic per vedere come sono, come vanno, cosa offre il motore e cosa c'è da migliorare.

Questa discrepanza tra programmatori più o meno sgamati è stata in passato accentuata con il motore Unity. Negli anni è diventato sinonimo tra i giocatori di scarse performance, quando la realtà è più un'altra. Siccome è un motore, fino a prima che provasse a cambiare il suo sistema di monetizzazione, molto popolare, se adoperato da gente con le giuste competenze, si presenta senza il minimo problema. Se passa tra le mani di qualcuno che non ha le risorse per gestire al meglio il proprio titolo, si ritrova con dei problemi che si riversano sul giocatore. E questo tanto più è evidente quanto più si tratta delle prime volte che ci si approccia ad usare uno strumento.

Anche io lavorativamente oggi produco codice decisamente meglio organizzato e più smart rispetto a quando ero in università e c'è sempre da imparare.

L'ultimo grande passo avanti delle tecnologie nella nuova generazione è la nuova velocità degli I/O. Termine che indica Input/Output e solitamente è legato allo spostamento di dati fuori e dentro i cuori principali di CPU e GPU. 

Del dato c'è una concezione molto effimera nella mente delle persone non addette ai lavori. Un dato occupa uno spazio e spostarlo richiede energia e tempo. Tanto più lo spostamento dei dati è lento, tanto più andrò incontro a colli di bottiglia che devo superare. Per tutta la generazione Ps4/One, i giocatori PC hanno potuto beneficiare dei benefici passivi nell'avere i propri giochi su SSD. Il loro codice di caricamento e funzionamento era scritto come se dovessero caricare su un HDD, la base delle console. I vantaggi degli SSD erano tangibili ma non rivoluzionari, perché non c'erano tool scritti appositamente.

Questo cambia con le nuove console. Grazie ad Nvme da velocità enormi e capacità di compressione-decompressione su hardware dedicato, non scomodando la CPU, è possibile accedere ai dati ad una velocità fotonica. Il primo gioco pubblicizzato come sfruttando molto questa tecnologia, Ratchet & Clack Rift Apart, è arrivato su PC nel 2023 e l'ha fatto usando il corrispettivo PC della tecnologia console: DirectStorage. Nelle istanze di attraversamento dei portali, maggiore è la velocità dell'SSD e più vicina sarà l'esperienza a quella di Playstation 5. Ad oggi insieme a Forspoken è l'unico titolo che ne fa uso su PC. 

Il gioco recente direi che ne fa più largo uso è Spiderman 2. Tecnologia del genere è molto utile per chiunque stia costruendo un open world dove la velocità di attraversamento dello stesso può essere molto elevata.

E giusto per ritornare al concetto di loop. Tutte queste tecnologie richiedono tantissima memoria veloce per funzionare bene. Pertanto, tutte le nuove generazioni di hardware PC stanno implementando tantissima cache a bordo dei loro sistemi. Le GPU Nvidia con la cache di livello 2, quelle AMD con quella di livello 3 ed i processori con cache di livello 3 massiva come la serie X3D di AMD. Hardware che informa i software che poi informano l'hardware.

PIXEL NUMBER - OLD METRIC

Butto qua in mezzo anche un'altra polemica che spesso fa capolino nelle discussioni, per dare la mia prospettiva sulla cosa.

La tesi sostenuta è questa: Le tecnologie di upscaling sono una scusante per non ottimizzare il gioco. A questa si aggiunge una frangia estremista che vuole che la risoluzione nativa è l'unica che deve essere considerata e i frame inseriti dall'IA non sono validi.

L'upscaling è quella tecnica che permette di aumentare la risoluzione di un'immagine. Perché è di vitale importanza? Perché il mondo è passato dalla tecnologia a tubo catodico a quella LCD. Nella tecnologia a tubo catodico il concetto di risoluzione come un'insieme di pixel, lasciava il tempo che trova, l'immagine a schermo era disegnata in modo analogico e continuativo, con una fusione naturale delle singole unità dell'immagine.


Su un pannello LCD diventa invece importante mostrare i pixel di un'immagine perfettamente allineati con la griglia del pannello. Se ho uno schermo 1920x1080, dovrò mandargli immagini di quella grandezza per la massima chiarezza visiva. La regola che c'era una volta: vabbe' se non ce la faccio abbasso la risoluzione e via, non vale più. Se si abbassa la risoluzione il risultato fa cagare da vedere.

Ecco quindi che sale un enorme dubbio: come meglio spendere le risorse di calcolo del mio software? Tutti i pixel che vediamo su schermo sono finti. Sono frutto di calcoli. Sono inventati. Il problema sta nel capire quanta potenza dedicare ad ognuno. 

Il concetto quindi di dedicare la potenza a disposizione per generare il miglior numero di pixel è, per definizione, ottimizzazione, non l'opposto di ottimizzazione. E questa operazione non è nuova, le console sfruttano questa tecnologia da sempre.

Mentre io giocavo il primo Bioshock in 1080p nativo sul mio PC con una GTX 560Ti a dettagli alti con un farmerate di 60fps senza problemi, aiutato da 8GB di Ram di sistema ed un i5 2500k, su Playstation 3 il gioco veniva renderizzato a 1152x640 con sopra un filtro FXAA (che schifo le soluzioni in post process AA di quel periodo). O che dire di Call of Duty Black ops? Playstation 3 andava a 880x720

Guardando anche alle risoluzioni tra Playstation 4 e Xbox One c'era tantissimo uso di sub-1080p. 

Come ogni strumento, le esigenze del mercato gli han dato una evoluzione non da poco. L'avvento delle Tv in 4k e delle Playstation 4 Pro e Xbox One X sancì la diffusione di algoritmi di ricostruzione sempre più avanzati che vanno a recuperare informazioni da più frame. Checkerboard rendering, TAA con funzione di upscaling, interpolazione di frame alternati, si usava ogni cosa possibile per recuperare ogni goccia di performance per rendere il framerate migliore o migliorare la resa finale dell'immagine.

È un'evoluzione che ha avuto la sua normale crescita fino ad arrivare alla sua forma attuale dove la ricostruzione viene aiutata da algoritmi di machine learning che beneficiano dall'avere unità di calcolo matriciale dedicate, quindi al DLSS di Nvidia o XeSS di Intel. Ed ovviamente, ora che il gradino è tornato, se si ha un sistema con potenza console, c'è bisogno di usare le stesse tecniche delle console

Non solo, ma le tecniche grafiche moderne non scalano linearmente con la risoluzione, ma più che linearmente. Se un vecchio gioco passare da 540p a 1080p portava ad un quadruplicare dei pixel e quindi ci si poteva aspettare 1/4 delle performance, oggi numerosi calcoli secondari dipendono da quanti pixel sono grandi tutti gli elementi interni del gioco, andando a creare un effetto a cascata. Quindi decidere di sfruttare la potenza a disposizione per realizzare pochi pixel quanto il più possibile belli e poi sfruttare le migliori tecniche di upscaling per arrivare con un'immagine in 4k, è la scelta dell'ottimizzazione.

E con questo voglio riportare alla memoria tutte le lamentele che ci furono intorno ad un gioco: Quantum Break. Tra l'altro sempre di Remedy. Le frasi usate in quel periodo sembrano tanto uguali a quelle di adesso. "In mezzo a tanti giochi Unity ed Unreal, è raro vedere un gioco così tecnicamente elevato su un motore proprietario". 7 anni e non sentirli. Qui l'analisi del tempo di Digital Foundry.

Un gioco che girava a 720p ricostruito e fermo a 30fps. Perché si voleva spingere sulla fedeltà dell'illuminazione, sul look e feel delle alte produzioni in compuer grafica. Ricordo poi quando fu rilasciato su PC, sempre bloccato con la sua tecnica di ricostruzione. Ci fu richiesta di sbloccarlo e così fu fatto... solo per scoprire che pochissimi PC erano in grado di gestirlo a risoluzione nativa. Il mio PC di adesso, armato di 12600k ed una 4070 in 1080p al massimo sta sugli 80-90 fps. Un gioco di 7 anni fa ma che non sfigura molto con titoli contemporanei.

DINAMISMO E STATICITÀ

Oramai ci metto anche questo punto nel discorso, perché noto essere un altro argomento dove c'è una manchevolezza enorme. Manca la capacità di capire che offrire dettagli statici e dettagli dinamici ha un peso diverso.

Un effetto statico vuol dire che rimane immutabile di fronte ad forzanti esterne. Un effetto dinamico vuol dire che è in grado di aggiornarsi in tempo reale in base a ciò che accade. In maniera molto banale: al cambiare dell'ora del giorno mi aspetto che le ombre degli oggetti illuminati da sole cambino nel tempo. Se lo fanno, si tratta di un sistema di illuminazione dinamica. Se le ombre rimangono fisse, allora ci troviamo di fronte ad un sistema statico.


Questo enorme distacco lo vidi a Febbraio del 2023, quando uscì Metroid Prime Remastered. Tutti si chiedevano come fosse possibile avere questa grafica su Nintendo Switch.

Ecco i videogiochi sono un media interattivo. Dove il mondo di gioco reagisce alla nostra presenza. Rendere ogni elemento reattivo alla presenza del giocatore e degli altri agenti di gioco costa in termini di calcoli matematici. Gli sviluppatori ragionano in modo un po' inverso sulla questione e provo ad illustrarvi il processo qui sotto.

Quando si progetta un videogioco la metrica che gli sviluppatori pensano è il "costo per frame" ed è pensato in millisecondi. Il punto di partenza è stabilire un target di performance per la piattaforma base, ad esempio, 30fps. Questo determina il tempo necessario al calcolo di un singolo frame: 33ms. Ogni effetto che ho in campo costa una specifica quantità di ms di calcolo. 

In questo modo si ha in mano il peso di ogni soluzione. Inoltre ogni tecnologia usata deve servire l'intento del gioco. Metroid Prime è un gioco dove bisogna attraversare tanti scenari, ma l'interazione del giocatore con essi è molto scarsa. Ecco quindi che il processo avviene in questo modo: il livello viene impostato con tutte le luci del caso, viene calcolato "offline" con la precisione che più ha senso per il progetto e queste informazioni vengono immagazzinate in texture apposite. Quando sono nel gioco, nella scena, il sistema deve solo prelevare le texture di tutti gli oggetti ed applicarle. La sensazione finale è di grande precisione e colpo d'occhio.

Molte soluzioni sviluppate negli anni offrono sistemi ibridi, mentre altri tipi di giochi sono propensi ad usare quante più soluzioni in tempo reale possibile. In un gioco horror ad esempio, poter alterare la luce al volo e vedere tutto il mondo di gioco che reagisce a questi cambi, è utilissimo per gestire il mood al meglio.


WRAP UP

Alla fine di questo mappazzone di 5000+ parole, che volano su tanti diversi punti, non è per dire "non dovete lamentarvi, non dovete criticare". Lo stato di alcune recenti uscite sono figlie della fretta, con software non pronti buttati via perché la direzione ha stabilito quei limiti temporali e non ci si è stati dentro. Ma è per dare prospettiva. Per dire perché e come le cose accadono. Per dare i contorni agli eventi così che invece di finire in critiche sterili, ci si concentri su cosa va davvero criticato.

Anche perché uno dei grossi problemi, ma della vita proprio, è che non si impara mai dal passato. Va bene quando si è giovani ed il passato non si conosce, ma se non c'è scambio generazionale, non si va da nessuna parte. Io c'ero quando Crysis non ero ancora un meme. Io c'ero quando uscì Quantum Break. C'ero quando tutte le discussioni sono state fatte e rifatte nel passato e nessuno le passa alle nuove generazioni. Nessuno parla della storia.

Nessuno sembra rendersi conto che il videogioco è un lavoro che è allo soglia costante del bleeding edge, dove le soluzioni a problemi vengono spesso inventate sul momento e dove c'è uno stato di costante flusso, cambiamento, accentuato dalle tecnologie di veloce interconnessione odierna.

E quel che ci possiamo chiedere è se questo percorso è quello desiderabile o meno.



Stay Classy, Internet.

Nessun commento:

Posta un commento

01 09 10