Some more thoughts about grounding

Last time, I wrote about my first attempts to make hand walking in Biped Blocks accessible to more people by reducing the disconnect between the motion of the player and of the VR world. In this post, I'm going to get more technical. I'll try to give my view on the problem, and describe how I came up with the four visual options that I implemented in Biped Blocks.

The Problem

Hand walking allows you to move seamlessly through a big VR world without having to physically go the same distance in your room and bump into things. The price that you pay for this freedom is that the VR world has to be able to move in relation to physical space. Moving through the virtual world while actually standing still contradicts our physical experience, since it's not accompanied by any signals from the vestibular system (our sense of balance).

Apparently, some people are more sensitive to this kind of thing than others, and I believe that this is the main cause of discomfort with hand walking for some people.

Can we fix the problem without getting rid of the hand walking mechanics altogether? It seems like the result will have to be some kind of compromise. But maybe it would feel more comfortable if when the player moves his hands (but not his head), we can strengthen the impression that it is the world moving and not the player.

Getting Perceptual

I watched an interesting talk about motion sickness and other things, by Richard Yao who is a perceptual psychologist working at Oculus. He also refered to the Oculus Best Practices Guide, which has some interesting things to say about the subject (although it seems to have been written before motion controls were a thing for Oculus). Between them, they have some interesting points that indicate that hand walking is doing a number of things right to avoid motion sickness:
  • The vestibular system can't tell the difference between linear motion and standing still. What we need to worry about is acceleration in the virtual world that doesn't correspond to physical acceleration of the player.
  • The advice is to keep virtual accelerations to as short time periods as possible - which fits well with jumping and landing.
  • The Best Practices Guide doesn't say so explicitly, but my guess is that the modest and constant acceleration of gravity while in a jump (I use 9.81 m/s²) is not as bad as more irregular accelerations.
  • The risk of motion sickness is reduced by keeping the player in control. I think that hand walking does this pretty well by responding predictably to the actions of the player.
  • Richard Yao also talks about optic flow, the motion in the visual field as seen on the retina. Textured surfaces provide strong optic flow, while the smooth shaded surfaces that I'm currently using provide much less optic flow during motion, which should help lessen the conflict between the senses.
Still, it doesn't seem to be enough for everyone. The holy grail would be if we could make the lower levels of the brain believe that the physical and virtual motions of the player match up, even as the VR program is manipulating the player's motion in the virtual world (but not the physical!).

Choosing an Approach

Another thing that Richard Yao mentions is providing a stationary frame of reference. One experiment that they had done was to add a player-fixed skybox while a player was moving around in a virtual landscape. This was reported to help, but as he notes, it's not always possible to see the sky, and you can't let the skybox shine through things that are in front of it without causing even more visual confusion.

So far, I had a few ideas for a solution:
  • Experiment with different ways to provide a stationary frame of reference.
  • Make a world that makes it physically clear when you are moving it instead of moving yourself through it, e.g. moving the world would cause loose objects to tumble, trees to bend, etc...
  • Make a world where you only move a small part of it at a time, maybe the rest catches up eventually.
The second and third options seemed a bit radical, so I decided to try the first one, which I could implement in Biped Blocks.

Let's call this idea of providing something visual that can act as a stationary frame of reference grounding. The grounding should provide visual components with low optic flow and reasonably strong texture (to give more weight against the world's motion), while blending well into the scene and not being too distracting. How can we do that? Will it help?

First version - 3d texture (option #4)

So I started thinking about how I could adapt this concept to cases when you can't see the sky. My first idea was to add a 3d texture to the world that would be fixed to the physical space. I made a simple 3d grid texture with a component for each axis as f(x)*f(y)*f(z).

Trying this, I quickly realized that when moving towards or away from a surface, perpendicular components would only add flicker and not produce any stable features. So I made the components weaker the more of their variation was perpendicular to the surface being textured.


This works ok, I think. I feel like it provides some grounding. The effect is a little weird though, it's a bit like watching a shifting pattern of illumination play across the landscape when you move. And that's not really an interpretation that would cause you to believe that the pattern is stationary while the world is moving, which might be a problem.

Second version - 2d texture (option #3)

Visually, there was also another problem with the first idea. The way that the pattern shifts on surfaces that don't align very well with the coordinate axes is pretty confusing.

I made a second variation where I put a 2d grid on each surface, aligned to the corresponding box. The grid would be fixed to the physical space, but wouldn't be affected by movement towards or away from the surface. It's hard to do anything about the perpendicular direction, but hopefully it shouldn't matter as much, since motion parallel to a surface should contribute the most of the optic flow.


This version got rid of the confusing effects on non-axis-aligned surfaces, but it also lost the continuity of pattern between surfaces. Overall, I think it's a net positive. Still, the whole concept of putting a texture that is fixed to the physical space on surfaces in the virtual space turns out to feel a bit artificial.

Third version - reflections (option #1)

Considering just what should happen when keeping my head still while moving around in the VR world, I needed a visual pattern that would stay in place even though the surface it was on was moving. Thinking more about this concept, I realized that it is pretty close to how a reflection of e.g. the sky behaves. But instead of reflecting the sky, I would make my surfaces reflect something that was fixed to the physical space. I would only make these fixed features show up in reflections, so that they wouldn't interfere too much with the impression of the world itself.

The simplest thing that I could think of to show in a reflection was a plane (with a grid on it) parallel to the corresponding surface. Since this ghost plane had to be fixed to the physical space, I would position it just outside of the physical play area. This way, whenever the reflection was visible, I could be sure that it would appear to lie behind the reflecting surface, not in front of it.


Now reflections are a bit tricky when a surface starts to move while reflecting a static object. As long as motion is parallel to the surface, the reflected object appears to stand still. But when the surface starts to move perpendicular to its own plane, the reflection appears to move as well, at twice the speed.

Maybe our visual systems are so used to how reflections work that they will immediately pick up on that the reflected object is actually stationary and it's just the reflector that is moving. Or maybe the apparent motion still contributes to our perception of self-motion. Either way, my hope is the same as with the first idea; that motion in this direction should be least important since it doesn't contribute so much to optic flow.

I like this third version pretty well. Putting the stationary frame of reference in the reflections feels a lot less artificial than putting it on the surfaces themselves. Perhaps it's because our brains are used to not fully understanding reflections. It felt best when I didn't make the reflections too strong, so that I would get a perception of both a surface itself and the plane that it was reflecting.

Fourth version - reflecting the room (option #2)

What else could I reflect, except for parallel planes? One idea I had was to reflect the walls of the physical room, as given by the box that the player is allowed to move in. I wouldn't want to draw the walls directly, since even if they would probably provide good grounding, they would hide anything that was more than one to two meters from the player. But I could draw their reflections.

How would I make sure to only draw reflections that appeared to be behind the reflecting surface? Before, the thing to be reflected was always in front of the surface, but the walls of the physical space could very well pass through the surface. I decided to only draw reflections on the part of a surface that was inside the physical room's box, and fade them out as I was getting close to the boundaries.

The first problem was that there would only be a very limited part of the scene that would show any reflections. This part would be close to me, typically closer than where I would like to put my focus. It wasn't providing much grounding simply because I couldn't see it much.

So I extended the room that would be reflected to be much longer and wider. This meant that I got a lot more reflections, and at a greater distance. I didn't make the room higher, as that makes reflections in the floor seem to be much further down, which felt a bit uncomfortable.


So reflections in this case still don't cover quite enough surfaces. Especially when climbing upwards, the next place where you want to put your hand is often in a place with few visible reflections. Also, seeing the reflection of a whole box-shaped room in single surface can be a bit too distracting.

What do you think?

Do you have a Vive/Rift/similar headset and want to try it out? Then please find Biped Blocks in the downloads section. It would be great if you would let me know how the grounding works for you by posting a comment on my last post. Do you have other ideas for grounding? Then please let me know!

Comments

Popular posts from this blog

Climbing outside the box

Walking (and jumping) on your hands in VR

Can I make hand walking accessible to more people?