IF YOU ARE SURE YOUR SYSTEM IS UNDERPERFORMING, CANNOT GET MR TO WORK, OR CAN’T GET IT TO WORK CONSISTENTLY
I want to make a video of this approach (I need a lot of time for that). It’s worked miracles for me. Compared to most of you, my system is underpowered. Yet I get an incredible experience and it’s absolutely butter smooth.
But it didn’t take only research and number crunching, it took a strategy and a plan.
Here’s my “underpowered” system:
Yes, butter-smooth, with that.
I don’t have time to go “deep” today but, believe it or not, this is a TL/DR:
Disclaimer: This isn’t even close to technically correct. It’s a teaching explanation, designed to help a person understand the concept being presented. Pedantic attempts to dissect the math or correct technical points will be ignored.
- Understand the relationship between the headset frame rate and the card’s fps rate, and how one needing to wait for the other can kill performance even if both are doing a decent job.
-
Your headset is running at 90fps (okay, that part is technically accurate and is key to this whole thing). This means every 11 milliseconds a frame starts. If you’re getting 35 fps from your system, then your system is starting a new frame every 28.5ms.
-
The problem is that both start together, but their mismatched timing is going to cause big problems.
-
Your headset completes two frames in 22ms, while the video card hasn’t given it anything. Then, at 28.5ms, the video card says “I’ve got a frame ready for you”.
-
The headset says “Oh, NOW you’re ready… well I’m not. I’m in the middle of something here, so you’ll have to wait.”
-
Best case scenario, the video card starts working on the next frame at 28.6ms. Worst case, it waits until after it delivers the current frame and won’t start working on the next one until 33.1ms. Either way, the currently ready frame is sitting there, waiting…
-
Finally, after the frame sits there and waits 4.5ms doing nothing, it finally gets passed to the headset.
Next frame, same wait. And the next. And the next… this is cumulative, and it can really wreck your performance.
I’m not sure if the video card has to wait until delivering the first frame before starting work on the second, but that would be crushing, and the better your card, the more that could hurt.
Consider this… if your system outputs a frame every 12ms, then it’s constantly missing the window by 1ms and sits there for 10ms, just waiting. Now, even though your system is capable of 12ms per frame, your actual throughput is 22… that’s like an 80%(ish) hit in fps!!
Do I have your attention yet?
Is it really that bad? Probably not. I’m sure this isn’t even close to being technically correct but it’s not meant to be. It’s meant to help you understand the general concept that having the CPU and GPU rates mismatched is going to kill your performance, and it might even get worse as your gear gets better.
So what do we do about it?
- Understand how MR is supposed to help this issue.
-
The idea of MR is simple. Have the video card always output 90fps, even if a frame isn’t ready, and this helps make things look smooth. I imagine it’s designed to be coordinated with frame limiting, but I haven’t seen that explicitly stated anywhere.
-
Here’s the key to it all. If your system is putting out frames at a rate that evenly divides into 90 then the headset is always ready to start a frame just as the system delivers it, with no waiting. But…
-
Wouldn’t that mean I could get the same effect by just limiting frames to 30 or 45? Nope… because your headset still looks smoother with frames being rendered between. I’m not sure why, perhaps MR is using the system frames like keyframes and then rendering the tweens to make transitions between keyframes looks smooth? Maybe not… but all I do know is it definitely makes things look a lot smoother IF your system isn’t choking when you turn it on.
“But Scott, why would my system choke if MR is good?”
I thought you’d never ask…
- Look, nothing is free. MR needs computing power, and it comes from the CPU. This leads us to why so many people mistakenly think MR sucks, and why results are inconsistent between systems or even aircraft and airports.
- Realize most people max their settings, leave frame rate limiting either off or higher than their actual fps, then turn MR on and say “it sucks”. (Hint, they’re doing it wrong… I was doing it wrong, too.)
- Scenario:
You max out your settings and are squeezing every fame out of your system.
You leave limiting off because you’re trying to max things out.
Your turn on MR and get a slideshow, and black patches on the sides if you turn your head.
You say, “MR SUCKS!”, turn it off and never try again.
Sound familiar?
- Rember, MR needs a little power from the CPU for it to work. Did you leave any room for it?
No, you didn’t. You ate every cycle with your settings and then expected MR to do its thing for free, without any resources.
Derp.
- "But how is MR supposed to make things better if I have to back settings down to leave CPU cycles for it to work with??"
You don’t back your settings down, you limit the frame rate. That leaves CPU cycles free for MR to use.
Math… here is the goal: 90 % [your frame rate] = 0
For non-programmers that means 90 divided by [your frame rate] needs to have a remainder of 0… nothing left over. This means your frame rate needs to be 45 or 30, in practical terms. Technically 22.5 and 37.5 would work, but the value you set in the Nvidia control panel has to be a whole number, so forget about those.
Now your settings are still maxed AND you have CPU cycles left over that MR can use to work its magic!
- Examine what settings affect the CPU or GPU, and tweak them independently depending on your system strengths.
- What to do:
-
Set the Nvidia frame limiter to OFF.
-
Use the fps meter in OpenXR, NOT the one in the developer tools!!! That one eats a lot more resources than the OpenXR one and will skew your results, badly. I don’t care if it tells you CPU/GPU bound, you can’t trust that anyway due to reasons discussed near the top of this thread.
-
Go to the busiest airport you frequent (if you don’t fly out of JFK then don’t go there). Use the most complex plane you normally fly. If you normally fly GA, don’t do this with the 320. Grab your Kodiak, 310R, or whatever.
-
Play with your settings until you get the best visuals you can, while still maintaining at least 35fps.
-
Go back to the Nvidia control panel and set the frame limiting to 30, then turn MR on. You should be in great shape.
If you later get bad stutters and empty patches at the sides when you turn your head it means that something changed (aircraft/scenery/clouds) and your system can’t hit 30fps anymore. That stuttering and blank on the sides means MR doesn’t have enough CPU to work with. I’ve found that the easiest fixes are to hit Cntl+Tab to get out of VR, close the WMR portal, turn off MR in OpenXR tools and then restart the WMR portal. When I did this, I found I was getting 28-29 fps… Just low enough to cause MR to have nothing to work with, and result in the super-stutters and tearing. Another thing that really helped was that I backed scaling down from 85 to 75 when this happened, and got 44-45 even after maxing out all the settings I care about (except scaling, of course). This allowed me to re-enable MR, and things are butter-smooth again.
ONE MORE THING
Close MSFS because before you fly, there is a right and wrong way to set up your WMR and it could be really important.
- Have you ever tried to use inside-out tracking next to a Christmas tree with the lights on? Oh, come on… we’ve all done it at least once. Now, are you flying the sim in front of your monitor? You know, the one with the constantly changing screen right in front of your VR headset cameras used for tracking?
Derp #2
Don’t worry this is easy.
-
First, before you start anything, hit the windows key and type “Head”, then hit enter. In the headset settings, go to Environment and clear the environment data. Do this every single time you fly!
-
Open WMR. Open the set boundary setting and tell it you want the one without a border. It will ask you to confirm, hit yes.
-
Hover the mouse over the center button but do not click it! You just want it to highlight.
-
Turn your monitor off!
-
Put your headset on, look straight ahead and hit the enter key on your keyboard.
-
Turn your monitor on and then start MSFS, and whatever other things you might need such as a flight recorder or economy addon.
-
When you get to the welcome menu:
- Turn the monitor off
- Hit Cntl+Tab
- Put your headset on
- Now marvel as you look straight down at 1000 feet and see butter-smooth buildings and trees glide by!
Happy flying!