Date post: | 05-Apr-2017 |
Category: |
Technology |
Upload: | codemotion |
View: | 16 times |
Download: | 0 times |
Kunos Simulazioni and Assetto Corsa, Behind the scenesAlessandro Piva, Senior ProgrammerFabrizio Brugnaro, Programmer
ROME 24-25 MARCH 2017
Sommario
- Background- Assetto Corsa e il porting su console- Porting iniziale- Performance & Multithreading- Conversione asset & Build system- Middleware- Submission- Interfaccia- Nuove features & TRC- Testing & QA- Conclusioni
Presentazioni: Alessandro Piva
- Passione per i videogiochi a partire dal Commodore 64- Interesse per competizioni di Informatica (Olimpiadi, ACM, TopCoder)- Laurea Triennale in Informatica presso Università La Sapienza, 2004 -
2008- Systems Programmer presso Rockstar North, 2009 - 2012- Senior Programmer presso Kunos Simulazioni, 2014 - presente
Background: Kunos Simulazioni
- Azienda fondata nel 2005 da Stefano Casillo e Marco Massarutto- Autofinanziata- Anni di lavoro su simulatori professionali (Ferrari, Dallara)- Team di circa 25 persone, di cui “core team” di 15 persone
Background: Assetto Corsa
- Pubblicato su Steam Early Access nel 2013, uscito in maniera definitiva nel Dicembre 2014
- Marzo 2016: versione 1.14, 150 auto, 20~ tracciati, best seller su Steam
- Primo gioco su PC ad avere il Nordschleife in laser scan, e vetture Porsche dal 2005
- Nato e cresciuto come simulatore per PC
Background: Porting su console
- Interesse nel voler portare la qualità simulativa di Assetto Corsa ai giocatori console
- Obiettivo dichiarato di non scendere a compromessi nel porting del motore fisico
- Sviluppo strutturato in modo da non compromettere la manutenzione e l’espansione della versione PC di Assetto Corsa
- Processi inediti per l’azienda: submission, Quality Assurance dedicato
Porting iniziale
- Assetto Corsa PC: codebase di dimensione contenuta (80000 righe di codice, librerie escluse) di codice C++11
- Porting iniziale relativamente facile, dovuto alla mancanza di dipendenze profonde con librerie di terze parti PC-only
- Livelli di astrazione per grafica, input, window system- Porting effettuato per gradi: prima versione funzionante del gioco
ottenuta intorno a Dicembre 2014- No audio- No networking- No GUI- Basso framerate: 10-20 fps- Bug grafici dovuti a conversione errata delle texture- Ingiocabile a causa di porting incompleto del codice di input
Performance
- Performance pessime al primo avvio del gioco su console, nonostante partissimo da una base di codice ottimizzata (su PC)
- 10-15 fps la prima settimana con 4 macchine in pista- 20 fps dopo aver risolto i bug di performance più ovvi- Necessità di rendere il gioco 3 volte più veloce per raggiungere 60 fps
- Buona performance lato GPU delle console, aiutata da una API grafica a bassissimo overhead
- Bassa performance lato CPU- Core AMD con architettura mobile, circa 50% delle performance rispetto ad un
processore desktop Intel a parità di clock- Clock a 1.6 GHz, quindi in totale 4 volte più lento di un processore Intel a 3.2 GHz
Performance: Architettura engine iniziale
- Architettura basata su due thread monolitici- Physics thread con frequenza 250 Hz (aggiornamento della fisica ogni 4 ms)- Render thread con frequenza variabile (in base alle impostazioni grafiche e le
performance della GPU) e indipendente dal motore fisico- Codice di rendering in stile OpenGL
- Funzioni virtuali render() implementate dai game object della scena, ognuna delle quali imposta lo stato ed effettua la draw call
Performance: Refactoring dell’engine
- Necessità di utilizzare i punti di forza delle piattaforme console- Multicore (6 core completamente a disposizione dell’applicazione)- Primitive di sistema (syscall, semafori, etc.) e API grafiche a basso overhead
- Modifiche all’engine per sfruttare al meglio il multicore- Modifiche al motore fisico in modo che lo step per ogni macchina possa essere
fatto su un thread diverso separatamente- Completo refactoring del motore grafico in modo da essere data oriented: niente
più funzioni render() ma creazione di deferred context (uno per passo di rendering) su thread separati
- Job system con alta flessibilità (possibilità di interrompere job, etc.) e overhead sull’ordine dei nanosecondi
Performance: Refactoring dell’engine
Frame fisico
Job di simulazione delle auto
Step di integrazione
Comunicazioneal thread grafico
Performance: Refactoring dell’engine
Frame grafico
Gameplay Scene traversal
UI, particles, postprocessing
Audio
Drawlist
Conversione asset
- Necessità di convertire (o comunque preprocessare) gli asset dal PC alle piattaforme console
- Diversità di formati (texture DDS su PC, GNF su PS4)- Generazione automatica di alcuni tipi di asset (texture atlas, indici)
- Necessità di rendere automatico il processo- Senza incorrere in lavoro extra per l’artista- Possibilità di ripulire e rigenerare tutti gli asset in caso un bug venga trovato e
fixato negli strumenti di conversione- Possibile da effettuare su un PC remoto
Build system
- Sistema per gestire in automatico la conversione degli asset- Basato su Ninja
- Tool ispirato a Make, orientato alla semplicità e alla velocità- Molto scalabile: performante anche con build di 40000 file
- Tool di conversione e preprocessing scritti in Python- Una dozzina di script autocontenuti e autodocumentati (python convert.py
--help)- Estremamente facile fare cose come aprire immagini, generare testo, creare
processi- In retrospettiva, forse meno mantenibile di C#
- Combinazione Ninja+Python anche per la generazione di master disc e patch per PS4 / XBox One
- Processo multi-passo da ripetere in 4 versioni, due per PS4 e due per Xbox
Middleware
- Assetto Corsa console fa utilizzo di tre middleware:- GUI: Scaleform- Audio: FMOD- Post-processing: Yebis
- Caratteristiche comuni: alto numero di feature, alto livello di complessità, medio-alto numero di bug
- Un bug in un middleware è molto più dispendioso (in termini di tempo) di un bug in codice scritto in-house
- Necessario valutare se le feature offerte dal middleware valgono la pena del tempo speso nell’integrazione e nel bug fixing
Submission
- TRC: Technical Requirements Checklist- Elenco di requisiti tecnici e funzionali che il proprietario della
piattaforma (Sony, Microsoft) richiedono che siano strettamente rispettati per poter pubblicare un gioco
- Alcuni richiedono delle modifiche architetturali al codice o alla struttura del gioco
- Multiutenza- Criptazione del protocollo di rete- Installazione in background
- Necessità di leggere e prendere in considerazione i TRC fin dall’inizio dello sviluppo
Submission
- Tempistiche espanse rispetto a PC (Steam)- Prenotazione slot- Creazione- Upload- Documentazione
- Necessità di avere, internamente o lato publisher, qualcuno che conosca e si occupi del processo (dal punto di vista burocratico e formale)
Presentazioni: Fabrizio Brugnaro
- Grande passione per i videogiochi fin da piccolo- Laurea triennale in Ingegneria Informatica presso
Università Roma Tre, 2014- Programmer presso Kunos Simulazioni, 2014 - presente
L’interfaccia utente
- Necessità di una nuova interfaccia - La GUI utilizzata per la versione PC era stata pensata
per l’utilizzo con mouse - Il menu principale era costituito da un eseguibile
separato, scelta non accettabile su console- Scelta di utilizzare Scaleform per velocizzare il processo
di porting- Compatibile con entrambe le console- Sistema già dotato di un suo editor- Nessuna manutenzione richiesta
Interfaccia con Scaleform
- Richiede la conoscenza della tecnologia Adobe Flash e di ActionScript- Lavoro diviso in due parti: creazione GUI in Flash e
implementazione di componenti e funzioni utilizzate dall’interfaccia
- Mantenere l’esperienza su console il più vicina possibile alla versione PC- Tutte le funzioni e i comportamenti della vecchia
interfaccia devono essere replicati- Processo lungo e dispendioso
Interfaccia con Scaleform
- Varie problematiche per il porting- La GUI PC non era stata pensata per essere
facilmente portata su un nuovo sistema- Funzioni di gameplay legate agli elementi grafici
- Ricerca, interpretazione e implementazione delle funzioni- La quasi totalità delle funzioni relative al gameplay è
stata riscritta- Alcune funzionalità sono state rielaborate per permettere
di essere usufruite tramite un controller- Utilizzo del sistema di traduzione di Scaleform
Nuove features e TRC
- Nuove funzioni aggiuntive richieste da Sony e Microsoft- Sistema di salvataggio- Trofei e Achievements- Servizi online
Sistema di salvataggio
- Sistema semplice su pc, ma lontano dall’idea di salvataggio di una console
- Utilizzo di sistemi fondamentalmente differenti tra le due console
- Necessità di adattare il sistema presente su pc- Diverse restrizioni- Alcuni elementi come replay, setups e ghost sono stati
trattati in maniera differente a causa di dimensioni e numero dei file
Trofei e Achievements
- Sistema completamente inedito per il gioco- Completamente assente su PC
- Implementazioni differenti per le due console- L’intero processo di creazione dei trofei può
consumare molto tempo- Necessità di definire una serie di sfide ed obiettivi che
tengano il giocatore interessato- Livello di difficoltà elevato per ottenere il 100%
Servizi Online
- Necessità di collegarsi ai servizi online- Requisiti molto stringenti da parte di Sony e Microsoft- Sono richiesti diversi controlli e informazioni per poter accedere ai
servizi online- Necessità di ristrutturare il sistema online di Assetto Corsa PC- Un nuovo strato, le sessioni di gioco, deve essere aggiunto alla
struttura esistente per permettere una serie di funzionalità aggiuntive- La possibilità di invitare giocatori e l’implementazione della voice chat
sono TRC che non possono essere ignorati.
Testing e QA
- Team di QA esterno dedicato- Un nuovo strumento per il nostro team
- L’elevato numero di TRC e test case rende necessario un team dedicato
- Aiuto indispensabile ma non senza intoppi- Periodo iniziale di definizione dei metodi e degli
strumenti di collaborazione- Testing troppo incentrato sui TRC- Mancanza di testing specifico e incentrato sulla
simulazione di guida
Conclusioni
- Porting di Assetto Corsa su console cercando di mantenere intatto il suo punto di forza, cioè la simulazione fisica
- Progetto gestito da poche persone all’interno di Kunos, reso possibile dalla bassa complessità del codice interno e dei tool
- Sfida principale dal lato tecnico: performance- Sfida principale dal lato non tecnico: TRC e gestione della submission