+ All Categories
Home > Technology > Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabrizio Brugnaro -...

Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabrizio Brugnaro -...

Date post: 05-Apr-2017
Category:
Upload: codemotion
View: 16 times
Download: 0 times
Share this document with a friend
29
Kunos Simulazioni and Assetto Corsa, Behind the scenes Alessandro Piva, Senior Programmer Fabrizio Brugnaro, Programmer ROME 24-25 MARCH 2017
Transcript

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

Il porting su console

- Porting dell’interfaccia- Nuove features e TRC- Testing e QA

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

QA


Recommended