• 3D
  • How to Reduce Motion Sickness with a First-Person (or Third Person) Character Controller?

I've just started learning 3D and I'm having trouble testing my project due motion sickness. I used Garbaj's First Person Character Tutorial and I feel sick just walking around with it. The same thing happened with Tutemic's Code Architecture Course though it wasn't as bad (possibly because I moved around way less).

Some personal background with motion sickness: Games don't usually give me motion sickness. I can't read in a car without getting sick but I'm okay on a plane or a train. I'm also a console player, so maybe the mouse/keyboard move on a screen in front of my face is a factor, but I've played some first person games on this PC recently enough without trouble.

Searching around the internet, here are some of the causes that are possible factors: low frame rate (My laptop is no graphics powerhouse. It has 8 G of ram and just whatever Intel graphics card it came with. I wonder if this problem could be solved by better hardware--that I want an excuse to buy anyway.) jitter (Not as sure about this, seeing as my refresh rate is 60hz, but it seems worth mentioning.) mouse sensitivity (Things seemed a tad better when I changed the mouse_sensitivity from 0.03 to 0.02 in the Garbaj controller, but I was already sick so I can't really judge it) fov (Increasing this might have helped) * tilt and pan too abrupt (So, just like you'd add acceleration/deceleration to player movement, maybe I should look into lerping/slerping camera rotations on the x and y axes?)

This is an unusual problem for me because I can't just experiment and debug when it makes me nauseous just playing the scene :sweat_smile:. I am looking at some open source character controllers to see if any suit me better. Also, so many of the results are about VR if you try and search for motion sickness and game design.

Thanks in advance. I really appreciate it!

Yes the listed points could all be factors. Hard to judge as third person though.

The default Camera FOV is a bit low – try increasing it to 75 (this will be the default in 4.0). A perfect match with 90° horizontal FOV used by many games would be ~73.74 since Godot uses vertical FOV notation by default.

jitter (Not as sure about this, seeing as my refresh rate is 60hz, but it seems worth mentioning.)

Install, enable and configure lawnjelly's smoothing add-on to benefit from physics interpolation.

tilt and pan too abrupt (So, just like you'd add acceleration/deceleration to player movement, maybe I should look into lerping/slerping camera rotations on the x and y axes?)

This should generally not be done because it adds latency, except to punish the player :)

I was able to fix jitter by always setting the physics framerate to a multiple of the render framerate. For example, if I target 40FPS, the physics framerate becomes 80. I choose the physics framerate using the lowest multiple of the render framerate that is above 60.

Thanks for the responses. I'll try these things out today :grin:

@Dschoonmaker said: I was able to fix jitter by always setting the physics framerate to a multiple of the render framerate. For example, if I target 40FPS, the physics framerate becomes 80. I choose the physics framerate using the lowest multiple of the render framerate that is above 60.

As a side note, it's generally not recommended to set a target framerate that isn't a divisor of the monitor refresh rate. This is because the rendered frames won't "line up" with the monitor refresh rate, causing stuttering if V-Sync is enabled or tearing if V-Sync is disabled. Since 60 Hz monitors are still the de facto standard these days, most console games target either 30 FPS, 60 FPS or sometimes 120 FPS (PS5 and Xbox Series).

There are pretty much no monitors with 40 Hz or 80 Hz refresh rates, and few monitors with 120 Hz+ refresh rates (the common 144 Hz is not a divisor of 40).

However plenty of monitors these days have adaptive sync so as long as the player stays within the range...