Let’s illustrate this with a car. First I drive down the highway with no speed limit at all. I am now going say 85 miles an hour, but my actual speed varies from moment to moment. I go up a hill, it dip a bit, I go down and it goes up. So forth and so on. I still don’t go below 80, but it does go up and down.
But now I absolutely cap the cars speed so that no matter what I can’t ever go past 65. When I go up a hill, my speed will still dip a bit until I bring up the motor to comensate, When I go down a hill, I have to brake down lower than 65 to avoid going over. Various other things also happen. Even though I never went below 80 without a cap, I now am going as low as 60 or less at time, because having the cap doesn’t prevent the normal dips from happening and even causes new ones just in order to avoid the usual rises in speed that normally happen.
That’s basically what is happening with your system as well.
What you really care about here is frame times. We’re going to change the base FPS to be 50 instead of 60 for easier math here
When you were running uncapped the instructions to the GPU were “Draw the next frame as fast as you can, and give it to me immediately!” so since it normally took it 2.5 ms per frame it was able to give you 400 FPS, but when you dropped down to 300 FPS that means that some frames were taking 3.3 ms
When you changed your frame cap to 100 FPS(yay easy math!) you changed the instructions to the GPU. It was now “Have a frame ready for me every 10 ms, and don’t draw more frames than necessary”. Since the GPU is able to determine that it can normally draw a frame in 2.5 ms it’ll wait until 7.5 ms after the earlier frame to start drawing so it can give you the best frame, but if it takes 3.3 ms then it’ll have that frame ready 10.8 ms after the last one and will miss its delivery window and resend the last frame.
If you were to plot frame times you would likely see most of them being very tightly clustered around 2.5 ms with the occasional one getting up past 3 ms which will cause the GPU to not have it ready in time so you see a momentary decrease in FPS.
Latest Answers