Introducing the Maximum Framerate setting

Hello Creators,

We know that many of you use an external tool to run Roblox at their display’s native refresh rate by removing the client 60Hz frame render lock. That’s why today, we are excited to introduce PC support for modern displays that support refresh rates above 60Hz without any external downloads required!

Players can change the maximum framerate on the app through a newly introduced game setting. PC players that can achieve those higher framerates will get a smoother experience on monitors with higher refresh rates by increasing this setting. For now, this setting is limited to Windows devices but will come to Mac at a later date.

For developers, this means that the RunService events can provide smaller delta times in local scripts, and task.wait can wait for less than 1/60th of a second, returning a smaller value. You must always make sure that you are properly handling delta time values, not just for users changing their framerates to be higher, but also for players on slower PCs (producing larger delta times), as well as VR players, who have had a higher framerate before this update.

As an example:

-- BAD CODE!

local RunService = game:GetService("RunService")

RunService.PostSimulation:Connect(function()
    script.Parent.CFrame *= CFrame.Angles(0, math.rad(1), 0)
end)

This script inside a part will rotate it by 1 degree every frame. At 60Hz, this will rotate the part by 60 degrees a second, but it will rotate slower on weaker devices, and faster both for players that increase their local maximum framerate, or for those on VR.

If your intent is 60 degrees per second, then this code should instead be:

local RunService = game:GetService("RunService")

local DEGREES_PER_SECOND = 60

-- delta is the number of seconds since the last PostSimulation call
RunService.PostSimulation:Connect(function(delta)
    script.Parent.CFrame *= CFrame.Angles(0, math.rad(DEGREES_PER_SECOND) * delta, 0)
end)

We are thrilled to finally get this in your hands! Please let us know if you have any questions.

Thank you.


FAQ

What can players set their maximum framerate to?

  • The current values are Default (60 FPS, not your refresh rate), 60 FPS, 120 FPS, 144 FPS, and 240 FPS. We are open to adding more settings in the future for those in between.

What if a player’s device can’t reach the higher values?

  • If a player has their maximum framerate set higher than what can be outputted by their device, then they shouldn’t notice any difference. Think of it like a speed limit on a street. If you raise the speed limit from 60 to 80, then the cars will move faster, but the slower bikes will move at the same speed they were before.

Is the server going to run at a higher framerate?

  • No, but you should still make sure you are using the delta time values appropriately even outside of clients.

As a player, I already use an external framerate unlocker. Will that break anything?

  • External unlockers currently work by changing an internal dynamic flag on the client that was never meant to be a stable public API and may change without prior notice. We recommend using the in-game setting instead of using an external unlocker.

Why only Windows?

  • There is some nuance in supporting other devices, like Mac, that we would like to put more thought into. Shipping now on Windows only is a good first step and Mac support will be coming at a later date.
646 Likes

This topic was automatically opened after 10 minutes.

Finally!! That’s epic! :sparkles:

Thank you for finally releasing this globally, can’t wait for it to release on Mac!
One question, will this eventually release to Mobile users one day?

Thank you :heart:

99 Likes

YESSSS!!!
Finally no need to restart Roblox after changing the FFlag!

Thank you so much for this!

And thank you for including an explanation for RunService as well, since I just KNOW that people would complain about this update breaking their (bad) code

70 Likes

WOOOOO!

Finally! This was a long-needed update, thank you!! :heart:

Are there any plans to bring this to mobile/tablet as well? It would be awesome having this also on console, as lots of consoles can likely run 240 FPS now!!

53 Likes

only took like, a decade or two

112 Likes

Finally! I have been waiting for this since I got my 144HZ laptop 4 years ago and even now after I switched to a PC with a 144HZ monitor 1 year ago,

I’m really happy to hear this.

Thank you, Roblox.

image
Nice!

57 Likes

Glad to see this finally becoming a native feature! (and it works in studio :O)

Could we possibly see the ability to completely uncap our frame rate in the future? Especially once Roblox pushes more performance gains (i.e. occlusion culling), powerful hardware can surely pass 240 FPS on Roblox.

One unique use case I enjoy with completely uncapping FPS in my games is that it makes it easier to debug performance, as there’s no minimum cap to frametime - meaning with tools like the micro profiler, what you see is how long each frame takes, and this is useful to optimize client-sided script performance, especially when paired with low render quality.

60 Likes

FINALLY! With how long framerate unlockers have been a thing, I’m surprised how long this has taken to become a feature. However, I don’t fully see the alternative going away because of the limited presets. 75hz monitors used to be a common thing in the 4:3 monitor days, and I’ve seen weirder refresh rates like 90hz, 165hz, and 170hz. In fact, I ran my Lenovo Thinkpad X1 Yoga at 70hz for a while, and I was very close to swapping to 165hz monitors. I’d really love a way to put in an arbitrary framerate somewhere for these cases.

A 30 FPS option would also be very useful for making sure code works at lower framerates. I’ve used this before to find code that used task.wait() blindly instead of delta times.

68 Likes

Great idea! The current options aren’t that impressive, but it’s fantastic that you’re considering adding more intermediate settings in the future. Plus, I’m really glad I no longer need to download any external apps to “unlock” my FPS in the game.

Fantastic Update!

36 Likes

Nowadays, some more technological phones also support higher Hz rates. So, is Roblox planning to launch the option on Android/iOS devices?

What about consoles? What are the plans?
Also, thank you for releasing this feature :slight_smile:

46 Likes

This is a good question. My iPhone can run a max of 120 FPS but, from what I understand (I could be wrong), Roblox caps it at 60 FPS on mobile.


Thank you for adding this overdue feature. However, to allow for more flexibility, I suggest adding a slider for the FPS cap (or text input) with certain preset buttons we can click for commonly set FPS cap values (30 FPS, 60 FPS, 120 FPS, etc).

30 Likes

Please add 165Hz as its used in A LOT of gaming monitors

46 Likes

Finally, this is a fantastic job, guys! Thank you for your endless efforts. :fire: :blue_heart:

22 Likes

I can now rest in peace knowing that Roblox can now run over 60 fps without external tooling.

24 Likes

There’s nothing functionally stopping it, but I would not expect it to come soon. There’s a lot of nuance in the non-Windows world.

Nothing planned. The physics engine runs at 240Hz and there are some present issues that we know about after 240Hz, so we just wanted to keep it simple for now.

35 Likes

Nice to see that now being official.
For me with a 75hz display, this basically means using the 120hz setting, since the options are still a bit limited (those being 60, 120, 144 and 240 FPS). It would be nice to see more options between 60 and 240.

23 Likes

Excited for this change!

Any estimates as to when this will come to Mac? Will it still be this year? As a MacOS user this feature would be quite handy, as the unofficial FPS Unlocker has a lot of issues. Anyway, a great change that I’m sure Windows users will definitely take advantage of! Thank you!

24 Likes

No ETA for Mac, sorry. ؜؜؜؜؜؜؜؜؜؜؜؜؜؜؜

32 Likes

5 years behind but every small step is still progress :speaking_head::speaking_head::speaking_head:

33 Likes