Yeah, I’ve read that PDF and integrated a lot of its research into the game we’re building. I’m glad to see that a lot of my acquired VR knowledge is verified and validated by this documentation. The exciting part is that I think our two person team has also pushed the boundaries of knowledge a bit and innovated a tad.
I know a lot of this is new and we’re all pioneering the tech. With that in mind, I have a small critique. The PDF only goes on to explain the correlated empirical evidence gathered during motion sickness. They say “X” was happening when “Y” experienced motion sickness. I think the underlying cause / theory behind why someone experienced motion sickness is a shallow explanation and leaves a lot of room for discoveries to be made. We all know that acceleration causes motion sickness and the documentation hypothesizes that it has to do with our vestibular systems. Above, I propose a slightly improved hypothesis which explains all of the existing phenomena, gives additional context on underlying causes, and progresses our understanding of motion sickness while offering up ways to carefully account for these uncomfortable experiences. It’s a working hypothesis which seems to be fruitful for me, but I’d be happy to get consensus or hear an even better one
I think maybe I can explain this in a slightly more mathematical way if that helps people understand what I’m trying to say:
Assume that the players HMD is initially located at position [0,0,0] with an orientation looking straight down the X axis [1,0,0], with a velocity of [0,0,0] and an acceleration of [0,0,0], at Time 0.
In real time, at some time position, Time 0+dt, the human brain is trying to predict its future position based on its perceived velocity. When velocity is [0,0,0], this is trivial for our brain to predict. This delta time is not a delta time within our game world, it’s a delta time in our real world. We’ll call it ‘brain delta time’, or bDt, and our game delta time is just simply ‘dt’. bDt != dt. bDt varies by person. bDt is the smallest perceivable increment of time we can subconsciously detect. bDt may not be constant over time (ie, tiredness and alcohol may have an effect on it) and varies by person.
If we change our velocity to [1,0,0], our position will be Pos += velocity * dt; After 1 second, we’re positioned at [1,0,0]. Our brains aren’t exact measuring devices, so it may perceive the movement speed to an approximation of our actual speed (~0.95f -> ~1.05f). At the instant of movement, our brains begin trying to calibrate our movement speed to a high degree of precision as fast as it can (it helped us evolutionary to run away from lions).
[brainPos] += [brainVel] * bDt;
We know where we’re going to be before we get there. There is a ‘time to calibrate’ for our brains. This is the small slice of time it takes our brain to precisely nail down our velocity (varies by person, by age, and intoxication levels)
[brainPos] != Pos
The delta between [brain Pos] and [Pos] becomes imperceptibly small and unnoticeable as the brain is able to calibrate its sense for velocity against its actual velocity. I’m sure someone could conduct a scientific study to find some population normalized epsilon value which causes motion sickness and discomfort in people, but that’s beyond my scope and resources.
When we set our acceleration to [1,0,0], we begin to get into trouble. Our brains aren’t so good at determining acceleration forces. It can sense velocity to a pretty high precision, but velocity is changing over time.
Velocity += Acceleration * dt;
Position += Velocity * dt;
It takes our brains longer to calibrate our sense of velocity when acceleration is involved. But it can eventually do it. The epsilon error between [brainPos] == [Pos] is much greater and becomes noticeable.
When [brainPos] != [Pos], our brains will unconsciously create a ‘correction’ vector. CorrectionVector = [Pos] - [brainPos];
Epsilon is the distance of this correction vector. Our brains don’t do discontinuous movement, so it will ‘slide’ our brain position along the correction vector over bDt (similar to lerping). The greater the magnitude of CorrectionVector, the more motion sick we feel. The duration for this correction is short, but if the correction is being done constantly, we accrue nausea and the sense of motion sickness gets worse and worse over time.
If you add in ‘surge’, or a change in acceleration over time, we are almost guaranteed to get sick. Surge is a change in acceleration over time (ie, applying jump jets to a flying mech over time).
Surge = [1,0,0]
Acceleration += Surge * dt;
Velocity += Acceleration * dt;
Position += Velocity * dt;
With surge applied, our brains ‘correction vector’ is going all over the place. It’ll look like a compass needle hovering over a wobbly magnet. Our brain will never be able to calibrate its velocity, so it can never predict where it will be at any point in time. This is just not something our brains have needed an evolutionary adaptation to, so accounting for surge is beyond our predictive capabilities. We’d be constantly performing positional corrections, and that causes us to get sick very quickly.
So, bottom line: To reduce motion sickness, you need to let players predict their spatial position to a high degree of accuracy. Your aim should be correction vectors which have very small lengths and occur very infrequently. This needs to account for variation in populations, such that the lowest common denominator doesn’t get motion sick. This is why the recommended ‘walk’ speed is at 1.4m / sec. The recommendation for instantaneous constant movement attempts to minimize the correction vector duration. However, you’re not restricted from using acceleration – the caveat is that players MUST be able to predict their position at all times when accelerating. Let the player control their acceleration rate. Example:
I accidentally created an interesting demo. You are a severed head floating in the air. By moving your head forward, back, side to side, you change your heads acceleration in the respective direction. When you pitch / roll your head, you change your orientation. Because the acceleration was controlled by your own head movements and because it was gradual, it was surprisingly comfortable and usable. I didn’t get sick and neither did my coworker (though, more testing may be required). This was a pleasant surprise which contradicts the widely accepted “acceleration => sick” rule.