Page MenuHome

Sculpt hipoly with mask modifier have low performance
Closed, ArchivedPublic

Description

System Information
Operating system: Windows-7-6.1.7601-SP1 64 Bits
Graphics card: GeForce GTX 660 Ti/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 456.71

Blender Version
Broken: version: 2.92.0 Alpha, branch: master, commit date: 2021-01-09 14:02, hash: rB6154aa1529b7
Worked: 2.91 release

Short description of error
I am trying to use mask modifier with hi-poly mesh in sculpt mode. And it looks like it recalculates each time, despite topology do not change.

Take file apply subdiv and compare sculpt speed with and without mask modifier.

Event Timeline

Falk David (filedescriptor) changed the task status from Needs Triage to Confirmed.Jan 19 2021, 12:57 PM
Falk David (filedescriptor) updated the task description. (Show Details)

I can confirm that there seems to be a regression going from 2.91 to 2.92. The performance is noticeably worse.

It seems to be good in 2.93 for some reason. @Vyacheslav (hitrpr) can you confirm that?

It seems to be good in 2.93 for some reason. @Vyacheslav (hitrpr) can you confirm that?

Not him but I can confirm that this actually is an issue for me in latest 2.93.0 Alpha build. Performance becomes noticeably worse with mask on. However, interesting to note that it is unnoticeable at low poly counts (1-10 000) and really only starts to 'feel' laggy at +50k faces. Would seem to indicate that when you notice it depends on your system and tool.
I tested both bringing preferences from 2.92 and with clean slate, and with the vertex group selection flipped and not flipped. In all cases it seems to work fine at low poly but going high poly counts using Mask modifier starts chugging fair bit earlier.

This is a limitation. When sculpt mode detects that there are enabled modifiers in the stack it always disables PBVH partial updates drawing an updates the entire mesh. It does not take into account if the modifiers is actually doing any changes to the geometry (I don't think there is a way to check this without evaluating all modifiers). You can also reproduce this limitation by adding an array modifier and se the copies to 1.