Originariamente Scritto da
Satan Shark
Cercherò di essere quanto più elementare possibile.
Quando si sviluppa un gioco, ci sono una serie di obiettivi da raggiungere per arrivare al prodotto finale. Tra questi obiettivi ci sono le tempistiche di sviluppo e l'ottimizzazione necessaria per far girare bene un gioco nonostante i limiti tecnici delle piattaforme.
Le tempistiche di sviluppo riguardano soprattutto un aspetto economico. Il team di programmatori e artisti va pagato, e i costi sono piuttosto elevati. Ogni mese di sviluppo ha un costo, e fin dall'inizio si tiene in conto che ci saranno dei problemi per cui i tempi si allungano ed al contempo sarà necessario fare numerose ore di straordinari forzati.
Oltre l'aspetto economico, lo sviluppo di un gioco non può proseguire a tempo indefinito perchè anno dopo anno spuntano fuori nuove tecnologie, nuovi standard grafici e di gameplay, e si succedono anche le generazioni di console. Se inizi a creare un gioco per PS4 e impieghi cinque anni, il risultato è che devi di volta in volta aggiornare gli strumenti di sviluppo e rifare una buona parte del gioco per adeguarlo ai nuovi standard.
Degli esempi celebri sono Duke Nukem Forever, Crackdown 3 e Star Citizen. A causa dei continui problemi tecnici e rinvii questi titoli sono stati più e più volte rimaneggiati, cambiando engine di sviluppo, modelli, texture, effetti grafici e tanto altro. Alla fine i publisher pur di non perderci tutti i soldi dello sviluppo e cancellare i progetti hanno deciso di mettere assieme quello che avevano e pubblicare, col risultato che i giochi erano molto lontani dai loro effettivi obiettivi. Nel caso di Star Citizen invece lo sviluppo prosegue da molti anni con il conseguente cambio di engine di gioco (due volte) e tutti gli asset grafici. Ad oggi non si sa ancora quando e SE lo sviluppo arriverà mai a termine.
Come risolvere quindi questo problema e velocizzare lo sviluppo? Uno dei trucchetti basilari è quello di tagliare contenuti (che potranno poi essere aggiunti con un DLC). Quindi si può eliminare una intera area di gioco, o solo alcune parti. Si può anche ridurre i tempi di sviluppo andando ad agire su tanti piccoli elementi da eliminare. Ad esempio puoi eliminare quello che originariamente era un negozio con una grande vetrata in cui non puoi entrare (ma che ti costringe a creare anche tutto l'arredamento interno) sostituendo la vetrata con un semplice muro.
In una città piena di grattacieli come quella di Spider-Man i tetti sono ricchi di elementi e non possono essere trascurati. Ma se il personaggio non è in alcun modo in grado di vederli questi tetti, non c'è bisogno di creare gli elementi scenici, modellarli e fare le relative texture in alta definizione. Quindi nel caso di Cyberpunk eliminando la possibilità di arrampicarsi sui grattacieli e di utilizzare veicoli volanti, puoi fare a meno di definire e completare i tetti e tutti quei luoghi inaccessibili.
Per quanto invece concerne l'aspetto tecnico, gli sviluppatori si trovano di fronte a dover far girare un gioco su determinate console. Se fai il modello di un elemento (personaggio o elemento scenico che sia) con una quantità elevatissima di poligoni e texture ad altissima risoluzione (quelle più grandi possono essere anche in 8K o 12K), appena appare in scena deve essere renderizzato. Se la GPU della console riesce a gestire pochi modelli di questo tipo, quando si arriva a formare una folla in una determinata scena la GPU arranca e il gioco va a scatti e quindi devi ottimizzare il gioco per farlo girare fluido.
Come risolvi? Innanzitutto riduci il numero di elementi, in un secondo momento vai ad agire sui singoli modelli e ne riduci la complessità poligonale e la qualità delle texture. Se alcuni di questi elementi si trovano sul fondale e non sono raggiungibili, li sostituisci con delle versioni a basso numero di poligoni e con texture di bassa qualità, in modo da rendere più 'leggera' la scena.
Nel caso di Cyberpunk quindi potresti alleggerire modelli e texture delle aree non raggiungibili. Niente arrampicata e niente veicoli volanti significa anche un numero maggiore di aree non raggiungibili dal protagonista. Alleggerendo la mole di lavoro sulla GPU.
Il terzo punto riguarda i tempi di caricamento. Una scena come quella del volo finale del trailer di presentazione di Unreal Engine 5 è quasi impossibile da renderizzare in tempo reale su un sistema dotato di hard disk. Questo perchè sfrecciando a quella velocità, l'hard disk dovrebbe caricare i dati di modelli e texture ad altissima velocità per renderli disponibili alla GPU quando servono. Gli HDD delle console che sono a 5400RPM (quindi più lenti di quelli standard per PC), non ce la fanno a caricare in tempo i dati col risultato che o il gioco inizia a mostrarti glitch di ogni tipo come texture ed elementi scenici che appaiono all'improvviso, oppure inizia a bloccarsi e andare a singhiozzo (stuttering) perchè deve caricare i dati.
Oggi si cerca di ovviare a questi problemi riducendo la varietà degli elementi scenici, caricando in anticipo i dati nella RAM, e caricando quanti più asset possibile. Ma le console sono limitate, PS4 e Xbox One hanno 8GB di memoria RAM condivisa tra CPU e GPU (di cui circa 3GB servono per il sistema operativo e le altre funzioni della console), quindi con soli 5GB disponibili non puoi caricare così tanti dati e devi per forza ricorrere costantemente al caricamento da hard disk. Quindi la velocità dell'HDD detta letteralmente il ritmo di gioco.
Nel caso di Cyberpunk trasformando la metropolitana in fast travel, consente di caricare (su PS4 e Xbox One) direttamente l'area di destinazione e non l'intero mondo di gioco man mano che il vagone si muove. Inoltre anche in questo caso risparmiando su modelli e texture delle aree inaccessibili, si rende meno pesante il gioco per la CPU e la GPU. Infine libera gli sviluppatori dal compito di realizzare nel più minuzioso dettaglio gli interni dei vagoni e delle stazioni (chiudendo il cerchio al primo punto sui tempi di sviluppo).
Spero che sia abbastanza chiaro.