Matteo Basei

Una collezione di piccoli programmi realizzati a scopo didattico.

Amazing Skies un simulatore spaziale sviluppato da zero in C++ e GLSL

Questo programma è una tech demo di un simulatore spaziale. È stato scritto nel tempo libero, da zero, senza usare alcuna libreria esterna, in C++ e GLSL, per approfondire le mie conoscenze di computer graphics e engine 3D.

Ingresso nell'atmosfera di un pianeta roccioso simile alla Terra.
Ingresso nell'atmosfera di un pianeta roccioso simile alla Terra.

I modelli 3D sono stati anch'essi creati da zero utilizzando Blender, in modo molto rudimentale per la verità, non essendo il mio obiettivo approfondire le tecniche di modellazione 3D. Anche le texture per gli interni e gli esterni delle astronavi vengono tutte da foto manipolate allo scopo (una foto di un container, di un camion frigorifero, di un'ala di un aereo, eccetera). Tutti questi "contenuti" devono essere considerati nulla più di placeholder per testare l'engine 3D.

Un gigante gassoso con degli anelli planetari.
Un gigante gassoso con degli anelli planetari.

L'editor che ho creato per preparare i miei oggetti importa i modelli esportati da Blender in formato Wavefront OBJ e le texture in formato BMP, per poi esportare il tutto in un formato proprietario ottimizzato e pronto per essere utilizzato dal programma. Il programma supporta il diffuse mapping (le texture tradizionali), il bump mapping o il normal mapping (per i rilievi dei materiali) e lo specular mapping (per i riflessi).

In orbita intorno ad un gigante gassoso.
In orbita intorno ad un gigante gassoso.

Ho implementato un sistema LOD (level of detail) che permette di associare più di una mesh per ogni oggetto e utilizzare quella più opportuna in base alla dimensione a schermo. Per quanto riguarda i pianeti e lune invece, essi vengono generati in base alla posizione della camera una volta al secondo utilizzando un thread apposito per ogni corpo celeste. È stato molto interessante ed istruttivo (re)inventare un algoritmo efficiente per la generazione di una sfera opportunamente suddivisa e deformata in base alla morfologia del pianeta.

I contenuti generati proceduralmente, come le nebulose, le atmosfere e gli anelli dei giganti gassosi, le coste e le montagne dei pianeti rocciosi, sono ottenuti con un'implementazione in GLSL di un algoritmo per la generazione di rumore pseudo casuale.

Transizione atmosfera - spazio senza interruzioni e caricamenti.
Transizione atmosfera - spazio senza interruzioni e caricamenti.

Una delle caratteristiche principali che volevo ottenere fin dall'inizio è la transizione atmosfera - spazio senza interruzioni e caricamenti, per poter esplorare i sistemi stellari nel modo più realistico possibile.

Una moltitudine di incredibili cieli colorati in Amazing skies.
Una moltitudine di incredibili cieli colorati in Amazing Skies.

Il nome Amazing Skies vuole essere un omaggio ad Amazing Stories, la storica rivista fantascientifica statunitense, ed è stato ispirato da un collage che ho realizzato un po' per gioco come "poster" per l'ipotetico videogioco che si potrebbe sviluppare a partire da questa demo.