Here are some things I think aren't considered often enough when it comes to VR development:
IMMERSION IS EVERYTHING
Immersion is the killer feature of VR. Whisking someone away is amazing. Protect this at all costs.
- It's very easy to break immersion. It's very easy to forget this as a developer, especially when you are in the guts of the game every day.
- With great power comes great responsibility. Immersed players can be frightened, excited, etc., much more easily. Don't over do it. Nobody wants to be "the first person to kill grandma in VR." Be subtle in your art. Stop putting spiders on people's faces.
- The upside to this is that it is also easier to delight users! Make them connect with characters. Feel the mechanics. Visceral joys are within your reach much more than ever before.
- Don't violate the fidelity contract.
This is the idea (originally described by Dr. Kimberly Voll) that you set up a contract with your user whenever you design something. You and the user agree on certain terms that you set forth:
Yes, barrels painted red always explode. Yes, there is physics to play with. Yes, you can explore freely in this area.
This is the framework that the player holds in their head while immersing themselves into a product. If you violate any of these expectations - if you change the fidelity of the experience unexpectedly - you break the contract, and your players get frustrated or stop caring about the experience.
Level 2 contains red barrels that don't explode inexplicably. You shoot at a beer bottle and it doesn't move. Invisible fences unexpectedly halt your exploration.
Find your level of fidelity, identify it, and adhere to it at all costs.
Paint those barrels green. Replace the beer-bottle with an anvil. Place a cliff-face instead of an invisible fence.
Here are some common violations I see in VR:
- If you can pick up some objects, make sure the player can pick up and throw all objects. Make sure there is a good in-universe-reason for not being able to throw everything away. Literally bolt things down if you need to. "The player really needs that item" isn't a good enough reason!
- If hands collide with things, apply sounds and haptics to those interactions. Try to make everything have a unique sound when tapped.
- If you model arms, make sure they are always in the same position as the players IRL arms. Particularly when rotating wrists. If my elbows don't line up with my avatars elbows, I start feeling like I'm inhabiting a puppet instead of playing myself.
- If you put a piano as a piece of set decoration in your game, make sure you can play great balls of fire on it. Likewise, make sure that any button is pressable, any switch is flippable, and any keyboard is typable.
VR is different here than flat-games. It used to be fine to put a piano into an FPS, because players lacked the requisite fidelity to play - you usually only have a gun, or at best a clumsy "E to Use" button. Nobody expected to be able to reach out and touch the instrument. If you model hands, it makes sense that you'd be able to play a tune on the piano. It's the expected consequence of having hands near a piano. It's the fidelity contract.
"The obvious solution is to not include a piano in the first place. Or if you must, close the lid over the keys. And bolt the lid down." - Valve
The fidelity contract is so key that a single violation - even if that's just a feature not working 2% of the time, or an IK rig not behaving in extreme circumstances - is enough to ruin the immersion for the whole experience. You need to conform to the fidelity contract as much as you should be hitting framerate.
Getting motion sick is unpleasant, and it gives the VR industry as a whole a bad rap. The more motion-sickness-inducing games launch, the longer it'll take for the industry to really take off.
Some people get their "VR legs." For others it gets worse the more they use VR. If your game induces motion sickness, you are taking a very big gamble that some big chunk of your audience will get sick. "It's fine for me and my team" isn't good enough - do some playtests with VR virgins and see what your response is like. Consider putting a motion-sensitive person on your team to be the canary in your coal mine.
I have not yet seen a sickness-inducing-game succeed commercially. Some high-profile AAA bad-examples have even dramatically flopped in this space. Tread carefully!
Here are some methods of locomotion roughly ordered from best to worst:
- Do not move the player at all. Let them locomote themselves by moving about their IRL space. Think of ways you can cleverly use this - put an elevator in the corner of the room that players can use to move around in. Make the entire room a vehicle the player can explore with. Fill the room with densely packed items to make exploration of the smaller space a thing.
- If you are going to implement teleportation, consider using "area based teleports" instead of position-focused teleports. Owlchemy Labs has done a good job of detailing why this is a very good idea for gameplay and player orientation reasons.
- Positional teleportation is the next best thing and is becoming fairly standard. Try to keep it quick (a single black frame interstitial) without messing with the player's vision. The downside to teleportation is players often feel disoriented at their destination, not knowing exactly where they warped to - particularly if they warp up against surfaces with no textures and don't realize they are staring into a blank wall. Open spaces with clear landmarks help with disorientation. Unless you have a very clever system in place (eg: Budget Cuts), don't rotate the player on teleport or you'll make this worse.
- Dash mechanics (teleport, but with an interstitial "zoom" view) runs a risk of having people "fall over" as they try to brace themselves for the sudden start and stop. You can mitigate this by only dashing in the direction of view (don't let someone look "sideways"), not accelerating (instantly start moving the player at the target velocity), and limiting field of view. Even when done right this can still make people sick, though!
- Drifting (constant motion in a particular direction) can work if you keep it slow, reduce field of view, and don't accelerate the player. The faster you go the worse this can be. It's difficult to mitigate the negative effects of this, but some zero-G games where you can propel yourself with physical action ("climbing" or "throwing" yourself with your hands) seems to reduce some of the sickness effects here but doesn't completely eliminate them. Anecdotally, drifting horizontally (forward/backwards and side to side) seems to induce less sickness than up/down motion.
- Direct joystick control over locomotion, like a flat FPS game, is almost guaranteed a bad idea. I'm getting sick just thinking about it. I have not seen an implementation of this that works, and most games that try this also implement head-bob which is a terrible idea. Don't do this.
- Humans can't handle acceleration in VR. Vehicles tend to universally be "all about acceleration" (particularly when you consider that "turning" is defined as a continuous act of acceleration). The only way I've seen vehicles work is if they are on a very stable course (think: a train that only goes straight), or those with very limited visibility (you are in a spaceship that only has a tiny porthole to look out of). Bad idea: cars. Worse: Giant glass-bubble helicopter cockpits. Worst: Roller coasters.
- Worse than a big glass-bubble cockpit? FLYING! Being a bird is just an airplane without the helpful cockpit doodads to keep your inner-ear anchored. Ubisoft's Eagle Flight did an amazing job of keeping this as sickness-free as possible, but they had a huge ton of tricks in their bag. If you want to emulate flight, you must use every single visual trick Ubisoft did!
- The absolute worst thing you can do is to rotate the player's viewpoint. This means a banking aircraft, mirror's-edge style rolls, and other such camera tricks are particularly nauseating. To mitigate these effects, make sure there are stable anchor points in the player's sight-lines - dashboards, large cockpit structures, etc., but if you can - avoid this entirely.
You can do some clever physical tricks (requiring the player to "jog on the spot" to move for example) that have had some success at reducing motion sickness, but nothing so far seems to completely eliminate it.
Yes, I realize that non-natural motion may be required for your design. If so, that's unfortunate! Just know that there are design ideas out there that don't require non-natural motion. Yep, they're harder to think of and execute on - decades of availability bias have been training us to design open spaces and fast moving vehicles. You might have to dig deep to find something that resonates that doesn't require this stuff! Frankly, this design challenge is why I'm so excited about working in VR. Do something new! Challenge yourself!
But if you must stick to non-natural-motion - at least try to mitigate it, and prepare your studio for the potential of decreased sales and/or bad press.
A lot of people dismiss accessibility out-of-hand because they pereceive the less-able market to be too small to be worth considering. Other than just being a shitty attitude, it also makes your game much less resiliant to non-human-change: batteries die. Players don't always have tracking near the ground. Some play seated. By making your game nicely accessible, your game becomes quite resiliant, and something to be proud of to boot.
- If possible, make everything work with a single hand. Duplicate controls, create secret shortcut functions if you must. If you can pull this off, this not only helps those with less-than-two-hands, but also helps survive a hand-battery dying, or holding an important beer while playing.
- Playtest with shorter humans, taller humans, and seated humans. This is good for general accessibility, but it's also easy to annoy taller players when all the controls require awkward stooping, or shorter humans being unable to see a countertop. Consider automating object placement based on player height. If you do this you might find that your game is suddenly playable by those in wheelchairs, too.
- Playtest with larger play spaces, standing-only play spaces, and seated play-spaces. Consider automating object placement based on player room sizes.
- Giving players grabby-claw-tools or tractor-beam-hands not only helps with the less-mobile, but also makes your game much more resiliant to smaller play spaces or seated play.
- Playtest with people that can't reach the ground, either because of physical body restrictions or playspace restrictions (many players have excellent tracking, just not below the knees, thanks to furniture or room setup).
- Don't count on every user to have their headphones on, or the ability to hear in the first place. Make sure you double up on your attention cues with visual details.
- Consider adding a "rotate in place" button that shifts your camera in 45 degree increments (instantly). This may resolve some issues with less-able, seated, or bad-tracking-area players. Try not to make this a primary requirement of the game though - this can be disorienting if over-used.
- If you ask me to put something on my head in VR, make sure my head will fit inside the item.
- Don't spawn any part of me (not even my body) inside of geometry.
- Don't require the player to intersect geometry to play the game.
- Don't encourage players to intersect geometry by giving them X-Ray vision when they stick their head inside of walls intentionally.
- Make sure the player's IRL floor lines up with your virtual floor. This probably means you can't have stairs or ramps in your world.
- Don't assume players will know where to look. Most will look the wrong way, and won't look or move around to see your cues. Place everything of note ahead of the player's current sightline. You might have to move it as they move their heads.
- Use audio cues for everything. Properly spatialize it so players know where the sound is coming from.
- Make sure your content faces "forward" primarily. Fully tracked 3D spaces are nice, but there is still a primary direction that roughly lines up with where their HMD cable trails to, making it naturally more comfortable to face one particular way.
- The higher the FPS, the better the experience. Aim for the maximum possible FPS (120 on PS VR, 90 most others). Never, ever, drop below this rate if there's anything up other than a blank display. Not even on a loading screen. This may mean you need to double down on your threading and disk I/O programming chops. Garbage Collection is your enemy.
- Test on minspec gear to make sure you are hitting max framerate on that gear. You will probably fail at this the first few times you try. Get good at profiling.
- Don't use screenshake.
- If you can, make your game playable with a single button. Use the built-in-verbs that humans already have: "grab". Make everything in your world grabbable.
- Collect community feedback in a way that is easily accessible to the end user.
- Mirroring a first-person-view to a nearby TV is a good way to make spectators sick. Use a smoothed camera!
- If you heavily use flat-game-style 2D UIs, you aren't really thinking through the potential of VR. Go do ten pushups and try again.
- How about try making something without guns? That could be cool. Totally unsaturated marketplace.
This is one of a handful of VR advice pages I've written. Check out the index for more.