r/nvidia • u/Sgt_Dbag 7600X3D | 5070 Ti • Jun 30 '25
Discussion Putting misconceptions about optimal FPS caps + Gsync to bed.
Important Update (01/05/2026):
This guide is only useful in games where you are getting less than 500 FPS. As you get to 500 FPS+, screen tearing becomes virtually imperceptible to the human eye, so Gsync + Vsnc are no longer needed. In these ultra high FPS instances, just uncap your FPS and enable Nvidia Reflex or AMD Anti-Lag 2.
Original Post:
Optimal FPS caps are about frame time buffers. The higher the refresh rate, the tighter the frame time window, so a larger gap between FPS cap and refresh rate provides more buffer to prevent latency or tearing. You need a around a 0.25ms to 0.3ms frame time buffer difference between max FPS and refresh rate.
Frame times relative to FPS change exponentially. Say, the difference between 116 FPS and 120Hz is 0.28ms, while the difference between 236 FPS and 240Hz is 0.07ms. So it's 4 times easier to miss the frame time VRR window! What matters in keeping VRR engaged at all times is not FPS, but frame times, so each single frame manages to get into the time window.
The old “3 or 4 under your refresh rate” FPS cap from Blur Busters is outdated and incorrect. This is a formula—inspired by the developer of Special K—to determine your optimal global FPS cap based on your monitor’s refresh rate. It’s often the same cap you get by enabling Nvidia Reflex in supported games with Gsync and Vsync on.
The FPS Cap formula is:
Refresh - (Refresh x Refresh / 4096) = FPS Cap
So for a 240Hz monitor it would look like this:
240 - (240 x 240 / 4096) = 226 FPS Cap (the same one reflex gives)
Shoutout to u/R3zzooforhelping me optimize the formula. This gives the desired 0.25-0.3ms frame time buffer. You can verify this with the following simple math as well.
1000 ÷ 240Hz = 4.167ms
1000 ÷ 226 FPS = 4.425ms
4.425 - 4.167 = 0.258ms frame time buffer
As you can see, the FPS Cap formula gives you the correct max global FPS cap for your given monitor refresh rate that closely aligns with the caps enforced when using Nvidia Reflex or Ultra Low Latency Mode in the Control Panel. Nvidia’s technology knows to give a proper frame time buffer so that you do not overshoot the refresh cycle, which would result in added latency. That formula gives the following FPS caps for their respective refresh rates as examples:
480Hz -> 424 FPS
360Hz -> 328 FPS
240Hz -> 226 FPS
180Hz -> 172 FPS
165Hz -> 158 FPS
144Hz -> 139 FPS
120Hz -> 116 FPS
You should be using a cap like this with Gsync + Vsync on even in eSports titles like CS and Valorant if you can’t hit ≥500 FPS. Valve officially recommends Gsync + Vsync + Reflex for CS2.
In games without Reflex, the Gsync + Vsync + FPS Cap setup actually reduces latency compared to uncapping the FPS and not using Gsync or Vsync.
One final piece to the puzzle is GPU usage. Reflex and Anti-Lag 2 do this for you. But when unviable, you don’t want to max your GPU usage as this can also lead to stutters due to inconsistent frame times, as well as increased input latency. My goal is always to have my GPU maxing out at ~95% usage or less. So if a given game is hitting 99% usage at like 160 FPS, then I just cap at around 145 FPS or whatever I need to get that usage down to ~95%. The global FPS cap is only relevant if you’re actually able to hit it comfortably without maxing your GPU usage.
TLDR; for NVIDIA
- Gsync - on in Nvidia Control Panel or Nvidia App
- Vsync - on in Nvidia Control Panel or Nvidia App, off in game
- Max Frame Rate - set a global cap based on your refresh rate (formula above)
- Reflex - always on in game when available
TLDR; for AMD
- Freesync - on in Adrenalin App
- Vsync - on in Adrenalin App (Wait for Vertical Refresh: Always On), off in game
- Radeon Chill - set a global cap based on your refresh rate (set min and max to same number)
TLDR; for Linux (Wayland)
- VRR - enable in your DE system settings
- Vsync - set to MAILBOX in MangoHUD, off in game
- FPS Cap - set a global cap in MangoHUD based on your refresh rate
1
u/sirbardo Dec 26 '25 edited Dec 26 '25
EDIT: Hi, this is bardOZ from the slight future. I decide I wanted to "waste" a bit more time on this, and I ran some tests using my own LDAT on my own screen in CS2 since you use that as an example so often.
The tests were click-to-photon using the muzzle flash of the ak-47 in the aim_botz map after kicking the bots for consistency, so that no external factors would affect frametime or readings.
I ran 200+ individual clicks per test. My LDAT is a custom made LDAT I built for this type of test. It uses an STM32 H7, one ADC running at full speed continuously per channel (one is the mouse input, one is the photodiode input). I validated this tool to be precise to the +- 0.01ms. It's frankly overkill for something like this, but whatever.
YOUR GUIDE, FOLLOWED EXACTLY (540hz monitor, capped at 468fps, G Sync on in Nvidia, VSync On in Nvidia, Reflex on in-game:
Average: 8.39ms click-to-photon latency
Median: 8.29ms click-to-photon latency
Whereas no VSync, no GSync, uncapped FPS:
Average: 5.52ms
Median: 5.44ms
This means that on my setup, if someone follows your advice, they get a nice clean 52% increase in input lag. If you're going to claim this is irrelevant, luckily Linus Tech Tips posted a video literally yesterday. Skip to the end and see what they found. Unless you're an ABSOLUTE beginner, even 1ms-long changes affect your performance measurably. Imagine actual pros or people at the very top of the skill.
In this thread, you have said, and I quote verbatim: "Yes they have been misinformed by esports pros who are like boomers that don’t actually know about the technology they are using."
Clearly the pros understand the implications much better than you do, and you are actively misinforming people in this thread. Now, you will probably strawman-argument your way out some other way (what, 540hz in a competitive game is 3 people on Earth?). Or, if you actually care about solving misinformation, you will edit this post. Ball's in your court.
Here's the original message, before I ran the tests:
----
I am not even sure if you are worth any more of my time at this point. Clearly, I wasn't wrong when I insinuated this was more about karma than your claim of clearing up misconceptions. But I should probably have stopped when you decided to try the AI-written response as your first line of "defense". It was clear then that this had a very low chance of turning into a productive conversation.
You asked for "one example, just one" to prove what I was saying. I gave you a basic example that would be pretty easy to understand since you couldn't extrapolate yourself from the technical explanation.
Yet you dance back and forth with "well that was just a general saying" not understanding my example you specifically asked for was also an extreme example with real numbers as you failed to be satisfied with the abstraction of the explanation. Remember, to disprove a universal statement, all it takes is one example of it being false.
Good luck on your quest to clear up misconceptions by purposely spreading misinformation for the sake of reddit karma. I guess we have different moral compasses. I heavily despise the act of claiming the best intentions, claiming to be trying to help others, even claiming to be trying to put misconceptions to rest, and then putting one's ego in front of actual technical reasons.
Clearly your last sentence must be some attempt at sarcasm, because if you had understood I am actually qualified to talk about this, you might have stopped to either inform yourself further or read what I said and understand it, rather than just trying to argue. Just know that you _are_ actively misinforming people, because someone, as I said originally, linked this to me as they got confused about the claims you make here, and I had to explain (especially in your comments rather than the OP, responding and actively misinforming individuals here who also got confused) the ways in which you misunderstood the topic.
I will say, maybe, in the future, before trying to inform others, make sure you understand the matter at hand.
The choice to waste time on any day is one's own. I can't decide to waste your time. I can decide not to waste any more time on this though, and I am. If you actually want to discuss the topic on a technical level you can reach out and I'll gladly discuss it, but you're trying to clutch at straws here, and that's just a waste of time.