New Optimization Feature: Interpolation Throttling

Introducing…

Interpolation Throttling!

This new optimization feature may improve the performance of games with large maps and lots of moving parts.

What does interpolation throttling do?

It reduces the update frequency of all remotely owned mechanisms outside a client’s simulation radius. So, parts that are far away from the player, and they don’t own, will step at 30Hz. It only kicks in if the engine detects that updating and interpolating remotely owned mechanisms is taking a long time.

For now the system is pretty simple but over time and with your feedback, we hope to make it smarter and boost its performance gains with less noticeable impact.

Why would I want this?

If your game is taking a vey long time to update remotely owned parts - its already “laggy”. So by throttling those parts that are taking up a bunch of time, your game speeds up as a whole.

How do I use it?

We have added a new (temporary) workspace setting: InterpolationThrottling; which can be set to either Default, Enabled, or Disabled. Right now, Default is Disabled.

When InterpolationThrottling is Enabled, then it can kick in whenever interpolation time is slow. If your game’s interpolation time never meets the threshold, then you won’t notice any changes (even if it does, you still might not notice it).

This feature is essentially in a “beta phase”. We encourage everyone to set this property to Enabled and report any issues, give feedback, or as questions here!
Thanks!

FAQ

(read me before replying!)

Does 30Hz mean things move slower?
No, it’s more like movement looks like 30FPS rather than 60FPS. It’s just the rate we apply positional updates from the server.

How slow does interpolation need to be before it kicks in?
Right now it’s about 1ms avg spent in the interpolateNetworkedAssemblies section of the microprofiler. This could change at any time however.

207 Likes

Could you specify exactly what you mean by “a long time?” I’d like to know when interpolation throttling actually begins. Is this a set quantity or is does it fluctuate from game to game? Will we be able to control when the update frequency will be reduced, i.e. we control the numbers?

Love this new feature though, optimization can be key. Looking forward to further advances.

23 Likes

This does seem perfect for big and complex games. I’ll be sure to use it when it’s out of beta!

9 Likes

To clarify, does having a Disabled option mean that there will always be an option to Disable it when it’s released (at least for the foreseeable future)?

3 Likes

Right now it’s about 1ms avg spent in the interpolateNetworkedAssemblies section of the microprofiler.

We may adjust this threshold, add new methods for detecting when it should kick in, and change how we decide what assemblies are throttled over time.

The specifics of future changes to this are kinda up in the air right now, and those decisions will be made based on your feedback, so we will take your questions into consideration for sure!

12 Likes

Does StreamingEnabled have to be on for this feature to work? I still have some issues with StreamingEnabled that make it a deal breaker for me and it’d be awesome if this would work without it.

2 Likes

Now that it’s confirmed to still be possible to step at 30Hz, what if it could always be 30Hz? For old Roblox simulation? Being able to cap at 30Hz might also improve performance for low-end in any game.

2 Likes

The plan with this feature is to follow the typical rollout plan. Right now this feature is opt-in, eventually it will become opt-out (by switching from Default to Disabled), and ideally eventually always on, and the property removed.

However the state of the feature by the time we get to the third phase will likely be very different from what it is now, and should be totally unnoticeable (like how regular physics throttling is now https://developer.roblox.com/en-us/api-reference/function/Workspace/GetPhysicsThrottling)

14 Likes

Simulation radius ~= Streaming radius.

Simulation radius is the radius at which the player takes local ownership of an anchored part as well as leaving it to the server.

Streaming radius is of course the radius used by streaming enabled.

tl;dr no

7 Likes

We are not stepping physics at a lower frequency, just network updates. Remotely owned mechanisms are not simulated on your machine, they simply receive positional updates from the server.

It will basically look like they are moving at 30FPS, instead of 60, and this feature is intended to improve performance for low-end devices, without the need to cap.

Also, I’m pretty sure there was never an “old roblox simulation” of 30hz.
Physics used to not be synced with rendering freq, applying updates at 30hz. However physics simulation was never at 30hz

15 Likes

What I mean is like how Roblox was before this update. https://blog.roblox.com/2013/09/synchronizing-physics-and-rendering-at-a-smooth-60-fps/

6 Likes

This feature is essentially in a “beta phase”. We encourage everyone to set this property to Enabled and report any issues, give feedback, or as questions here!

i think you should atleast try it xd

1 Like

Does enabling this make everything move slower that’s not in the simulation radius?

1 Like

If it does, it seems to be unsaid.

But from what we can see, no

sauce:

When InterpolationThrottling is Enabled , then it can kick in whenever interpolation time is slow. If your game’s interpolation time never meets the threshold, then you won’t notice any changes (even if it does, you still might not notice it).

(only when interpolation time is slow, or to clarify:

1ms avg spent in the interpolateNetworkedAssemblies section of the microprofiler.

5 Likes

This will help a bunch on my vehicle project. Thanks a ton, yo.

5 Likes

This is great news. I’m really glad to see more updates focusing on optimisation which is a classic issue on the platform with large, especially detailed, maps.

3 Likes

This article is extremely important to this conversation, thank you GuestIsJustBest. Its funny because 7 years ago from today, it was published. September 29th, 2013.

I read through the article, and it brings questions to what’s happening.

Synchronizing Physics and Rendering at a Smooth 60 FPS

Before Update in 2013

After Update in 2013

This forum somewhat goes back to limit the Frame Rate of Physics prior the 2013 Update Article, on certain conditions.

As for this new update,

  • Does this update overall game job management?

  • If so, is there a noticeable lag time?

  • Will this update lag large scripts, and will it lag large scripts on large maps?

4 Likes

Okay some of us are very confused like myself for the benefit of all can you please create of video or step by step write out how to enable this?

2 Likes

Click on Workspace in the explorer, then find Interpolation Throttling in the Properties window:

ex

2 Likes

Hey,
Do you have any plans for unloading instances for the Streaming API, now that we have all this?

4 Likes