Unboxing and Optimizing for the Oculus Go

--

My Oculus Go arrived this morning at 8am. The delivery man is very scared of my dog.

Cryptovoxels is my virtual world project, where the world is comprised of parcels which are represented as a cryptocollectible, and owned by different people on the Ethereum blockchain. Cryptovoxels parcels are for sale now on OpenSea. Come join our Discord or follow us on twitter to find out more.

I built Cryptovoxels using webvr, so that you can just click a link and be teleported into the world. However, there are some downsides to using javascript and webvr, and so this post is about my experiences of the Oculus Go that I just got to test on, and the ongoing performance work to make Cryptovoxels work beautifully on the Go.

A shrine to Omar Bham

The Oculus Go

First up — the Go is awesome. It’s a wonderfully made, solid feeling (but not too heavy) headset, that works really well over my glasses (once you install the glasses insert), and has nice ergonomics of the hand controller.

Trending AR VR Articles:

1. Augmented Reality Robotics

2. Infographic: The Future of Virtual Reality

3. Mario Kart in a real vehicle with VR!

If you’ve used a 3DOF (non-positional-tracked) headset before, it’s very comfortable. If you’re used to room scale headsets, you might feel a bit weird when you try and move your head from side to side and nothing happens. It’s much better if you keep your head still and just rotate around.

Nice compact packaging

It seems the Go comes without a charged battery, so annoyingly you have to spend the first hour charging it up. It doesn’t come with a USB power brick either. Luckily I have the high current charger for my galaxy s6, so I can charge it with that.

Installation is super easy, you install the Oculus app on your phone, then it connects to the Go over bluetooth, enter your wifi password and it’s done.

Connecting to Cryptovoxels

The first thing that confused me about the Go is that I couldn’t find the browser.

The Browser is no longer under Library, but is front and centre

Instead of the browser being an app in your Library, it’s a tab on the bottom of the screen. Once I worked that out, I typed in the Cryptovoxels URL (www.cryptovoxels.com/play) and warped into the world.

Oh the Performance

I’ve been testing Cryptovoxels on my Gear VR with a Galaxy S6, which is a pretty old phone, so I was excited to find out how much stronger the performance on the Oculus Go was.

The Oculus Go is not much faster than the Galaxy S6.

This surprised me, I assumed because it was a dedicated headset with more room for cooling and a stronger CPU / GPU, that the Go would be much faster. It’s fast, for sure, and the VR experience is awesome, but all the work I was doing on performance on the Galaxy S6 was still relevant for the Oculus Go.

Performance work so far

Mobile performance of Cryptovoxels is really good on my iPhone 7 plus. However, on Android, it’s been a struggle getting good performance. I think this is largely because Javascript single core performance is bad on Android.

So, with lots of hacks, I’ve managed to make the performance acceptable — but I’m still working on it. Here’s what I’ve done so far:

Load less parcels

Previously, we were loading the entire world, even parcels that are far beyond the players view (obscured by fog). We now only load parcels nearby.

Give time for GC

Garbage collection was taking lots of time (we create a lot of garbage while meshing the voxels), so now I have a delay between loading each parcel so that the garbage collector can tidy up as it goes, and you don’t get low frame rates for 20-30 seconds after the parcels have loaded.

Move voxel meshing onto a webworker

I should have done this a long time ago, but I’ll be moving the voxel meshing onto the webworker, and work out a way to serialize the voxels and send them over to the main thread in a ready-to-consume garbage-free format.

Many little tweaks

Disable collision detection on android, tweak the shader, tweak the engine setup, increase texture size, change mipmapping / antialiasing, use oct-trees, depth sort before render. I’ve done over 40 small tweaks on the android branch. Once I have the performance where I need it, I’ll tidy up this branch and hopefully release this week.

Mobile VR as a first class citizen

I see some VR projects treat 3DOF mobile vr headsets as a second-class citizen, with no, or bad support. I want the Oculus Go to be a first-class citizen. I want it to have amazing VR support in cryptovoxels, with fast, fully featured (including building, chatting and interacting with other people in the world) and easy to use.

It’s a wonderful piece of hardware, and such a great way to demo Cryptovoxels without lugging around a rift + gaming laptop.

Cryptovoxels parcels are for sale now on OpenSea. Come join our Discord or follow us on twitter to find out more.

--

--