24th March 2015

Icaros VR prototype - Hyve, Munich

I originally met the guys from Hyve at the Next 14 conference in Berlin when I showed them an early version of the Oculus Skydive.

Johannes Scholl and Michael Schmidt had a great idea for a device that is part exercise equipment, part game controller and they wanted to build a prototype to see how well it could work. Here is one of Johannes’ early concept renders. Concept render of Icaros

First prototype

After a while, they had managed to build an initial hardware prototype and I went Hyve’s office in Munich to try it out. Icaros prototype 1 It’s surprisingly easy to get onto and you move by just shifting your body weight. After a few minutes you can tell it’s giving you a work-out!

I took some measurements and realised I could use a similar system to the DK2 Skydive where gyroscope data is sent from an iPhone app via UDP socket directly to Unity.

I created a rough landscape and flight simulator and went back to Munich to test. You moved at a constant speed forwards, tilting up and down controlled vertical direction, and rolling left and right created banked yaw turns like an aeroplane. The iPhone app worked well and Hyve had 3d-printed an iPhone holder to attach to the side of the Icaros. Icaros prototype 1 It was quite hard to control though and it was clear at this stage that the scale of the original environment wasn’t helping. There wasn’t a lot of detail and you had to be travelling very fast to get a sense of speed. That high speed then meant turning was hard and it was easy to get into drifts and spins.

Second prototype

Based on the testing I came up with some recommendations for a second prototype which would have some wind sound, a new environment and improvements to the physics engine.

Customisable physics engine

I live in London and with the only Icaros prototype being in Munich, we had to find a way to easily tweak the properties of the physics engine without me being there or new builds needing to be sent. I created a 2d menu using Unity’s new UI system that exposed all the numbers used in the simulation and allowed them to be updated in-game using a keyboard or gamepad. It works like a TV settings screen and also allows for custom presets to be loaded and saved.

Icaros settings menu

I added variable thrust control using a gamepad analog trigger which gives the player much more control and the ability to land on ledges. Also if the player is going to crash at high speed into the terrain I fade the view to black and reset their position.

New environment

This was by far the most difficult thing to get right. The first version just used Unity’s built-in terrain system, but for this next prototype I wanted something more realistic and detailed. I used TerrainComposer to create a new terrain procedurally using Perlin noise maps and RTP to improve the look of the terrain maps.


Having large terrains and getting good framerates in VR is quite a challenge, and as soon as I added a few trees using the default terrain system, the frame rate dropped to unacceptable levels and the billboarded trees looked very fake.

In the end, I exported the terrain to meshes and created a geometry shader that replaced each vertex with a cross-style billboard that didn’t rotate to the camera. I added some options to create variation in the tree colour and size and set limits on placement based on height and steepness. While probably not the long-term solution, it got the framerate back up to 75fps and meant I could have thousands of trees creating small forests.


Hyve wanted to show some information about how fast you were going, direction and altitude. While Head-up displays aren’t generally recommended in VR applications, in this instance it worked very well. This was again built using Unity’s new UI system.

Next Steps

So far only a few weeks have been spent creating content for the Icaros, but it’s clear that it’s a fun (and exercising) platform. Hyve have now created a website to promote the Icaros and are exploring options for further funding so watch this space!

comments powered by Disqus