Utilizzo di Octree per la generazione di mondi procedurali in Unity Studente/i
Creators: name: Vagni, Diego
Publisher: name: Scuola Universitaria della Svizzera Italiana (SUPSI)
Year: 2021

description: Nel mercato videoludico moderno i mondi di gioco sono sempre più ampi e dettagliati. In particolare la generazione procedurale di essi dà la possibilità al giocatore di esplorare mondi così grandi da poter essere considerati quasi infiniti, con come uniche limitazioni la memoria utilizzata e la precisione delle variabili utilizzate al suo interno. Questo progetto di diploma è atto a esplorare l’utilizzo di Octree, una struttura ad albero dove ogni nodo ha esattamente 8 figli, per ottimizzare la generazione procedurale di mondi nel motore di sviluppo in real time Unity. Dopo un primo studio dell’algoritmo e delle implementazioni già disponibili in Unity, si è inizialmente lavorato allo sviluppo della struttura dati dell’Octree per definire un mondo procedurale simile a quello di Minecraft, portando attenzione sia alla modularità dell’implementazione che alla separazione rispetto alle componenti fondamentali di Unity. In seguito si è sviluppato il motore per la generazione procerdurale di mondi partendo da un seed, usando diverse tecniche di generazione, come per esempio il Perlin Noise, una funzione di generazione di numeri pseudo-random utilizzata per la generazione di un heightmap e la generazione di diversi biomi. Inoltre sono state inserite diverse ottimizzazioni tra cui l’utilizzo del multithreading per parallelizzare i lavori più pesanti computazionalmente e la generazione di mesh combinate con l’utilizzo di una Texture Atlas. Il risultato è un motore in grado di generare dei mondi con biomi diversi (Tundra, Deserto, Oceano, etc.) potenzialmente infiniti partendo da un seed con un forte decoupling dalle strutture fondamentali di Unity per poterlo scorporare ed utilizzare stand-alone. Il lavoro presenta anche un benchmark contro un’implementazione attualmente disponibile di Octree su Unity. --- In the modern videogame market, the game worlds are increasingly large and detailed. In particular, the procedural generation gives the player the possibility to explore worlds so large that they can be considered almost infinite, with the only limitations being the memory used and the precision of the variables used within it. This diploma project is designed to explore the use of Octree, a tree structure where each node has precisely eight children, to optimize the procedural generation of worlds using the Unity engine as graphic engine. After an initial algorithm study, I initially worked on developing the Octree data structure to define a procedural world like Minecraft, paying attention to both the modularity of the implementation and the separation from the core components of Unity. Later the engine for the procedural generation of worlds has been developed using different generation techniques, such as Perlin Noise, a pseudo-random number generation function used to generate a heightmap and the generation of different biomes. There are also some optimizations such the use of multithreading to parallelize the heaviest computationally jobs and the generation of meshes combined with a Texture Atlas. The result is an engine capable of generating potentially infinite worlds with different biomes (Tundra, Desert, Ocean, etc.), starting from seed with a strong decoupling from the fundamental structures of Unity to render possible to use it stand-alone. The work also presents a benchmark against the one of the available implementations of Octree in Unity.