Wiki

Clone wiki

MayaVerse / Documentazione del progetto MayaVerse

MayaVerse

image_0.jpg

Introduzione

Questo documento descrive lo sviluppo e la creazione del primo Mondo Virtuale Immersivo. MayaVerse sarà infatti un universo ricreato al computer completamente immersivo sviluppato con l’ausilio delle migliori tecnologie per superare l’attuale paradigma degli attuali "Immersive Virtual Worlds" e proiettare l’utente in una nuova visione. Quella che verrà esposta è a tutti gli effetti un’idea, un progetto che noi speriamo presto diventerà realtà, crediamo comunque che tracciare un canovaccio e descrivere quali sono le possibilità stimoli a trovare possibili implementazioni.

Partiamo dalla corretta definizione di "MayaVerse":

Ambiente virtuale tridimensionale immersivo ricreato al computer condiviso tra più utenti attraverso Internet con possibilità persistente di inserimento, modifica, cancellazione e completa interazione tramite device virtuali con oggetti ed agenti, programmabile attraverso un linguaggio di scripting.

3D immersive virtual environment recreated by computer, shared with multiple users over the Internet with a persistent possibility of insertion , modification and deletion of objects and agents and direct interaction throught virtual devices. Futhermore programmable through a scripting language.

La definizione appena esposta chiarisce solo in parte le possibilità offerte da un Metaverse. Ecco allora di seguito un breve "manifesto" che possa delineare più in dettaglio le caratteristiche del progetto “MayaVerse”.

Un micro manifesto per il perfetto "Metaverse":

  • Immersive Virtual Reality: Realtà Virtuale Immersiva ovvero ben congeniata per un senso di "presenza" ed “interazione” ad alto livello. Non si deve pensare ad un semplice visore HMD collegato ad un ambiente ricreato al computer, ma ad una piattaforma che “coinvolga” l’utente e soprattutto dia a lui la possibilità di interagire con gli altri utenti, con oggetti ed anche con sistemi automatici o guidati da Intelligenze Artificiali.

  • Open Source/Royalty Free protocols, standards, code: l’intero codice sorgente del Metaverse dovrebbe essere rilasciato sotto lincenza Open Source, ma soprattuto basato su standard e protocolli non proprietari, aperti e certificati da enti internazionali. Casi esemplari sono gli standard VRML e la sua evoluzione X3D che tuttavia, dopo un periodo di buona diffusione, sono stati poi "dimenticati" dall’industria informatica. Recentemente anche Carmack ha sottolineato questa possibilità con la creazione di uno standard aperto per la descrizione di una scena 3d ed il suo trasferimento attraverso internet tramite glTF.

  • Sandboxing User Generated contents In-World/Out-World: la possibilità di offrire ai diversi utenti strumenti per la creazione e modifica di qualsiasi contenuto all’interno dell’ambiente virtualizzato è fondamentale. Anche la possibilità di importare creazioni da altri sistemi e software si pone come obiettivo che amplifica la creatività degli utenti ed offre un livello di interazione senza precedenti. Tutti gli attuali "Metaverse" offrono a vario livello questa opportunità che può essere poi specializzata per creare giochi, esperimenti e forme artistiche di ogni tipo.

  • Scripting system using software language as Javascript, C#, Go, Swift: direttamente correlata con il precedente punto è l’esigenza di programmare attraverso linguaggi di alto livello l’intero ambiente. C#, Go e Swift sembrano essere dei candidati perfetti anche se la scena è attualmente dominata dal Javascript. E’ fondamentale comunque dare agli sviluppatori l’opzione di creare collegamenti, modificare automaticamente l’ambiente ed interfacciarlo con altri sistemi e piattaforme.

  • Metaverse as protocol not only as API: è abbastanza ovvio pensare che il Metaverse esponga delle API, ma è ancora più importante ipotizzare la creazione di un vero e proprio protocollo che permetta di creare diversi Metaverse tra loro comunicanti. Nel passato ci sono stati diversi tentativi come ad esempio MMOX che tuttavia non è riuscito a superare lo stato di bozza dell’ IETF.

  • Crypto Currency inside Metaverse: perchè non usare direttamente Bitcoin od Ethereum? A discapito di molti annunci ancora nessun Metaverse usa Cripto-valute di qualche tipo per permettere la compravendita tra utenti. Questa caratteristica renderebbe invece la piattaforma unica e soprattutto contribuire a coinvolgere maggiormente l’utente.

  • Decentralized architetture: quasi tutte le piattaforme per mondi virtuali sono basate sulla classica architettura client-server. Passare ad un sistema peer-to-peer avrebbe enormi vantaggi. JanusVR, ad esempio, permette di utilizzare l’incredibile ipfs (Inter-Planetary File System) per il recupero veloce dei diversi "asset".

image_1.png

Implementazione della versione Alfa

Il software è attualmente sviluppato solo e soltanto per piattaforma Windows.

L’attuale sistema Client si basa su SW:

  • Motore Grafico 3D: Unity3D 2017.1.1f01

  • Vedi lista seguente

Tutto il codice lato server si appoggia a servizi e software opensource per Linux Server.

I test sono stati effettuati sul seguente HW VR:

  • HTC Vive 1.2

  • OculusRift CV1

Il repository principale (privato) del progetto è: https://bitbucket.org/enrico_speranza/mayaverse

"MayaVerse is an experimental Metaverse - Immersive Virtual World"

Tutti le attività di sviluppo sono gestite tarmite board Trello (integrata anche come servizio in Bitbucket):

https://trello.com/b/Okn7FpFC/project-mayaverse

Installazione parte Server MayaVerse

La parte Server è composta di diversi servizi che dovrebbero essere installati su macchine diverse. Questo tipo di installazione è necessaria per garantire ridondanza di servizi e per condividere l’eventuale carico tra più server. Nella fase di sviluppo e test tutti i servizi saranno installati su di un’unica macchina su Cloud Computing Digital Ocean fisicamente installata nella Cloud Farm a Francoforte (Germania).

Hazel Main Server

La gestione sulla posizione degli utenti connessi e dell’eventuale movimento di oggetti in-World si ottiene tramite l’uso del server Hazel appositamente creato:

https://github.com/Vytek/HazelTest/tree/master/HazelUDPTestSuperServer

Per creare un servizio/daemon in Linux di Hazel Server vedere il mio tutorial per DarkRiftServer, i concetti di base sono molto simili:

https://github.com/Vytek/VRTK-DarkRift-NetworkTest/wiki/DarkRift-Server-Daemon-on-Linux-Ubuntu-14.04

https://bitbucket.org/enrico_speranza/mayaverse/wiki/Editing%20DarkRift%20Server%20Daemon%20on%20Linux%20Ubuntu%2014.04

Server Voice Mumble Murmur

Per installare il server Mumble Murmur necessario per la comunicazione vocale tra i diversi utenti seguire questi tutorial:

Possibile deploy del Server e Servizi MayaVerse

I diversi Server e Servizi di MayaVerse possono essere anche avviati tramite l’utilizzo di appositi "contenitori" Docker, si veda a questo proposito i link di seguito (WIP).

Deploy parte server tramite Docker

Configurazione Client MayaVerse

La costruzione del Client MayaVerse avviene automaticamente ad ogni aggiornamento del repository principale tramite il sistema Cloud Build di Unity:

image_2.png

Analoga segnalazione viene gestita da BitBucket per ogni commit:

image_3.png

Il binario restituito viene utilizzato per la creazione di un Setup per Windows usando come Installer InnoSetup:

http://www.jrsoftware.org/isinfo.php

https://github.com/jrsoftware/issrc

In "Application_Data" è presente un file .ini di configurazione così formattato:

Parte NetworkConfig:

  • ServerIP = IP del server per il trasferimento posizione oggetti, agent, comandi

  • ServerPort = Porta del server per il trasferimento posizione oggetti, agent, comandi

  • ServerVoiceIP = IP del server Voice (Mumble Murmur)

  • ServerPort = Porte del server Voice (Mumble Murmur)

Parte VoiceAccount:

  • Login = Login per accedere al Server Murmur di Mumble (Evitare "SuperUser" perchè è il login riservato per la gestione dei canali e del server)

  • Password = Password per collegarsi al server (dovrebbe essere cifrata per sicurezza, ma considerando che è una Alfa ;-)

Parte Avatar:

  • AvatarName = Nome dell’Avatar che deve comparire in alto sulla sua testa (WIP)

ATTENZIONE: Gli altri parametri non vengono usati per il momento (WIP)

Se il file non viene configurato, automaticamente ne viene creato uno da Unity Player con una configurazione standard.

Si è scelto comunque di distribuire l’applicazione per gli utenti finali tramite la piattaforma https://itch.io/ così da permettere in piu’ facile aggiornamento delle versioni. In particolare tramite l’utility butler (https://itch.io/docs/butler/) é estremamente facile caricare l’ultimo aggiornamento del client MayaVerse. L’intero sistema di "Continuos Integration" è attualmente semi automatico. È previsto comunque, tramite l’utilizzo del server guglielmofs.duckdns.org, ed abilitando un servizio di webhook messo a disposizione dal cloud di Unity di automatizzare completamente anche il caricamento degli aggiornamenti (vedi: http://www.triplustutorials.be/2016/09/02/share-your-unity-games-url-every-build/).

Caricato tramite MacOSX del lavoro con butler abilitato: https://mayaverse.itch.io/mayaverselowpolyalfa?secret=PmozY9w1UdP99gesOnoAXHsa2oM (Progetto in DRAFT)

Configuration git: Link to file .gitignore

Open source Assets List

Free Assets

Purchased Assets

Tutorial used

English version

This document describes the development and creation of the first Immersive Virtual World. MayaVerse will be a fully immersive computer recreated universe. It will be developed using the best technologies available to overcome the current paradigm of the "Immersive Virtual Worlds" and launch the user in a new vision.

What will be outlined is actually an idea, a project that we hope will soon become a reality. We believe il will be soon a reality, hoping that drawing a plot and describing what are the possibilities will encourage further progress and implementations.

Let's start from the correct definition of "MayaVerse":

3D immersive virtual environment recreated by computer, shared with multiple users over the Internet with a persistent possibility of insertion , modification and deletion of objects and agents and direct interaction through virtual devices. Furthermore programmable through a scripting language.

The above definition only partially clarifies the possibilities offered by a Metaverse. Here, then, is a brief "manifesto" that can detail more the characteristics of the MayaVerse project.

A micro manifesto for the perfect "Metaverse":

  • Immersive Virtual Reality: Immersive Virtual Reality, designed for a sense of "presence" and "interaction" at a high level. One should not think of a simple HMD viewer connected to an environment recreated on the computer, but of a platform that "involves" the user and above all gives him the possibility of interacting with other users, with objects and also with automatic systems or systems guided by Artificial Intelligence.

  • Open Source/Royalty Free protocols, standards, queues: the entire Metaverse source code should be released under Open Source lincense, but above all based on standards and non-proprietary protocols, open and certified by international bodies. Examples are the VRML standards and its evolution X3D which, however, after a period of good diffusion, have been "forgotten" by the IT industry. Recently, Carmack has also underlined this possibility with the creation of an open standard for describing a 3D scene and its transfer through the internet via glTF.

  • Sandboxing User Generated contents In-World/Out-World: the ability to offer users tools for creating and editing any content within the virtualized environment is essential. The ability to import creations from other systems and software is also a goal that amplifies users' creativity and offers an unprecedented level of interaction. All current "Metaverse" offer this opportunity at various levels, which can then be specialized to create games, experiments and artistic forms of all kinds.

  • Scripting system using software language as Javascript, C#, Go, Swift: directly correlated with the previous point is the need to program the entire environment through high-level languages. C#, Go and Swift seem to be perfect candidates even though the scene is currently dominated by Javascript. However, it is essential to give developers the option of creating links, automatically modifying the environment and interfacing it with other systems and platforms.

  • Metaverse as protocol not only as API: it is quite obvious to think that the Metaverse exposes APIs, but it is even more important to assume and design a real protocol that allows different Metaverses to communicate with each other. . In the past, there have been several attempts such as MMOX, which has failed to overcome the draft state of the IETF.

  • Crypto Currency inside Metaverse: Why not use Bitcoin or Ethereum directly? Despite many ads, still no Metaverse uses Crypto-currencies any kind to allow trade between users. This feature would instead make the platform unique and above all would involve the user more closely.

  • Decentralized architectures: Almost all platforms for virtual worlds are based on classic client-server architecture. Moving to a peer-to-peer system would have enormous advantages. JanusVR, for example, allows you to use the incredible ipfs (Inter-Planetary File System) for the fast recovery of different assets.

Implementation of the Alfa version

The software is currently only developed for Windows platform.

The current Client system is based on SW:

  • 3D Graphics Engine: Unity3D 2017.1f03

  • See list below

All server-side code relies on opensource services and software for Linux Server.

The tests were carried out on the following HW VR:

  • HTC Live 1.2

  • OculusRift CV1

The main (private) repository of the project is: https://bitbucket.org/enrico_speranza/mayaverse

"MayaVerse is an experimental Metaverse - Immersive Virtual World"

MayaVerse Server Part Installation

The Server part consists of different services that should be installed on different machines. This type of installation is necessary to ensure redundancy of services and to share any load between several servers. In the development and testing phase, all services will be installed on a single machine on Cloud Computing Digital Ocean physically installed in the Cloud Farm in Frankfurt (Germany).

Hazel Main Server

The position management of the connected users and the possible movement of in-World objects is achieved by using the Hazel server created specifically for this purpose:

https://github.com/Vytek/HazelTest/tree/master/HazelUDPTestSuperServer

To create a service/daemon in Linux from Hazel Server see my tutorial for DarkRiftServer, the basic concepts are very similar:

https://github.com/Vytek/VRTK-DarkRift-NetworkTest/wiki/DarkRift-Server-Daemon-on-Linux-Ubuntu-14.04

Voice Voice Server Mumble Murmur

To install the Mumble Murmur server required for voice communication between different users, follow these tutorials:

Updated