Cubes is a dreamlike virtual space inhabited by melodic, self-organising and responsive cubes. When played with a virtual reality headset the player flies around using the built in head direction sensors. The cubes flock together until the player moves in their vicinity. When this happens, they get 'scared', change colour, make louder noises and fly away from the player.


Cubes is released under a Creative Commons Attribution-NoDerivatives license.

  Cubes for the Oculus Rift [64bit Windows]
  Cubes for a normal monitor [64bit Windows]

Details and Motivation

I began this project with some strong ideas about the kind of virtual reality experience I wanted to create. The features were: passive control, simple but interesting environment, multisensory output, things that look good in 3D, and not too disorienting but still enough movement to be enjoyable.

Passive Control: Using a mouse or keyboard to control motion can be disorienting, as there is an unnatural disconnection between movement in the visual field from proprioceptive and vestibular sensation. This is always going to be a problem, but the move-where-you look system minimises this disconnect, but not so much that it stops being fun to do barrel rolls and loops.

Interesting but simple environment: The cubes swarm, which is interesting to watch. But the swarming is slow and passive - it needed some more behaviour. Originally I intended to design it so the cubes would 'run away' when the player shouted into a microphone, but now I have it so they get 'scared' when you move quickly near them. The more scared they are the more yellow they are, and the louder the noise they make is. Detailed environments are still a bit much for the Rift, the spatial and temporal resolutions are too low, most of the good Oculus experiences are the ones with minimal texturing and bold, plain shapes.

Multisensory output: Sound, movement and colour should be correlated. I was inspired by Greebles and Rez.

Things that look good in 3D: Basically, things spinning and whizzing about in front of your face. This kind of phenomenon happens quite rarely in real life: very few things float and our world is surprisingly flat.

Not too intensely disorienting: Everything need to be slow. If it is fast the experience can be overwhelming in an unpleasant way. This is mostly because of the Rifts difficulties with blurring and lag (which they are fixing). Surprisingly, the lack of a global frame of reference doesn't seem to be too much of a problem.

... and some unexpected but good outcomes: The swarming algorithm uses the Boid rules (I was going to call it Cube-Boids at one point, or even worse, QBoids). One of the rules is "alignment": when near-by cubes face the same direction as each other. The way I coded this, quite unthinkingly, is that not only do they need to move in the same direction, but they must have the same orientation. This leads to the cubes spinning on the axis they are moving along. You can have two swarms (of any size, including one) moving in the same direction but with the cubes in one swarm being rotated about the direction of movement - they look like they are moving in unison, but when they merge they suddenly spin around. The alignment can seem very deliberate and cubes seem full of purpose.