Una carriera nei videogiochi
Alessandro Monopoli, Lead Engine Programmer –
Console Team
Giochi a cui ho lavorato
Milestone - Milano
Codemasters – Southam, UK
Supermassive Games – Guildford, UK
Hardware usato nei videogiochi
Atari 2600 - 1977 CPU: 1.19Mhz RAM: 128 bytes
Sega Master System - 1985 CPU: 4 Mhz (Z80)
RAM: 8KB + 16Kb VRAM
Sega Mega Drive – 1988,1990 CPU: 7.6Mhz (68000)
RAM: 64KB + 64Kb VRAM Sega Saturn – 1994, 1995 CPU: 2x28.6Mhz GPU: 2 chip RAM: 2MB + 1.5MB VRAM Sega Dreamcast – 1998, 1999 CPU: 200Mhz GPU: 100Mhz RAM: 16MB + 8MB VRAM
Playstation 3 – 2006
CPU: 3.2Ghz GPU: 500Mhz RAM: 256MB + 256MBVRAM Xbox One – 2013
CPU: 1.75Ghz x 8 GPU: 853Mhz RAM: 8GB
Hardware corrente
In media
CPU: 3.8Ghz x 8 GPU: 1.825Ghz RAM: 16GB
SSD: circa 40x piu’ veloce rispetto al passato
Curiosita’
Questa immagine e’ grande 726Kb La cartuccia di Sonic e’ da 512Kb
Lavorare nei videogiochi
Lavorare nei videogiochi e’ diverso
Cultura basata intorno alla creativita’
Conta molto il risultato rispetto all’aspetto
Atmosfera accogliente e genericamente leggera - Codice di abbigliamento molto libero
- Giocare durante la pausa pranzo e’ normale
- Togliersi le scarpe e mettersi le ciabatte e’ normale
- Appendere poster e avere action figure sul tavolo e’ normale - Uffici quasi sempre open space, non cubicoli
Lavorare nei videogiochi e’ ordinario
Stipendio ogni mese
Vacanze (25 giorni l’anno feste secluse) Pensione privata
Vari benefit (dentista, medico private, etc…) Feste annuali (pandemia permettendo)
Flexi-time (7.5 ore al giorno, con inizio e fine a tua discrezione in un range) Bonus annuale
Revisione stipendio annuale
Benefit simili o migliori rispetto ad altri lavori
Metodologia di lavoro simile
Strumenti ben noti (Jira, Hansoft, SCRUM) Linguaggi ben noti (C++, C#, etc)
Ruoli chiari (Lead, producer, director, expert)
Stima dei tempi e aspettative come in tutti i lavori
Lavorare nei videogiochi e’ conveniente
Aziende sempre alla ricerca
Normale dover scegliere tra due o piu’ aziende che ti contendono Continuamente contattati da recruiter
Se la vostra azienda e’ in difficolta’ e licenzia, non farete fatica a trovare un altro lavoro
Settore molto vivace
Mio Linkedin,
Sono tutti recruiter con offerte varie
L’elefante nella stanza
Crunch time
Da noi e’ il “lavoro straordinario”
In fase di colloquio, chiedere come viene gestito il crunch time Il crunch time prolungato porta a questi problemi
- Fatica generale
- Difficolta’ nel dormire - Difficolta’ con la famiglia - Irritabilita’
- Nei casi puoi estremi, stress post traumatico (Ne ho visto uno, ha richiesto uno psicologo per mesi)
Niente di tutto questo vale un
pagamento in qualsiasi forma
Crunch time
Ci sono storie famose a riguardo Io in passato ne ho fatto un bel po’
Negli ultimi 6-7 anni la situazione e’
nettamente migliorata
Sono passato dal fare 8-10 mesi di straordinario per progetto a 1 settimana
Requisiti
Requisiti
Negli anni, le richieste sono cambiate moltissimo - ‘80 – ’90 : Assembly e C
- ‘00 – ‘10 : C++, C#, HLSL per GPU
- ‘20 in poi : C++14/17/20, Linguaggi visuali (Blueprint), HLSL, C#
Altri linguaggi:
- Javacript, C#, Python, etc..
Cosa e’ cambiato
- Con l’aumento della potenza delle machine, I giochi sono cresciuti - Questo ha rischiesto la crescita dei team
- Moltissimi ruoli con specifiche specializzazioni - Programmatore Engine
- Programmatore Gameplay - Programmatore AI
- Programmatore Tools - Programmatore Audio - Programmatore Network
Cosa e’ cambiato
- Non si fanno quasi piu’ engine specifici per il gioco
- Si preferisce modificare engine di terze parti (Unity, Unreal, Cryengine)
- Alcune aziende preferiscono comunque usare un engine proprietario (CA usa il proprio engine per Total War)
Cosa bisogna sapere
- C++/C#
- Classi, polimorfismo - Template
- Libreria standard
- Smart pointer di vario tipo - Programmazione generica
- Design patterns - Interfacce
- Multithreading
- Entity Component System - Basso livello
- Come funziona la cache della CPU
- Programmazione con I registri vettoriali - Lavorare con un engine
- Unreal e/o Unity
Specializzazioni
Rendering
- Teorie sulla luce, materiali, colore e cosi’ via - Funzionamento GPU
- HLSL
- API tipo Vulkan, DX12, DX11, OpenGL Tools
- Database SQL o NoSQL (MongoDB, Elastic search) - C#, Python, Javascript, AngularJS o altri framework - Batch file
- Linux (server), AWS management Gameplay/AI
- Deep learning
- Macchina a stati, Behaviour tree
Ottimizzazione
Non importa quanto il vostro sistema sia potente
Le richieste di un gioco moderno spingono quasi sempre l’hardware 30 FPS -> 33ms per frame
60 FPS -> 16ms per frame Anche peggio in VR:
60FPS minimo con doppio rendering Algoritmi in continua revisione
Spostamento task su GPU (se ha senso)
Anche le cose piu’ semplici contano: esempio float var = 3.0;
3.0 e’ un valore “double”, quindi qui stiamo forzando una conversione.
float var = 3.0f;
Matematica
Ma serve?
Matematica
Esempio:
Voglio che la mia astronave punti verso un punto. Come costruisco la sua trasformazione?
P
A Dir = A-P
DirNorm = Dir / |Dir|
Right = DirNorm X GenericUP(0,0,1) Up = DirNorm X Right
Matrix= DirNorm.x, DirNorm.y, DirNorm.z Right.x , Right.y, Right.z
Up.x , Up.y, Up.z
Matematica
Esempio: Sono nel cono visivo di un nemico?
PDir = P-C;
PDirNorm = PDir / |PDir|
CosAlpha = Cdir . PDirNorm Angle = ArcCos(CosAlpha)
Cone C
P CDir
Come imparare
La scuola e’ la principale fonte di queste conoscenze.
Potete imparare tutto autonomamente, ma non e’ altrettanto efficiente.
- Universita’
- Matematica, Informatica, Fisica - Corsi specifici aggiuntivi
- Scuole private
- Verificate insegnati e quanti studenti sono stati assunti nel campo e dove - Internet
- Trovate quasi tutto gratis, ma spesso confuso - Corsi online (Udemy, ecc…) verificate la fonte - Reddit: non solo politica, gatti e porno!
E poi ho finito?
Come cercare lavoro
Il vostro CV
Ecco alcune domande che mi sono state fatte a riguardo, con risposta:
SU DI VOI
• Devo mettere la mia foto? No, e’ a tua preferenza
• Devo mettere se conto di avere figli? No
• Devo mettere il mio orientamento sessuale? No! E’ illegale chiederlo!
SULLA VOSTRA ESPERIENZA
• Devo mettere ogni esperienza lavorativa? Cerca di concentrarti su esperienze rilevanti col lavoro che cerchi. Se non ne hai, va bene qualunque cosa.
• E’ un po’ che non lavoro, e’ un problema? Dovrai spiegare i buchi.
• Devo mettere I miei hobby? Si’, sono argomento di conversazione.
IN GENERALE
- Quanto deve essere lungo? I’ importante e’ concentrarsi su cosa si e’ fatto e di cosa si e’ fieri. In generale 1-2 pagine, ma nessuno si offende per piu’ pagine.
Il vostro colloquio
• Se ho i tatuaggi e’ un problema? No
• Devo mettermi in giacca e cravatta per il colloquio? No, ma siate presentabili
• Devo sapere l’inglese? Si’, e’ una necessita’ sia in Italia che all’estero.
• Posso fare foto mentre sono li’? Di base, no. Chiedete prima.
• Ho un progetto personale: ha senso portarlo? Si’
Basta essere preparati?
No, parlandovi devono trasparire queste caratteristiche:
- Deve essere piacevole lavorare con voi - Sapete essere parti di un team
- Non siete intolleranti verso gli altri
- Avete passione e voglia di crescere nel campo in cui vi presentate Come prepararvi
- Siate onesti su quello che sapete fare e quello che volete fare - Sfruttate al meglio lavoro a scuola con I vostri compagni
- Non isolatevi, non risolvete tutto da soli - “Be excellent to each other” – Bill & Ted (1989)
- Cercate di trovare un campo che davvero vi interessa
- Qualcosa che tra vent’anni ancora vi appassionera’. E difficile, ma quanto lo trovate, vi folgorera’.
Ottenete un’offerta
Siete stati bravi, avete ottenuto un’offerta!
- Devo accettarla? Nessuno obbliga nessun ad accettare. Non accettare non significa bruciarsi ponti o altro.
- Il contratto e’ blindato? Il contratto e’ sempre modificabile, nei limiti del sensato.
- Posso chiedere piu’ soldi/vacanze/benefit? Controllate prima cosa viene offerto in media alla vostra esperienza.