Significant input delay ( Camera Lag )

@Vmena, @ReduxGB,

Cause of the issue

I found out that having a 1000hz gaming mouse can be the cause of the engine inefficiency issue.
Lowering your mouse polling rate to 500 or 250 reduces the chance of your inputs being delayed by quite a lot.

The problem has mainly to do with our local machine and/or Roblox Lua not keeping up with the amount of updates our input device is sending to the engine.

If your game contains a lot of Lua heavy tasks, (which a lot of Roblox Action games do with their raycasting and lots of moving Roblox physics, and spawning Instances) it’s likely the reason why the input updates can’t keep up and cause the input queue effect.

What the user can do

Lower your mouse’s ‘polling rate’ to 250 or 500.
Windows does not have a way to lower your mouse polling rate. You will have to download your mouse company’s software and check for any available settings, or use a different mouse entirely.
Alternatively you can (and should) put your Roblox Client into ‘True Fullscreen’ mode (Alt+Enter) to severely reduce the amount of latency you can build up.

What the Developer can do

I recommend optimizing your game to reduce Lua heavy tasks such as:

Optimizing Physics
Optimizing Physics calculations by making object hitboxes less complex. Turn off CanCollide for complex objects (such as fine detailed Models or Unions/MeshParts) and replace it with a invisible ‘barrier’ brick.

Reduce spawning Instances
Reducing the amount of instances you spawn into workspace. Try to avoid rapidly destroying and re-parenting instances in and out of workspace. Instead try to re-use existing (hidden) instances, also referred to as “object pooling”.

These two tasks are the most CPU intensive from my testing, and when implemented correctly avoids building up large input queues.
However, even with these efforts you will likely still have a major(30-70ms) input latency as the source inefficiency can only be avoided by the user’s changing their mouse polling rate.


This is not a real solution.

Bottom line is that this is not something every user or developer can do.
Therefore I endorse the suggestion that this problem should be solved on Roblox their end.

13 Likes