In VR, Move Like Kung Fury And Not Get Sick

Or, the science of VR’s punching locomotion

Joe Radak
Virtual Reality Pop

--

Admit it, you want to do this in VR.

Breaking from my usual opinion type write up blog things, and decided to write about the design and scientific theory behind a VR locomotion method that I’ve been developing for a few months called “punching locomotion.” If you follow me on twitter, you’ll know this from the proof-of-concept game I made called SUPERPUNCH, which you can download and play at itch.io.

So, some quick background. Punching locomotion started from a prototype DOOM-like arena shooter game I was mucking around with back in December(ish). I was looking for ways to integrate VR locomotion, into gameplay (as you should always do), and after joking with some friends about cheezy action movies being all punches and explosions (You know, like Kung Fury), punching locomotion was born.

I’m about to crack open a bottle of physics, biology and anatomy, so before we begin I’ll give the classic MythBusters warning for this blog.

The Problem

Locomotion systems in VR are limited by multiple variables, the largest being user comfort. Motion sickness is no joke and can greatly ruin a players experience (and day!). As VR designers, we need to make locomotion systems that mesh with our game and don’t make our players sick. For fast-paced action games, this gets bit challenging.

So the problem here is, there was no good fast-paced action-focused locomotion systems for fast-paced action games. And that was the problem I set out to solve, using Unreal Engine 4 and RoboRecall.

Why do we get sicky sicky pukey face?

As I think of it, motion sickness is most contributed to a mismatch of what is seen and felt within the human body’s vestibular system. The vestibular system is in most mammals and contributes to important body functions like sense of balance, spatial orientation and coordinating movement with balance. If your body feels a movement, but doesn’t see any related movement, your vestibular system goes a lil’ whacky.

Seen: Your vestibular system freaking out. (Inside Out, Pixar)

“WHOA, WHAT THE HELL IS GOING ON HERE” is what your vestibular system will yell at your brain, and because of this perceived mismatch, you’ll get the effects of motion sickness — headache, sweating, dizziness, nausea or vomiting. It blows (sometimes literally). Essentially, as I understand it, your body prepares to compensate for motion and forces that aren’t “real.”

However, if your other senses “see” a force, while your body senses it, then it’s all good. This is why sliding motion is generally a no-go in VR. Your “see” movement, and motion that causes a force, but you do not feel action of that force. Your vestibular system freaks out and you may feel ill. Obviously, there is tolerance differences per-person, but we’ll call this a base-case.

Yea, I know that feeling.

Movement through vestibular “blind spots”

When you punch, your body experiences an impulse when the punch “ends,” or when your arm is fully extended for the punch. Impulse is the change of momentum of an object, that is acted upon by a force over an interval of time. It’s a really fancy physics term for basically saying “The force something feels when it rapidly changes velocity” — in this case, your fist/arm going from a high speed to a very not high speed, normally 0. Since your fist is attached to your body (hopefully), your body feels this impulse too.

It’s a force! We can use that! As it turns out, this force that a body feels when it punches the air, is enough to mask a short distance of movement. Your vestibular system runs a check when you punch: “I felt a force, I see the cuase of force. Yup, that all checks out.” — doesn’t make you ill when you actually slide a bit.

The way the punching system works is that it consistently is measuring the velocity of your motion controllers. If they go over a certain threshold speed, the player is then moved, even before the punch is finished. THIS IS IMPORTANT!!! If the movement is initiated AFTER the punch is completed, then the force will have already been felt and you lose what is essentially a vestibular “blind spot” for motion. Moving AFTER the punch is complete, will throw the vestibular system out of whack, and cause the motion sickness.

The movement of the player is dictated by the direction of the punch — this was a rather quick and easy decision as the force vector that is being applied to the body is dictated by the fists, so the movement should match that. Using your head and moving based on the direction your looking would just cause, again, a mismatch with the vestibular system, and thus, motion sickness.

You can see some gameplay of the SUPERPUNCH mod in-action, in Epic Games, RoboRecall, below.

But, even this has a problem!

There is a downside to this system (beyond how tiring it is). It only works on the XY plane. (And since I might’ve just confused a bunch of people, Z is up and always will be dictated as up.) If you introduce Z movement when moving via a punch, you have a problem: The Z component of the impulse of the punch, doesn’t contribute enough “force” to create a blind spot. Ontop of that, things like moving up stairs, ramps or even over small bumps, can cause common motion sickness problems. So, punching locomotion was limited to flat surfaces.

For an action game, that is really, really not good. So, I set out to create a method that is similar to punching locomotion, but for jumping. It had to be motion-sickness free AND fit thematically in with superpunching… more or less.

A short clip of “Super-jumping”

Above is a clip of the current version of super-jumping. Essentially, I consistently check to see if the player is standing, or crouching. This is determined by the height of the HMD from the ground. If the player is crouching, it then tracks the velocity of the HMD, much like we do with the motion controllers for punching. If the Z (or upwards) component of the velocity passes a certain threshold, the player is then instantaneously moved upwards a set distance. (Basically, you’re teleported, but it doesn’t look or feel like it!!!)

Literally, you jump like this. Minus the fall.

Essentially, to jump in the game, you do an exaggerated jump in real-life. Except, in game, it’s SUPER exaggerated. Your head, is basically a fist. The movement you make, is enough to trick you into thinking that you just jumped 20 feet into the air, and not feel any side effects of it.

It’s a work in progress. As I get free time to mess with the system, I’ll post updates on twitter. But for now, thats how I’m tackling VR locomotion. Similar theories and methods could probably be applied to many other methods of locomotion, and I encourage you to try it out yourself.

You can follow me around on twitter @fr0z3nR for other game and VR development shenanigans.

--

--

VR Game Developer Person Thing from planet earth. King of the Snowgoons. NYC-ish area.