In the original Ocean Rift demo I essentially had a bunch of models with a looping animation moving around underwater. This was a great proof of concept but once I added the ability for the player to swim the illusion was reduced; the animals were basically just models moving around on rails after all.
Early this year I joined Samsung and Oculus VR’s Gear VR initiative to develop Ocean Rift for their (incredible) mobile device. The project has been immensely challenging in many ways, and it has led me to develop a generalised animation system for aquatic animals. The primary reason for development was aesthetical; as mentioned, I wanted these creatures to behave as realistically as possible—but arguably procedural animation offers several advantages for mobile devices. While the CPU overhead of animating something procedurally is probably greater than moving through a simple blend tree, it can be very fast if there’s no physical simulation taking place, and there’s no memory overhead in storing animation clips for each animal. The motion and behavioural space is also inherently limitless, as everything is calculated on the fly.
The first animation system I developed for Ocean Rift was a sea snake. Previous experiments in creating and animating the giant Hell Worm monster from Crashland (described in this blog post) had led me to produce many prototypical animation systems, including one based on snake ambulation. Applying this to a sea snake model and linking it to a rudimentary AI, that pulsed waves through the virtual muscles, generated some quite convincing animation as you can see below:
The key thing here is that the snake’s animation will always appear reasonably plausible because its joints are always moving in a continuous smooth pattern. Provided that you extrapolate a decent movement vector from this animation it can look very convincing as something physically swimming around.
Extending this system to a shark required the addition of other scripts that controlled various functions of the body such as the fins, tail, and jaws. In the following video, the parameters that drive the shark’s behaviour are randomised every few seconds. You should notice that sometimes this leads to very erratic motion of the creature; this is essentially due to the animal moving it’s backbone at a high frequency. However, perceptually you see an agitated great white shark exhibiting behaviour very similar to what we find in nature.
As the animation system became more advanced, I’ve been able to animate and produce increasingly elaborate and complex behaviours. For example the following footage shows an early prototype Kronosaur (now extinct) swimming around, doing barrel rolls and snapping at invisible targets.
Fun fact: Adult Kronosaurs were 10 meters in length, about the same size as a bus.
However, currently the most complex animation system developed for Ocean Rift is exhibited by the dolphins. Being the most excitable, acrobatic and friendly aquatic creatures they also represent the biggest animation challenge.
At first the dolphins are distant creatures swimming around but eventually they start to investigate and interact with me. You will also see them exhibit a variety of behaviours that are totally emergent like twisting, twirling and diving. The cool thing is this encounter will be completely different every time.
The ability to bring virtual creatures to life has always been of great interest to me, and with the advent of VR I can now actually meet and interact with them in the virtual world which is immensely exciting. This industry is in its absolute infancy but it’s going to be really fascinating to see how it develops over the coming years, and just how far procedural animations systems like this can be taken to give the player totally unique and evocative experiences.