MAJOR Studio Bug. (CanQuery performance issue with default RibbonTool's.)

Issue:

When the default RibbonTool’s Select, Scale, Rotate, and Move are used a large performance drop is noticeable in Roblox studio when the cursor is hovering over dense groups of parts. This Studio breaking bug seems to be directly connected to the CanQuery property of Parts. An issue only Roblox engineers can address.

Skip to ‘Cause & Reproduction’ for a theory on the cause of this issue & repo.

Example:

In the clip below you will notice that with the tool selected, there is no performance issue while the cursor is not hovering over the models. However performance drops significantly when the cursor is hovered over dense models.


Steps I have already taken to address the issue.

The usual questions asked by bug report handlers.
  • I Uninstalled & Reinstalled Roblox Studio.
  • I reset my Studio settings to Default.
  • I copied the models in a different game/baseplate (The clip shown). And tested on new models.
  • I tried lowering my graphics settings.
  • I Disabled future lighting and tested again.
  • I tested on a different device.
  • I disabled my Plugins.
  • I tested my device’s performance.
    • I can run the game fine with the graphics up in Play.
    • The game runs fine when the aforementioned tools are not selected in Studio.
      Proof:

Cause Theory & Reproduction.

Cause & Reproduction.

Based on the behavior of the performance drop. I have noticed a direct correlation with the use of CanQuery Property in parts.

TO REPRODUCE: Create a dense model and disable CanQuery on all of its parts.

Here is a REPO File

CanQuery Repo…rbxl (40.9 KB)

If you dont want to download anything:
(19) CanQuery Bug Repo - Roblox

Instructions:

  • Select one of the aforementioned RibbonTool’s
  • Hover cursor above the front face of RED parts (CanQuery Enabled) You will notice no lag.
  • Hover cursor above the front face of the BLUE parts (CanQuery Disabled) You will notice a significant performance drop.

Settings/Notes:

-There are 6 models in each row. Each containing 64 parts.
-Compatibility lighting is enabled.
-GlobalShadows disabled.
-CastShadow disabled in parts.
-CanCollide disabled in the parts.
-Massless Enabled
-Anchored is true.
-This is a scaled down version. The effect is multiplied for any large projects or builds.

Not to knock the engineers responsible for creating this feature. But when the parts are all set to CanQuery disabled. The performance is extremely degraded and unmanageable when hovering groups of parts with the cursor.

When all parts have CanQuery Enabled, The issue does not occur.


Concluding note:

:bowing_woman:t2: I hope this information is satisfactory. This issue needs to be addressed as soon as possible. My games using CanQuery disabled are now un-editable in Roblox studio.

10 Likes

I can confirm it, I tried it with my own servers and I just nearly crashed my roblox because of this. The video i attached shows what is going on.
The Task Scheduler is quite literally screaming for help when I change CanQuery on ALL parts to false.

4 Likes

We will have a change to imporve CanQuery disabled performance in studio next week.
For now the best option is to temporarily enable CanQuery for parts in Studio. You can have a script that re-disables CanQuery at runtime if you need it for gameplay purposes.

9 Likes

This is exactly what I have been dealing with for a week now.

2 Likes

I have been experiencing this studio bug in a large city game I’ve been developing and spent majority of my day trying to figure out the cause. Through trial and error I eventually discovered this same bug:

Having CanQuery set to false on a large number of parts will make developing in studio nearly impossible because of the huge amount of lag and stuttering that occurs when hovering over models/parts. The more parts that have CanQuery set to false, the worse the issue becomes. The CanQuery property exists to improve performance in-game but ironically decreases performance in studio.

Edit: Nevermind, I just noticed the Roblox team is already aware of the problem haha

1 Like

Hi, enabled a change that should fix performance here. Let me know how it goes!

2 Likes

I think this change might’ve broken part selection.

I can no longer select an unlocked part when my cursor is over the part, and the part has a CanQuery false part behind it:
image

I was able to confirm + repro this theory with two parts in a blank place. This was functioning as normal until around when this change was mentioned.

5 Likes

I just recently noticed issues selecting parts too. Sometimes when I alt+click to select a single part inside a model, it will select a completely different part behind the model (past the part I’m trying to select). Started noticing this yesterday around when this change was made.

3 Likes

Can confirm this is an on-going problem. I thought i could just select random parts but your explanation cleared all my doubts

3 Likes

Yes looks like the fix caused this issue, thanks for reporting. I can have it fixed next week.

It may be best to revert back to the old behavior (slow performance) until then, I’ll let you know what we do.

2 Likes

Yea the new selection bug is a bit more prevalent. I’m disabling the performance fix.

Remember, if you are facing Studio performance issues due to CanQuery parts in your place, you can workaround by having a script re-enable CanQuery and tag all the parts. Then another script can disable CanQuery on all the tagged parts at runntime.
Once the fix is enabled again you can put it all back.

6 Likes

For any non-programmers out there, here’s the code I’m using to disable/re-enable this temporary fix.

Fix performance (In studio command line):

local CS = game:GetService("CollectionService")
for _,D in pairs(game.Workspace:GetDescendants()) do
    if D:IsA("BasePart") and not D.CanQuery then
        D.CanQuery = true
        CS:AddTag(D,"CanQueryFalse")
    end
end

Add back CanQuery false (In server script or command line once issue is fixed):

local CS = game:GetService("CollectionService")
for _,Item in pairs(CS:GetTagged("CanQueryFalse")) do
	if Item:IsA("BasePart") then
		Item.CanQuery = false
		CS:RemoveTag(Item,"CanQueryFalse")
	end
end
3 Likes