Fare videogiochi: una panoramica su un po' tutto quanto l Alessandro Monopoli, Senior rendering programmer Codemasters LTD Tre parti l l l Fasi dello sviluppo, con il rapporto con i vari reparti Fase tecnica, dove faccio una breve panoramica su come erano fatti gli engine e come sono fatti oggi Presentazione di un breve esercizio per voi, che risolveremo assieme Breve presentazione Breve Presentazione Breve Presentazione Prima fase: che gioco fare l l l Questa scelta dal molti anni non e' piu' nelle mani dei designer La scelta e' guidata dal mercato, dalle analisi di settore, dalla politica, dalle guerre in corso e da cio' che succede. ESEMPIO: Sono stati recentemente cancellati 2 videogiochi aventi come tema un terremoto in Giappone Che gioco fare l l Questa scelta puo' semplicemente non esserci: una software house puo' prendere una commessa ed eseguirla ESEMPI - Devil may cry – Ninja Theory per Capcom - MotoGP 2008 – Milestone per Capcom - Silent Hill:SM – Climax per Konami - Castlevania LOS – Mercury Steam per Konami - Mirror's Edge – DICE per EA Prime basi l Una volta saputo che bisogna fare, partono le riunioni - Tecnologia: cosa serve? l Assunzioni: vanno fatte? Che tipo di profilo? (senior, junior) - Outsourcers: serviranno? - Online: serve? Se si', di che tipo? E' un gioco solo online? - Piattaforme: per cosa si lavora? Online l E' importante definire l'online - Ha un costo di sviluppo enorme - Puo' fare il successo di un titolo sul lungo periodo (Warcraft 2, Diablo 2, Starcraft (Caso Korea del sud) ) - Molto complesso da testare - Puo' richiedere strutture esterne costose (server, che vanno manutenuti) Giochi puramente Online l Il caso dei MMOG (Massively multiplayer online game) - Incredibilmente costosi (e rischiosi, caso APB) - Solitamente PC only: tremendo gestire la cardinalita' di configurazioni - Mondi enormi == bug dappertutto - Difficili da progettare e manutenere - Un grosso nome (WOW) che mangia tutto Preproduzione l In questo momento verranno prodotti tutti i prototipi necessari per capire cosa si vuole portare in produzione - Nuove tecnologie - Nuove soluzioni - Refactoring - Potenziale uso di middleware esterni Rapporto con gli altri reparti l In questa fase, il rapporto tra i reparti e' fondamentale. - Una scelta semplice per il rendering potrebbe portare a grosse ripercussioni per il gameplay e l'AI - Una scelta semplice per i grafici potrebbe non andare bene al marketing (es. ferite sulle persone) - Una riorganizzazione del codice potrebbe non andare bene alla produzione Rendering VS Gameplay Rendering VS AI I ponti sono un problema classico Code VS Production l l Scopo della produzione e' fare in modo che il progetto arrivi in fondo - Organizzazione dei task e controllo che vengano portati a termine - Cancellazione e aggiunta di features - Morale del team Una modifica troppo profonda al codebase spaventa la produzione - Rischio: se la roba che c'era prima andava, perche' cambiare? Soluzioni l Tutti questi problemi possono essere risolti tramite estenuanti riunioni e un set di prototipi atti a dimostrare che e' possibile fare quello che si vuole fare Esempi di problemi in fase di produzione l l l l Forzatura di una feature per mostrare un nuovo gadget tecnologico (Metal Gear Solid 4, Heavenly Sword) Cambio generazionale durante lo sviluppo (Eternal Darkness: Nintedo 64 → Gamecube) Critiche dal mondo della politica (Two Days in Fallujia) Sovrastima delle potenzialita' dell'hardware (Fable) Esempi di problemi di produzione l l l l Middleware o tool acerbi (Too Human) Perdita di un grosso numero di elementi nel team o perdita di un elemento chiave (Infinity Ward, Team Ninja) Cambio della moda durante lo sviluppo (Guitar Hero, Rhythm games in generale) Aumento spropositato dei costi di produzione (Indiana Jones Project - Lucasarts) Produzione l La fase di produzione e' quella fase in cui - Tutti i prototipi vengono finalizzati - Tutte le feature vengono implementate - Gli asset vengono prodotti Produzione: metodologia Agile Scrum l Da responsabilita' a chi fornisce il prodotto l Semplifica la gestione l Semplifica l'insorgere di imprevisti l Fornisce facilmente proiezioni di consegna Alpha l l Si entra in “Alpha” quando - E' possibile giocare il gioco dall'inizio alla fine - E' “feature complete” Non e' necessario che - Ci siano tutti gli asset - Tutte le feature siano definitive - Il gioco sia stabile in ogni condizione Alpha Beta l l Quando l'Alpha viene accettata, si punta alla beta. La beta e' quella fase in cui - Tutti gli asset sono a posto - Tutte le feature sono a posto - Il gioco e' adeguatamente rifinito - Il gioco e' stabile nella maggior parte dei casi Beta Release candidate l l Quando la beta viene completata, il gioco e' rifinito per bene, e' tutto pulito e stabile ed e' pronto per essere consegnato al pubblisher per i suoi test. Versione PC: test interni e qualche test microsoft se si vuole il marchio “Game for windows Live” Submissions l l l Xbox360, PS3, ecc.... : si manda il gioco alla casa madre, dove sara' testato approfonditamente. Non si controlla solo che funzioni, ma che non avvilisca la macchina (ossia sia adeguatamente bello) Se tutto e' a posto, si ha in mano la famosa GOLD FINITO! l l Quando la submission e' passata, il gioco e' finito. Non puo' piu' essere toccato: solo le patch potranno cambiarlo da ora in poi Patch l l Un software scritto da 150-200 persone che utilizza librerie esterne e interne e ha un codebase di milioni di linee di codice non puo' essere bug-free. O quantomento, non puo' esserlo in tutte le possibili permutazioni che un gioco moderno offre. Le console next gen HD based (X360&PS3) e il PC offrono da sempre il supporto alle patch Patch l l Gli scopi delle patch sono - Correggere problemi post-rilascio - Aggiungere contenuti mancanti al rilascio Problemi tipici - AI - Deadlock a causa di condizioni rare (RPG su tutti) - Bilanciamento statistiche di gioco (RPG, FPS) - Rimozione DRM Patch Day 1 l l Domanda: “Perche' ho comprato un gioco e appena l'ho messo dentro mi ha detto che c'e' una patch? Non potevano metterla direttamente nel gioco, visto che e' disponibile lo stesso giorno?” La risposta e' principalmente di natura finanziaria Patch Day 1: motivi l l l Un gioco potrebbe avere una data di uscita non modificabile in nessun modo. Esempi: - Chiusura anno fiscale (spiegazione) - Gioco legato a un film o competizione sportiva - Competitors La submission di un gioco richiede circa due settimane Questo significa che si potrebbe essere obbligati a consegnare il gioco al meglio possibile perche' passi la submission e poi accordarsi per una patch al day 1 Cosa succede se si fallisce la data di uscita? l Se il gioco ha una data di uscita non modificabile in nessun modo, la mancata consegna per la data stabilita puo' portare a: - Cancellazione del prodotto - Chiusura dello studio - Licenziamento degli esecutivi - Perdita di una licenza profumatamente pagata DLC l l l I DLC (Downloadable Content) sono un nuovo nome per le espansioni Vanno dal semplice nuovo costume all'aggiunta di pezzi gioco Controversi - A volte sbloccano funzionalita' gia' presenti ma bloccate - Qualita' altalenante - Prezzo considerato improprio (soprattutto dopo che Apple ha abbassato il valore del lavoro) DLC l l Di fatto allungano la vita di un progetto Il gioco va progettato dall'inizio con i DLC in mente: tutto deve essere espandibile Chiusura finale l l l Una volta che non si forniscono piu' patch e DLC, il progetto e' chiuso. Non c'e' piu' tempo allocabile == non ci si puo' piu' lavorare Il progetto si prende per intero e si salva su storage ad alta capacita' (nastri) - Un progetto medio moderno ha dimensione totale di circa 1TB e puo' raggiungere i 2.5TB Parte tecnica: architettura degli engine l l Nel passato remoto (anni '80) ogni gioco era sviluppato quasi da zero, per sfruttare al meglio le risorse disponibili per quel gioco in particolare Al massimo i seguiti usavano la tecnologia precedente per svilupparla meglio Passato remoto l C64 l Amiga (tutti i modelli) l NES, SNES l Master System, Megadrive, Saturn l Gameboy, Gameboy advance l Tutti gli altri (Colecovision, Intellivision, Spectrum, ecc...) Passato Remoto Passato remoto l Hardware estremamente eterogeneo - Vari processori per varie cose - Tutto diverso tra una macchina e l'altra - Coin op addirittura costruiti attorno al gioco che si deve fare - CASO: Atari 2600 Dimensione di un videogioco l l l l Ai tempi i videogiochi erano salvati su cartucce, audio cassette o floppy Ogni macchina aveva il suo formato Alcune macchine avevano l'HD (Amiga, PC prima generazione) Dimensione che varia da 4 kb al massimo di circa 16-20 Mb poco prima dell'arrivo dei CDROM Supporti Passato remoto PC single core l l l I PC “Ibm Compatibili” propongono una soluzione standard de-facto, a cui i produttori di hardware si adattano Hardware quindi piu' o meno similare tra le varie macchine Soprattutto, hardware potente (16 Mhz!!!) PC single core Organizzazione l l Il gioco e' diviso in due parti - Gameplay - Rendering Prima si esegue il gameplay e poi il rendering e poi si ricomincia da capo Organizzazione Tempo (33 ms se possibile) Gameplay Rendering Il tempo impiegato ha una importanza relativa, basta che vada abbastanza veloce (20-30 fps) tra tutto quanto. Per certi giochi anche 15 fps sono accettabili Organizzazione l l l Il multithreading qui e' quasi controproducente: i cambi di contesto uccidono le performance Alcune CPU lo consentono a stento (es. 286) Va bene solo per certi compiti particolari, come il caricamento asincrono e il movimento di barrette di completamento durante i caricamenti. Dimensione dati l l I floppy e i CD (e DVD poi) consentono di avere dimensioni dei dati nettamente piu' consistenti Si va da circa 300k a 4Gb, con l'avvento del periodo PS2 e l'uso dei DVD-ROM come formato. Dual Core l l l Questo tipo di organizzazione e' andato avanti per molti anni, fino all'apparire delle CPU dualcore A questo punto l'uso del multithreading diventa estremamente conveniente: puo' quasi raddoppiare le performance PERCHE' “QUASI”? Dual Core Gameplay Synch Rendering Due thread principali con synch in fondo, durante il quali avviene lo scambio dei parametri in duble buffering Problemi l Il gameplay e' avanti di un frame rispetto al rendering - l Crea ritardi nell'input, percettibili in certi generi di gioco (beat'em up, per esempio) Double buffering dei parametri e' costoso per la memoria Vantaggi l l Nessuna concorrenza: i due core viaggiano indipendenti senza collisione alcuna, con il solo synch in fondo Sfruttamento completo del sistema Dimensione dei dati l l I PC Dual core arrivano senza troppi cambiamenti nel mondo nello storage Dimensioni che vanno da 600Mb a 7Gb Ancora piu' core l l Quad core, X360 (3 core 2 thread ognuno), PS3 (CPU dual core + 6 SPU) La soluzione dual thread non puo' sfruttare l'hardware adeguatamente - Soluzione semplice: lanciare qualche thread accessorio (loading, fisica) - Anche cosi' avremo tempi morti da tutte le parti Task based Start Gameplay Start Rendering Task based l Il sistema a task prevede lo spezzettamento di un problema in tanti problemi piu' piccoli indipendenti da loro - Potrebbero richiedere uno step di ricongiungimento (strategia “Divide et Impera”) l Non piu' lag tra gameplay e rendering l Utilizzo completo e dinamico di tutte le risorse l Puo' richiedere la riscrittura di ampie parti di codice Dimensioni l L'arrivo del Blu ray e del digila delivery aumentano nettamente le possibilita' di storage l Gli HD sono ormai “senza limite” (piu' di 1 TB) l In media i giochi vanno da 4Gb a 30Gb Gli oggetti sono sempre nostri amici? l Il tipico caso e' quello di una classe contenente dei dati eterogenei che richiede di essere aggiornata in un loop l For (i=0; i<n;++i) l { objArray[i].update()} l (Esempio alla lavagna) Data Oriented Design l l l In questo caso gli oggetti creano problemi con macchine con cache limitata La soluzione e' di raggruppare i dati in collezioni omogenee ed avere gli oggetti con i dati eterogenei come puntatori che puntano all'array La cache ringraziera' Esercizio l Implementare un sistema che fornisca queste funzionalita': - Riceva in input una funzione e un set di dati - Divida questo set di dati in sottoinsiemi - Per ogni sottoinsieme crei un thread che esegua la funzione sul set di dat Esercizio l l l l Applicare questo sistema ad un set di oggetti che rappresentano delle cellule. Ogni cellula guadagna una unita' di nutrimento ogni secondo Ogni dieci secondi, la cellula si divide e crea un'altra cellula Ogni 95 secondi la cellula muore Esercizio l Gestisci la creazione e distruzione in modo da non creare deadlock