A Year of Metaverse Lab

A project log for Metaverse Lab

Experiments with Decentralized VR/AR Infrastructure, Neural Networks, and 3D Internet.

alusionalusion 04/02/2016 at 03:210 Comments

Metaverse Engineering

It's the dawn of the virtual age and the first high end virtual reality headsets have begun arriving, delivering a sense of presence for the masses. I have sought to utilize distributed infrastructure- and democratize the best in 3D technology with the maker spirit to help foster a global renaissance moment. It has officially been a year since I began Metaverse Lab and the vision is at last coming to life.

As project logs started to expand beyond average web user attention span, I recently decided to rebuild my website into a hangout place with a panoramic vision wall.

I'm figuring out how to do a mailing system for version controlling room edits. One idea might be to record a ghost of the room edits done inside Janus and then to paste the script somewhere.

I decorated the entire walls with images dropped from Metaverse Lab in a timeline. You can as easy as using Ctrl + drag and dropping from websurfaces. I'm working on various tracking methods for creating a guake style UI for use within Janus. Here's a first early test I made:

The next test will most likely involve leap motion tracking, although I'm in no rush unless suddenly Orion gets Linux support.

room.update = function(delta_time) { 
if (player.hand0_active) { 
    room.objects["cube"].pos.x = player.hand0_pos.x; 
    room.objects["cube"].pos.y = player.hand0_pos.y; 
    room.objects["cube"].pos.z = player.hand0_pos.z;
    room.objects["cube"].xdir.x = player.hand0_xdir.x;
    room.objects["cube"].xdir.y = player.hand0_xdir.y;
    room.objects["cube"].xdir.z = player.hand0_xdir.z;
    room.objects["cube"].ydir.x = player.hand0_ydir.x;
    room.objects["cube"].ydir.y = player.hand0_ydir.y;
    room.objects["cube"].ydir.z = player.hand0_ydir.z;
    room.objects["cube"].zdir.x = player.hand0_zdir.x;
    room.objects["cube"].zdir.y = player.hand0_zdir.y;
    room.objects["cube"].zdir.z = player.hand0_zdir.z;
if (player.hand1_active) {
    room.objects["cube2"].pos.x = player.hand1_pos.x;
    room.objects["cube2"].pos.y = player.hand1_pos.y;
    room.objects["cube2"].pos.z = player.hand1_pos.z;
    room.objects["cube2"].xdir.x = player.hand1_xdir.x;
    room.objects["cube2"].xdir.y = player.hand1_xdir.y;
    room.objects["cube2"].xdir.z = player.hand1_xdir.z;
    room.objects["cube2"].ydir.x = player.hand1_ydir.x;
    room.objects["cube2"].ydir.y = player.hand1_ydir.y;
    room.objects["cube2"].ydir.z = player.hand1_ydir.z;
    room.objects["cube2"].zdir.x = player.hand1_zdir.x;
    room.objects["cube2"].zdir.y = player.hand1_zdir.y;
    room.objects["cube2"].zdir.z = player.hand1_zdir.z;

Further JanusVR JavaScript documentation can be found here:


It also has nearly been a year since I was inspired for project AVALON [Anonymous Virtual Augmented LOcal Networks]. Looking back and reading from April 2015, one is able to see the ideas coming together. This excerpt alludes to the vision that has kept with me over the year:

Everything in this project must be set to scale with the physical world to be effective at delivering its vision. Access into Janus from a browser client is under development. - April 2015

At the time I was referring to SceneVR, a project by Ben Nolan that is now built atop of Mozilla's A-Frame. The fact is, it might be too much for someone to download a program such as Janus because of the average attention span of a web user.

A webVR developer to keep an eye on is Bai, a talented Javascript programmer and creator of the elation engine, a JS game engine with Oculus Rift support for interacting with Janus worlds from any web browser. Here I am testing the Project Tango scan of my old apartment in WebVR. Link to project log

It has proved to work nicely in both Firefox and Chromium.

The data is there for adding in the missing features from Janus. After all the bugs are sorted, version 1.0 will bring with it network capabilities (such as with the default server) and voice/text.


Bai is so cool so he created a beautiful data visualization from recursively crawling and mapping every portal inside JanusVR. Because every node represents a link, he says he has plans to implement this as a UI for navigating the Metaverse.

Link to full album:
Release 49.45 brought with it equi render mode, enabling a 360 view inside JanusVR which makes can then be viewed by Cardboard / GearVR more easily.

Vimeo has been very slow to acknowledge 360 video support but atleast the video can be downloaded to a headset:

I will create a YouTube and Vrideo channel for hosting videos exported from experiments. Hackaday supports embedding of YouTube videos but not vrideo: I'll update this later with a youtube link.

[+] AVALON [+]

Decentralized Infrastructure for the 3D Internet

Link to past project logs:

Various prototypes of AVALON: Anonymous Virtual Augmented Local Networks

Distributing this signal is going to combine clever engineering and economics. My processes have evolved with Moore's Law to create smaller and cheaper portals (zsun / esp8266).

The multiserver is next being rewritten in python, bringing networking support to OpenWRT devices. Since Python is already be installed on many devices I wrote an autostart script:

#!/bin/sh /etc/rc.common
# Start the Janus Multiserver
start() {
        sleep 5
        echo "Janus Multiserver started"
        cd /opt/server/
        python &

After that, chmod +x the file and /etc/init.d/script enable so that it runs at boot time. After that, multiplayer should be enabled with your portal:

The meshing features for piratebox can be found here:

I'm using a customized OpenWrt for the Gl-Inet from here:

I uploaded a couple of avatars with the advanced uploader (multiple files) and then pulled the links into my userid.txt file (found in janusvr settings folder).

All of this is possible to do from JanusVR:

What cooler way to celebrate 1 year of Metaverse Lab than a HACKER ART SHOW IN LA?!

to be continued