Come sarebbe un piano di studio ideale per lo sviluppo di videogames?

N.B.: articolo WIP

Ciao a tutti, oggi si va a fare un enorme esperimento mentale.

Qualche tempo fa, basandomi sull’IGDA Curriculum Framework, ho provato a pensare: come si potrebbe comporre un piano di studi ideale di tre anni riguardante lo sviluppo di videogames?

Ovviamente si suppone che chi voglia fare un percorso del genere abbia una buona base sull’informatica e sulla programmazione in generale.

Il piano di studi da me ideato è diviso in corsi che vanno a identificare i seguenti sottopercorsi:

  • Game design
  • Computer science
  • Game development
  • Art skills
  • Game studies
  • Game production

Per ciascun corso, sarà presente una descrizione, un syllabus, o dei link a corsi di università reali che mostreranno informazioni a riguardo.

Prima di entrare nei dettagli, faccio una lista di quelli che a mio modesto parere sono i prerequisiti necessari per affrontare gli argomenti che poi seguono:

Matematica discreta

Libro: Discrete Mathematics with Applications – Susanna S.Epp

Algebra lineare

Libro: Linear Algebra – Lipschutz, Lipson

Algoritmi e strutture dati

Libro: Data structures using C – Reema

Architettura dei calcolatori

Libro: Structured Computer Organization – Tanenbaum

Analisi matematica

Libro: Calculus – Larson, Edwards

Programmazione

Libro: C How to program – Deitel, Deitel

Fondamenti di informatica

Libro: Computer science illuminated – Dale, Lewis

Sistemi operativi

Libro: Operating Systems Concepts – Silberschatz, Galvin, Gagne

Reti di calcolatori

Libro: Computer Networks – Tanenbaum, Wetherall

Ingegneria del software

Libro: Software engineering – Sommerville

Quella che segue è la struttura che mi è venuta in mente.

1° parte

Introduction to videogame studies

Introduzione allo studio del medium videogioco nella quale si esaminano le sue funzioni culturali, educazionali e sociali.

Syllabus

  1. Studio dei videogiochi
  2. L’industria
  3. Cos’è un gioco
  4. Storia
  5. Estetica del videogioco
  6. Cultura del videogioco
  7. Cultura del giocatore
  8. Narrativa
  9. Serious games
  10. Videogiochi e rischi

Libro

  • Understanding Video Games: The Essential Introduction

Game design 1

Corso di introduzione alla disciplina del game design. L’approccio è inizialmente analitico, diventa poi pratico con la prototipazione e con le tecniche di design iterativo. La parte finale è dedicata alla comprensione dell’integrazione del game design all’interno di un team di sviluppo reale.

Syllabus

  1. Basi di game design
    1. Il ruolo del game designer
    2. Struttura di un gioco
    3. Elementi formali
    4. Elementi drammatici
    5. Sistemi dinamici
  2. Progettare un gioco
    1. Concettualizzazione
    2. Prototipazione
    3. Prototipazione digitale
    4. Playtesting
    5. Funzionalità, completezza ed equilibrio
    6. Divertimento e accessibilità
  3. Lavorare come game designer
    1. Strutture di team
    2. Fasi di sviluppo
    3. Il documento di design
    4. Comprendere la game industry
    5. Vendere un’idea alla game industry

Libro

  • Game Design Workshop – A playcentric approach to creating innovative games

Practical game development 1

Corso di introduzione allo sviluppo di videogames 3D con l’utilizzo di Unity.
Si studiano e si applicano le tecniche basilari di sviluppo di videogiochi, incluse la gestione degli input, dei suoni, la fisica, le camere, l’intelligenza artificiale, le interfacce utente e qualche cenno sul multiplayer online.
L’approccio è molto incentrato sulla pratica su Unity e SDL, al termine è previsto un progetto nel quale si implementa un videogioco in 3 dimensioni.

 Syllabus

  1. Introduzione alla programmazione di giochi
  2. Oggetti di gioco e grafica 2D
  3. Vettori e fisica di base
  4. Intelligenza artificiale
  5. OpenGL
  6. Grafica 3D
  7. Audio
  8. Sistemi di input
  9. Camere
  10. Rilevamento collisioni
  11. Interfacce utente
  12. Animazione con scheletri
  13. Grafica intermedia
  14. File dei livelli e dati binari

Libri

  • Game programming algorithms and techniques – Sanjay Madhav
  • Game Programming in C++: Creating 3D Games – Sanjay Madhav
  • Unity in Action: Multiplatform Game Development in C# with Unity 5 – Joe Hocking

Computer graphics

Corso di introduzione alla computer grafica. Si svolge su due filoni, uno di teoria e uno pratico nel quale, utilizzando C++ e OpenGL, si mettono in pratica i concetti teorici.

Syllabus

  1. Matematica miscellanea
  2. Algoritmi di rasterizzazione
  3. Processamento del segnale
  4. Algebra lineare
  5. Matrici di trasformazione
  6. Viewing
  7. Eliminazione della superficie nascosta
  8. Shading
  9. Ray tracing
  10. Mappatura delle texture
  11. La pipeline grafica
  12. Strutture dati per grafica
  13. Sampling
  14. Curve
  15. Animazione
  16. Utilizzo dell’hardware grafico
  17. Costruzione di applicazioni grafiche interattive
  18. Luce
  19. Colore
  20. Percezione visuale
  21. Riproduzione del tono
  22. Illuminazione globale
  23. Modelli di riflessione
  24. Rendering image-based
  25. Visualizzazione

Libri

  • Fundamentals of computer graphics – Peter Shirley e altri
  • Learn OpenGL
  • OpenGL Programming guide – Shreiner e altri

2° parte

History of video games

Vabbè, abbastanza banale. Studiare la storia per poter guardare le cose in prospettiva. Utile approfondire l’evoluzione della tecnologia negli anni.

Libro

  • The Ultimate History of Video Games – Steven L. Kent

Level & world design

Corso utile a mettere in pratica i concetti visti in Game design 1 (design iterativo incluso) nella creazione di un livello, di un mondo o di un ambiente di gioco in generale.
L’approccio è sia teorico sia pratico, si vedrà come prototipare livelli usando AutoREALM e realizzarli effettivamente in Unity.
Si conclude con un progetto realizzato in Unity.

Syllabus

  1. Previsualizzazione
  2. Pianificazione e costruzione di livelli
  3. Illuminazione, texturing, particelle, effetti e audio
  4. Attori, oggetti di scena, item e dettagli sulla camera
  5. Design per genere
  6. Scripting
  7. QA e play-testing
  8. Considerazioni per gli MMOG

Libri

  • Designing virtual worlds – Richard A. Bartle (utile per approfondire)
  • Building levels in Unity – Volodymyr Gerasimov
  • Ultimate Game Design: Building Game Worlds – Tom Meigs

Game engine development 1

In questo corso si introduce dal punto di vista teorico e pratico l’architettura di un motore di gioco. Si affronta in dettaglio la struttura e lo sviluppo del motore di rendering in C++.

  1. Introduzione
    1. Fondamenti di ingegneria del software per giochi
    2. Matematica 3D
  2. Sistemi a basso livello
    1. Sistema di supporto
    2. Risorse e file system
    3. Game loop e simulazione real-time
    4. Human Interface Devices
    5. Strumenti per debug e sviluppo
  3. Grafica e moto
    1. Motore di rendering
    2. Sistemi di animazione
    3. Collisioni e dinamiche del corpo rigido

Libri

  • Game Engine Architecture – Jason Gregory
  • OpenGL Superbible: Comprehensive Tutorial and Reference – Sellers

Artificial intelligence

Corso che introduce tecniche di intelligenza artificiale utilizzate nell’industria videoludica. Le varie tecniche sono viste sia in teoria, sia in pratica (sempre con Unity).

Syllabus

  1. Tecniche
    1. Movimento
    2. Pathfinding
    3. Decision making
    4. Tattiche e strategie
    5. Apprendimento
    6. Giochi da tavolo
  2. Tecnologie di supporto
    1. Gestione dell’esecuzione
    2. Interfacciarsi col mondo
    3. Strumenti e creazione di contenuti
  3. Progettare IA di gioco
    1. Sparatutto
    2. Guida
    3. Strategico in tempo reale
    4. Sport
    5. Strategico a turni

Libro

  • Artificial Intelligence for Games – Ian Millington
  • Unity 2018 Artificial Intelligence Cookbook – Jorge Palacios

3° parte

Computer animation

Syllabus

  1. Background tecnico
  2. Interpolazione e tecniche di base
  3. Algoritmi avanzati
  4. Fenomeni naturali
  5. Modellare e animare figure articolate

Libro

  • Computer animation: algorithms and techniques

Advanced game mechanics design

In questo corso ci si affaccia alla progettazione di meccaniche di gioco complesse.

Syllabus

  1. Progettazione di meccaniche di gioco
  2. Emergenza e progressione
  3. Sistemi complessi e struttura dell’emergenza
  4. Economia interna
  5. “Machinations”
  6. Meccanismi comuni
  7. Design patterns
  8. Simulare ed equilibrare giochi
  9. Costruzione di economie
  10. Integrazione di level design e meccaniche
  11. Meccanismi di progressione
  12. Meccaniche significative

Libro

  • Game Mechanics: Advanced Game Design – Ernest Adams

Practical game development 2

Si raffinano le competenze acquisite in Practical game development 1 e si implementa un gioco che fa uso di meccaniche di gioco complesse, come ad esempio può essere un simulatore di macroeconomia. La complessità va gestita sia sul piano del design sia su quello dell’ingegneria del software. Il tutto, con l’utilizzo di Unity.

Syllabus

  1. Implementazione di meccaniche di gioco avanzate
  2. Ottimizzazioni Unity

Computational Geometry

4° parte

Game production

Corso introduttivo al processo di produzione di un gioco, si parla delle difficoltà intrinseche, dei vari componenti del team di sviluppo, delle documentazioni che è necessario produrre e delle varie fasi di sviluppo.
E’ evidente il legame di questa materia con l’ingegneria del software.

Syllabus

  1. Difficoltà dello sviluppo di giochi
  2. Componenti di un gioco
  3. Contesto di mercato
  4. Elementi di design chiave
  5. Documento di design del gioco
  6. Documento di design tecnico
  7. Piano di progetto
  8. Tracciare i task
  9. Strategie di outsourcing
  10. Pubblicazione del gioco

Game design 2

Si affrontano in maniera completa delle tecniche poco comuni di game design.

Syllabus

  1. Generazione procedurale
  2. Giochi pervasivi
  3. Gamification

Online game development

Syllabus

  1. Internet
  2. Sockets
  3. Serializzazione di oggetti
  4. Replicazione di oggetti
  5. Topologie di rete e giochi di esempio
  6. Latenza, jitter e affidabilità
  7. Gestione migliore della latenza
  8. Scalabilità
  9. Sicurezza
  10. Motori di gioco reali
  11. Servizi per giocatori
  12. Server di cloud hosting dedicati

Libro

  • Multiplayer game programming: architecting networked games – Glazer, Madhav

3D modeling

5° parte

Serious game design

Game engine development 2

Completamento di Game Engine Development 1.
Si prosegue lo sviluppo di un motore di gioco con la creazione di un sistema di gameplay.

  1. Introduzione ai sistemi di gameplay
  2. Comportamento a run-time

Audio design

6° parte

Game Company creation

Virtual reality design

Syllabus

  1. Introduzione e background
    1. Cenni storici
    2. Linee guida di design
  2. Percezione
    1. Realtà oggettiva e soggettiva
    2. Modelli e processi di percezione
    3. Modalità di percezione
    4. Percezione di spazio e tempo
    5. Stabilità percettiva, attenzione e azione
    6. Percezione: linee guida di design
  3. Effetti di salute collaterali
    1. Motion sickness
    2. Problemi alla vista
    3. Sfide hardware
    4. Latenza
    5. Misurare sickness
    6. Linee guida per ridurre effetti collaterali
  4. Creazione contenuti
    1. Concetti ad alto livello
    2. Design degli ambienti
    3. Condizionare il comportamento
    4. Transizione alla creazione di contenuti VR
    5. Linee guida di design
  5. Interazione
    1. Interazione human-centered
    2. Concetti di interazione in VR
    3. Dispositivi di input
    4. Pattern e tecniche di interazione
    5. Linee guida di interazione
  6. Design iterativo
    1. Filosofia del design iterativo
    2. Fase di definizione
    3. Fase di creazione
    4. Fase di apprendimento
    5. Linee guida di design iterativo
  7. Presente e futuro della realtà virtuale

Libro

  • The VR book: human-centered design for virtual reality – Jason Jerald

Un clone di Tetris realizzato su Unity

Scrivo questo post per mostrare un clone di Tetris realizzato dal sottoscritto in collaborazione con un amico.

Si tratta di un’implementazione che, dal punto di vista delle meccaniche di gioco, prova ad essere pulita e performante, si evita quindi di utilizzare raycast o elementi fisici, preferendo a questi le semplici trasformazioni geometriche in combinazione con una matrice per la gestione della griglia di gioco.

La cosa più interessante è la gestione della griglia di gioco, la quale avviene su due piani, quello grafico (posizioni dei pezzi, trasformazioni, ecc.) e quello “effettivo” (matrice di short che indica la presenza o meno di un cubo in ciascuna posizione).

E’ presente anche una banale interfaccia utente che sicuramente non rispetta i migliori criteri di usabilità ma fa il suo dovere. La sua aggiunta è stata una scusa per imparare il funzionamento delle interfacce utente su Unity3D, e sono certo che in un progetto futuro ci sarà maggiore attenzione e cura a riguardo.

Può essere utile a chi vuole imparare qualcosa di Unity.
Se invece si vuole semplicemente giocare, basta lanciare il file .exe presente nel repository.

LINK

Prego il Signore che The Tetris Company non mi faccia causa.