Gestire lo spazio non è una magia
Una delle discussioni che ultimamente si fa sentire negli annunci relativi ai giochi Switch riguarda le dimensioni dei giochi. Se L.A. Noire pesa 29GB nella sua versione digitale su Switch, un gioco come Zelda Breath of the Wild sta tutto in 13GB. Come è possibile questa discrepanza?
Occorre fare un attimo un discorso su cos’è la compressione dei dati e come vengono preparati gli asset per i videogiochi. Ogni tipo di contenuto creato e salvato su un computer occupa spazio. Per evitare di occuparne troppo, si usano tecniche di compressione. Queste individuano all’interno del nostro dato delle ripetizioni di informazioni e riscrivono il dato tenendone conto. Molto più semplice vedendo la figura sottostante che dirlo a parole. Da 10 mattoncini si passa a 3. L’immagine rappresenta un tipo di compressione definita “lossless”, ovvero senza perdita di dati. Famosi formati lossless sono i FLAC per i file audio o i PNG per le immagini. Con questa compressione è possibile ricostruire il file originale in ogni sua parte. Notate però come la dimensione finale dei mattoncini dell’immagine non è propriamente 3, perché devo salvare anche il numero dei singoli mattoncini.

Per comprimere ancora di più sono costretto a passare ad una compressione lossy, cioè con perdite. Questi tipi di compressione buttano via dati non critici e mantengono solo quelli veramente importanti. Così si creano MP3 o immagini Jpeg. Il capire quali dati sono importanti e quali no, è un argomento molto complesso, fatto di algoritmi e pesante matematica. Quindi sorvoliamo. Bisogna giusto sapere che per comprimere e decomprimere un file serve potenza di calcolo. Credo abbiate tutti provato a scompattare un grosso file da winrar. Il computer impiega tempo perché la CPU deve eseguire l’algoritmo di decompressione che va a ricostruire il dato originale da un formato compresso lossless. Immaginate questo tipo di processo fatto in tempo reale, mentre si sta giocando.
Il problema principale del grande spazio occupato nei giochi è principalmente dovuto alla “noncuranza” degli sviluppatori. Quando si è in fase di creazione degli asset, i vari artisti e programmatori, non si curano molto di quanto spazio andrà ad occupare il loro operato. In fondo creare un videogame è un processo estremamente iterativo, con moltissimi asset creati e buttati. Si arriva ad avere una visione delle effettive dimensioni del gioco solo nella fase finale, quando sono tutti impegnatissimi a far si che il gioco funzioni in tempo per il lancio. Pochi hanno il tempo di curare le dimensioni del gioco. Un miglioramento della pipeline di produzione sicuramente aiuterebbe a migliorare la dimensione finale dei giochi. Ad esempio, Killzone Shadow Fall pesava sui 290GB. Dopo aver riorganizzato completamente tutti i loro dati, e dopo che Sony ha sviluppato librerie appositamente per loro, il gioco è stato ridotto a 39.7GB.

A questo si possono aggiungere effettive problematiche tecniche difficili da sormontare. Un gioco come Forza Motorsport 7, con 700 auto, texture pensate per il 4k, ha una mole di dati impressionanti e si può comprimere solo fino ad un certo punto senza perdere di qualità. In altri casi è proprio la macchina che non riesce a stare dietro al lavoro di decompressione. Titanfall su PC aveva 35 dei suoi 48GB di installazione dedicati all’audio non compresso. Il perché di questa scelta era ovvio: i PC di fascia bassa non riuscivano a elaborare l’audio sufficientemente in fretta da mantenere i 60fps di target che per gli sviluppatori era molto importante. Su Xbox One le dimensioni del gioco erano invece solo 20GB, e la decompressione dell’audio era gestita al volo dalla console. In generale, i file che occupano più spazio sono i filmati precalcolati, audio e texture.
In Zelda Breath of the Wild, possiamo vedere come il peso maggiore sia occupato dalle texture e modelli, che occupano 3.7GB. Le texture più grandi, di dimensioni 1024×1024 sono usate per strutture importanti o per elementi ambientali, ma la maggior parte delle texture si assesta su 512×512 o meno. Giochi come Witcher 3 per esempio, fanno uso di texture 2048×2048 su una scala maggiore di oggetti pertanto occupano più spazio. Anche il sonoro ha il suo buon footprint con 1.7GB di audio generico e 100MB per lingua di doppiaggio. Poi troviamo i dati della Fisica e la mappatura del terreno, entrambi poco sopra 1GB. Notare come The Legend of Zelda, malgrado le sue poche cutscene, riesce comunque a riempire 1GB di dati con esse. Sono codificate a 1280×720 in h264 ed hanno un bitrate sui 3000kbps o meno. Un gioco come Final Fantasy XIII arriva ad avere anche 20GB di cutscene. E per evitare che diventino ancora più grandi, spesso sono compresse in formato lossy, con visibili artefatti.

Confrontare giochi direttamente risulta comunque difficile. Ogni studio di sviluppo può gestire i dati in maniera diversa. Possono essere divisi o raggruppati in tanti modi ed avere un ordine di accesso diverso. I giochi open world devono poter gestire gli asset in streaming continuo senza caricamenti. Sfruttano molto la ripetizione di oggetti base e possono usare tecniche di costruzione procedurali, che creano il mondo di gioco sul momento partendo da dati più leggeri e semplici. I giochi lineari portano invece il giocatore da livello a livello in sequenza e possono quindi beneficiare da avere tutti i dati di un livello raggruppati insieme. Il loro fare uso di molte location diverse ed uniche porta anche a dimensioni maggiori. Molto dipende da come la macchina si comporta. Se ho il processore costantemente sotto stress, forse meglio inserire asset il meno compressi possibile per evitare di caricarlo, o viceversa. Tutti questi fattori combinati portano ad avere giochi di dimensioni variabili anche tra piattaforme simili.
Il punto di forza di Nintendo è da ricercare nei “soliti” posti. La loro pipeline di produzione mette sicuramente enfasi sul risparmio di spazio. Dedicare del tempo in fase di progettazione per capire quanto sia possibile comprimere in base alle risorse a disposizione è fondamentale. Il non inseguire la grafica realistica spinta permette di evitare l’uso di texture di grandi dimensioni ed i loro giochi non sono mai stati pesanti in cutscene. Ma soprattutto ci vogliono buoni programmatori matematici. Parliamo pur sempre della casa dove un giovane Iwata scrisse un algoritmo di compressione per Gamefreak che liberò così tanto spazio da permettere a Pokémon Argento ed Oro di avere due regioni al suo interno.