# Skybox (videogiochi)

Uno skybox (dall'inglese, lett. "scatola del cielo") è una tecnica di computer grafica che consente di creare, in uno spazio tridimensionale, l'illusione che lo spazio sia più ampio di quanto non sia effettivamente. Tecnicamente, uno skybox è un ambiente proiettato sulle pareti interne di un cubo, con la telecamera al centro. Questo significa che gli elementi disegnati in uno skybox sono inaccessibili, poiché il cubo non si sposta rispetto alla telecamera.
Il cielo, le montagne, gli edifici più lontani, e altri oggetti irraggiungibili vengono proiettati sulle facce del cubo (utilizzando una tecnica chiamata in inglese "cube mapping"), creando così l'illusione di un ampio ambiente tridimensionale. Uno skydome utilizza lo stesso concetto ma utilizza una sfera o un emisfero invece di un cubo.

## Principi di funzionamento

L'elaborazione della grafica 3D è computazionalmente costosa, specialmente nei videogiochi in tempo reale, e presenta molteplici limiti. I livelli devono essere elaborati a velocità straordinarie, rendendo difficile la resa di ampie panoramica dei cieli in tempo reale. Inoltre, la grafica in real time generalmente dispone di depth buffer con una profondità di bit ridotta, il che pone un limite alla quantità di dettagli che possono essere renderizzati (e quindi visualizzati) a distanza.
Per evitare questi problemi, i videogiochi spesso utilizzano "skybox". Tradizionalmente, questi sono semplici cubi con un massimo di sei texture (immagini) diverse, una su ogni lato. Grazie a un accurato allineamento, uno spettatore posizionato esattamente al centro dello skybox percepisce l'illusione di un mondo 3D reale intorno a sé.
Mentre uno spettatore si sposta all'interno una scena 3D, normalmente lo skybox rimane immobile rispetto alla sua prospettiva. Questa tecnica crea l'illusione che gli oggetti nello skybox siano ad una distanza infinita, poiché non mostrano alcun movimento di parallasse. Al contrario, gli oggetti 3D più vicini allo spettatore sembrano muoversi. Questa è spesso una buona approssimazione della realtà, in cui oggetti lontani come nuvole, stelle e persino montagne sembrano essere fermi quando il punto di vista si sposta di distanze relativamente piccole.
Tuttavia, i designer devono fare attenzione a quali oggetti includono nello skybox fisso. Se un oggetto di dimensioni note (ad esempio, una macchina) è incluso nella texture ed è abbastanza grande per essere percepito come vicino, la mancanza di movimento di parallasse potrebbe essere percepita come irrealistica o confusionaria.
L'origine di uno skybox può essere qualsiasi tipo di texture: fotografie, immagini disegnate a mano o un 3D pre-renderizzato. Di solito, queste texture vengono create e allineate in 6 direzioni, con angoli di visione di 90 gradi (a coprire le 6 facce del cubo).

## Skybox avanzati

Questi skybox basati su semplici texture avevano chiaramente grandi svantaggi. Innanzitutto non potevano essere animati, e tutti gli oggetti sembravano ugualmente distanti dall'osservatore. Avevano poi un aspetto semplice ed era difficile per i designer essere creativi.
Per creare una migliore illusione di profondità, a partire dalla fine degli anni '90 alcuni game designer iniziarono ad aggiungere piccole quantità di oggetti 3D allo skybox tradizionale. Questo skybox ibrido veniva collocato in una posizione inaccessibile, al di fuori dei limiti della porzione giocabile del livello, per impedire ai giocatori di toccarlo.
Nelle versioni più datate di questa tecnologia, come nel gioco Unreal, questo riguardava solo i movimenti nel cielo come gli spostamenti delle nuvole. Gli elementi 3D e 2D, come gli oggetti celesti o il colore del cielo, potevano essere differenti in ogni livello. Per avere, ad esempio, l'illusione del graduale passaggio dal giorno alla notte. Nel caso di questo gioco, lo skybox appariva comunque come se fosse infinitamente lontano perché, anche se conteneva geometria 3D, non seguiva lo spostamento del punto di vista del giocatore durante il movimento attraverso il livello.
Motori più moderni come il Source Engine portano avanti questa idea, permettendo allo skybox di muoversi insieme al giocatore. Sebbene a una velocità diversa. Poiché la percezione della profondità dipende dal confronto tra il movimento dei diversi oggetti, far muovere lo skybox più lentamente rispetto al livello fa sì che questo sembri lontano, ma non infinitamente. È anche possibile, ma non obbligatorio, includere elementi 3D appena fuori l'ambiente di gioco accessibile, come edifici o montagne. Per ridurre il carico sulla CPU, questi elementi vengono progettati e modellati su una scala più piccola, tipicamente 1/16, e quindi renderizzati (visualizzati) dall'engine in modo che sembrino molto più grandi. Questo effetto è noto come "3D skybox".
Nel gioco Half-Life 2, questo effetto è stato ampiamente utilizzato per mostrare la Cittadella, una struttura enorme al centro di Città 17. Nei capitoli finali del gioco, mentre il giocatore si sposta in città verso la Cittadella, l'effetto dello skybox fa sì che essa sembri crescere sempre di più all'avvicinarsi del videogiocatore, fino a sembrare completamente parte del livello. Quando il giocatore raggiunge la base della Cittadella, essa è divisa in due parti. Una piccola sezione inferiore è parte della mappa principale, mentre la sezione superiore è nel "3D skybox". Le due sezioni sono unite in modo fluido per apparire come una singola struttura.

## Visualizzazione di foto panoramiche

È importante notare che gli skybox possono essere utilizzati come strumenti di visualizzazione per la diffusione di foto panoramiche adattate. Tuttavia, uno dei difetti evidenti di questo sistema è che quando si può vedere il "terreno" dello skybox, si ha l'impressione che il resto dell'ambiente flotti nell'aria. Questo è dovuto al fatto che il terreno sembra essere lontano, accentuando l'effetto di vuoto. Questa situazione può causare problemi quando l'ambiente dovrebbe apparire come se fosse al livello del suolo.
Per risolvere questo problema, non è possibile semplicemente posizionare la telecamera a livello del suolo. Se la telecamera non è a una distanza infinita dai lati del cubo dello skybox, si osserva una risoluzione molto scarsa e molto pixelizzata vicino alla telecamera.
Pertanto, per creare l'illusione di un terreno dettagliato a livello del suolo, come un prato o un deserto, è necessario posizionare il terreno dello skybox a una distanza infinita verso il basso. Inoltre, è necessario utilizzare texture ad alta risoluzione del terreno posizionate proprio sotto la telecamera.
Infine, è importante trovare un modo per nascondere la transizione tra le texture dettagliate e la texture panoramica del terreno dello skybox. Questo può essere fatto in vari modi, ad esempio utilizzando una texture multi-risoluzione, che spesso viene creata da un algoritmo anziché ottenuta da foto elaborate.