Wish: I would like to please request that the ability to limit frame rate within in the sim itself, at the main thread level and independent of the VSync 20/30/60 fps settings, be added.
Reasoning: FSX had a very rudimentary main thread frame rate limiting config setting, limited to whole numbers, which worked independently of vertical sync and this had a number of advantages in that sim…
- Very consistent frame times
- Reduced cpu and gpu load in low density scenes
- The sim seemed to “plan” out its threads more carefully with the limiter engaged, leading to much fewer stutters and microstutters from scenery loading etc
Why this is needed:
As MSFS is currently set up, when you are flying in VR, or with Vsync off in 2D, the only way to limit frame rate is to use an external limiter program (Rivatuner Statistics Server) or lock the frame rate at the videocard driver level. Neither of these methods is ideal, and they come with problems.
Example problem:
You are doing a loop in VR with frame rate locked to 30 fps in the video card driver. You’re looking at the ground to start, so the cpu and gpu loads are high. As your nose comes up the load on both drops dramatically as you suddenly only have sky and clouds being rendered. The sim does not know that its frame rate is being limited and keeps trying to push higher fps with the suddenly lighter load, and this results in a noticeable series of stutters as it basically trips over itself. It takes several frames for the driver’s limiter to smooth it back out again. As your nose comes down and the ground comes back into view again the same thing happens in reverse, with the cpu and gpu suddenly being heavily loaded again, and again the sim stutters severely as it tries to adjust to the new load. These are not scenery loading stutters, as you are barely moving laterally over the ground, they are purely caused by the sim being unable to predict and control its own frame times internally.
An internal frame rate limiter would help this situation tremendously if it is done correctly, so that each thread knows exactly how many milliseconds are available for its work, and if something is going to take longer than the time left in the frame it gets moved to the next one.
This would be an enormous help in VR, especially with motion reprojection / ASW active, which rely on having extremely consistent frame times. It would also be an enormous help in regular flying, as scenery loading stutters should be reduced if the sim actively truncates and segments tasks that would break the frame time limit.
Ideally this internal frame rate limiter should provide similar accuracy to Rivatuner Statistics Server, allowing for at least 1 or 2 decimal places of precision in either frames or milliseconds per frame (ie: 29.97 fps, or 33.34ms) etc and not just whole numbers. There are many cases where fine tuning of that precision is needed to remove microstutters (ie: most monitors refresh at around 59.94 fps, not 60).
Another side benefit would be controlling the runaway frame rate issues in the main menu in 2D, which currently can lead to extreme GPU load and temperatures, especially during sim updates, without the need to activate Vsync or use an external limiter. Perhaps a separate menu only frame rate limit could be added.
This limiter doesn’t need a fancy UI slider or anything, a simple config line setting in UserCfg.opt would be enough and most welcome.
Thank you for your time!