Blog

VR Lessons Learned

PAX was amazing, and nothing helps you make your game better than a 100+ player focus test. Some players knew what to expect, others had no idea about the game beforehand, only seeing a chance to try the Oculus Rift. 

 I promised I'd write up an article about some of the techniques I used and things I learned. Most of this is purely anecdotal, but hopefully some people find it useful.

Lesson: Avatar Context Really Is Important

We would ask people how they felt after almost every playtest, mostly because I was terrified that all the spinning and swirling of the game's core combat cycle would be a one-way ticket to barfsville. We even had a trash can conveniently nearby!

It was not a problem for most people. Some players that seemed fine probably experienced that feeling of being "off" later, so I won't pretend we had anywhere near a 100% "success" rate for the VR experience.

But all VR experiences are not created equal. My wife absolutely cannot deal with the Tuscany demo or any first person shooter. But put her in the cockpit of a vehicle and she's fine. Before the Rift was released, we all figured that games where you're sitting down would fare pretty well. This means racing games, flight simulators, and the like. Luckily, Enemy Starfighter falls into this category.

Why? I'm not sure. It may be how movement is handled. FPS movement has been super unrealistic as far back as I can remember, so that probably causes your brain to be challenged when it's fully immersed in the VR experience. You're not expecting to accelerate or decelerate so fast, gently sliding to a stop. All those things that make certain engines feel great for FPSs on a monitor are now your enemy in VR.

I believe that your brain is good at wiring itself to the context of whatever's going on in the headset. It wants to play along! But with that comes certain preconceptions of how movement is supposed to look and feel.  Just don't violate those preconceptions and you'll be fine.

Lesson: Floating UI Is OK...

vr_real_hud.jpg

 ...if you take the time to respect the player's focus. Real fighter pilot telemetry is projected out to infinity. This is incredibly important! It means that your eyes don't constantly have to juggle focus between your target and the UI.

In some of my initial tests with the Rift, this actually contributed to my own VR sickness. My HUD consisted of text and mesh objects that floated above the dash in your ship like you see in so many modern sci-fi movies. But when you wanted to aim at the lead reticle, your eyes would constantly fight to resolve the depth of both the HUD element and the target ship. It felt awful.

So when I went back to implement Rift support for PAX, I did some research. There was a post on the Oculus developer forums stating that humans can't perceive depth (while stationary) past 800m or so. 

So I ended creating text labels (using nGUI), that are projected out into space 2000m from the camera. Then I scaled them up so they would be an appropriate size on screen. Finally, using a shader, they are told to render on top of everything else.

 This actually worked really well. It still becomes a problem when a target ship is REALLY close to your own, but at that point it's so much larger than the HUD element that there's no real fighting going on. The target ship itself just wins focus.

So if you have any sort of floating text or HUD, don't skimp on making this feel correct. It will probably require extra work that you don't want to do, but the results will make for happier players. 

This is the player's fighter, and those HUD elements are about 2km out from the cockpit camera.

This is the player's fighter, and those HUD elements are about 2km out from the cockpit camera.

Lesson: You CAN Manipulate The Camera

There is subtle screen shake on almost every action in the Oculus Rift demo. Shooting, boosting, getting hit, spinning out, and nearby explosions all slightly modify the camera's look vector.

Not a single person mentioned the screen shake. I won't kid myself though. It could have been what contributed to the couple of people that felt off, but I can't be certain unless I have them back for more rigorous testing.

The shake itself is not heavy. Every impulse is less than 0.4 degrees and decays over time. I also do not touch the camera's position during screen shake, only rotation (and even then I leave the roll axis alone). 

I DO manipulate the position of the head based on your ship's current acceleration (angular and linear), but this movement is heavily smoothed.

This transition is surprisingly easy on people's VR experience, even if they're upside down.

This transition is surprisingly easy on people's VR experience, even if they're upside down.

Moving in and out of the map mode controls the camera look vector as well, although only for a second or two. Surprisingly, even transitions like this seem to be fine, if a little fear-inducing.

So what gives? 

In addition to these transitions being short, I think it has to do with the fact that I never fully control the player's look vector. I never presume to completely lock the camera in a direction. When I transform a camera during shake or transitions, I always let the player use his head movement as an offset.

 The TF2 death camera is an example that fully controlled your view, and I can totally see why that would be weird. But in Enemy Starfighter, if you transition to the tactical map and are looking left out of the ship's cockpit, you are looking in that same direction offset from the tactical map camera as it pulls away from your fighter. 

Closing

The main thing I learned is that FPSs and cockpit simulators truly are different beasts in terms of what you can get away with in VR. Don't be afraid to experiment, test, and iterate. As I was working, I knew I had built up a tolerance to a lot of what makes VR seem weird, so I was extremely terrified as I did my first few tests with friends and family. Thankfully, it all worked out.

I've also received some really good feedback from a few people that have heavily worked with VR, and will be iterating on this experience to make it better.

Thanks to everyone who stopped by the booth at PAX!