• Non ci sono risultati.

Linguaggio alternativo alla deserializzazione

Nel documento Generazione procedurale di galassie (pagine 35-39)

4.5 Gerarchia

4.8.2 Linguaggio alternativo alla deserializzazione

Anche se non ha visto la luce nella forma finale del progetto, del tempo è stato speso per realizzare un linguaggio che permettesse al client di estrarre le informazioni necessarie a rappresentare stelle e pianeti senza dover possedere un modello statico del contenuto del file come la deserializzazione classica invece richiede. L’intenzione era quella di poter ag- giornare il modello del generatore senza che questo comportasse una patch del client per aggiornare di conseguenza il corrispondente modello utilizzato per la deserializzazione. Per fare ciò era stato ideato un linguaggio in grado di interpretare delle semplici formule del tipo seguente:

HU_water_level = water_level * 0.25 + 0.5

Questa formula avrebbe letto il valorewater_level dal file JSON basandosi solo sul nome, senza appoggiarsi ad un modello, ed effettuato le operazioni aritmetiche necessarie a tra- sformare il valore in un numero che si prestasse al campo HU_water_level presente nello shader, in pratica traducendo a runtime i valori contenuti nel JSON (valori realistici) nei valori necessari allo shader per rappresentare i vari oggetti.

Il linguaggio è stato sviluppato in modo funzionante nell’arco di una settimana e compren- deva strutture logiche come if per poter decidere quale formula utilizzare a dipendenza ad esempio del tipo di pianeta, permettendo di scrivere per esempio:

HU_population = if type "earthlike" then population / 10_000_000 else

if type "barren" then population / 50_000_000 + 5_000 fi fi

Anche se è stato possibile utilizzarlo inizialmente, con lo svilupparsi del progetto si sono profilati alcuni problemi le cui soluzioni avrebbero spinto il linguaggio a diventare sempre più

30 GalGen

simile ad un deserializzatore, perdendo i vantaggi che si speravano di ottenere. Alla fine è stato scelto di scartare il linguaggio e tornare alla deserializzazione classica, principalmente per risparmiare il tempo necessario a sviluppare e mantenere un linguaggio proprietario.

Capitolo 5

GalVis

La seconda parte del lavoro consiste nel visualizzare i dati generati in precedenza nel mo- tore Unity. Il codice prodotto per questa dimostrazione servirà poi da base al progetto Cas- siopeiae per visualizzare la galassia all’interno dello scenario di gioco, e quindi sono stati implementati vari metodi per visualizzare la galassia, i sistemi planetari ed i singoli pianeti. Ogni oggetto visualizzato deve corrispondere nella sua rappresentazione ai dati che lo han- no generato, per permettere all’utente di creare rapide associazioni visive del tipo "mare beige -> pianeta inquinato" o "colore metallico -> risorse minerarie abbondanti", ma allo stesso tempo le palette di colori e gli effetti utilizzati dovrebbero rimanere realistiche o al- meno credibili. Un eccezione sono le stelle che, come in ogni altro contesto fantascientifico, sono riprodotte in modo da poterne vedere chiaramente le caratteristiche come macchie, getti et cetera, mentre nella realtà senza strumenti vedremmo solo puntini luminosi o, se abbastanza vicini, ne rimarremmo accecati.

Una feature che non è richiesta è un sistema di esplorazione della galassia, come per esempio una lista dei sistemi o una telecamera libera in grado di muoversi nella galassia, in quanto queste funzionalità sono ancora in sviluppo all’interno del progetto Cassiopeiae, an- che se comunque è stato speso del tempo per accertarsi di abilitare la futura realizzazione di queste features.

5.1

Funzionamento

5.1.1

Livelli di visualizzazione

La visualizzazione della galassia è stata separata in livelli, ognuno dei quali possiede la sua scala ed i suo specifici fattori di ingrandimento per poter rendere visibili oggetti che altrimenti sarebbero minuscoli considerando distanze e proporzioni realistiche.

32 GalVis

5.1.1.1 GalacticView

Il primo livello è la mappa galattica, chiamata GalacticView, nella quale è possibile visua- lizzare l’insieme delle stelle generate in precedenza. Ogni stella è rappresentata con un oggetto totalmente spoglio di effetti luminosi o animazioni, in quanto più di mille stelle sono contemporaneamente visibili sullo schermo la maggior parte del tempo, ed è impensabile (con l’ottimizzazione attuale della parte grafica) che un client mobile riesca ad elaborare in tempo reale un numero simile di effetti complessi. La galassia ruota su se stessa per au- mentare l’effetto tridimensionale, ma nell’astrazione dei dati ogni stella è invece fissa in un punto preciso dello spazio.

Figura 5.1: Un’immagine della galassia nel visualizzatore GalVis

5.1.1.2 SystemView

Scendendo nel secondo livello, la SystemView, possiamo osservare il funzionamento di un sistema planetario. Centrata sulla stella e di poco rialzata rispetto al piano delle orbi- te, questa vista simula in tempo reale sia rotazione che rivoluzione dei pianeti, mostrando chiaramente le orbite e le loro inclinazioni, quali pianeti popolano il sistema e le dimensioni relative tra di essi. Qui la proporzione tra stella e pianeti, e anche le dimensioni relative tra i pianeti, sono leggermente ritoccate, visto che sarebbe difficile visualizzare una stella che può essere facilmente fino a cento volte più grande di un pianeta nella stessa schermata di una decina di pianeti. Nella pratica le dimensioni della stella, che rimane comunque più grande di qualunque pianeta, è fortemente ridotta mentre i pianeti più piccoli, che possono avere un raggio di un cinquantesimo dei pianeti più grandi, vengono visualizzati come se avessero un raggio minimo di 10 raggi terrestri, cosi che siano sempre visibili all’utente.

Figura 5.2: Una stella circondata dai suoi pianeti nel visualizzatore GalVis

5.1.1.3 PlanetView

L’ultimo livello è l’osservazione ravvicinata di un singolo pianeta, PlanetView,che permette di apprezzarne l’atmosfera, il ciclo giorno-notte, i rilievi e tutte le altre qualità rappresentate graficamente (la lista è piuttosto lunga). Anche qui si devono tenere in conto dimensioni mol- to diverse, ma poiché la telecamera si focalizza su di un singolo oggetto il problema non è cosi complesso come in precedenza. Il pianeta osservato riempie sempre la maggior parte dello schermo, essendo la telecamera posizionata ad una distanza che prende in conside- razione la dimensione del pianeta, ma mantenendo un’apparente diversità di proporzioni tra pianeti di dimensione diversa.

Nel documento Generazione procedurale di galassie (pagine 35-39)

Documenti correlati