System Information
Operating system: Linux-5.4.0-47-generic-x86_64-with-debian-bullseye-sid 64 Bits
Graphics card: GeForce GTX 960/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 440.100
Blender Version
Broken: version: 2.91.0 Alpha, branch: master, commit date: 2020-09-18 22:24, hash: rB7b9e47a35e04 (tested with factory settings)
(Current 2.83 LTS is also broken.)
Short description of error
A mesh object deformed by an armature modifier does not appear to be disabled correctly if disabled by a driver, even if the driver is a trivial driver with no dependencies (eg. a scripted expression of "True" or "1" with no variables). While the mesh object will be made invisible in the viewport, Blender seems to calculate the object's deformation anyway when the armature is posed or transformed, resulting in massive viewport performance degradation if the hidden mesh is complex.
This seems like a bug to me, because disabling the object manually works as expected: as soon as the mesh vanishes, I can pose the armature without framerate issues.
Disabling the armature modifier on the complex object does not resolve performance issues (although this appears to be the case regardless of visibility). Deleting the armature modifier does, however. I assume there's something funky with the depsgraph, but I'm not familiar enough to know how to approach this.
(My use case here is being able to hide elements of a linked/proxied character without those elements incurring heavy performance penalties; as of now I'm unable to feasibly use complex characters without having to append them, resulting in massive file bloat. EDIT: I did manage to find a workaround. If processing the modifier stack is unavoidable, then a Mask modifier can be placed at the top of the stack so that the Armature, etc. modifiers have no work to do as an alternative. This does require creation of another vertex group containing all vertices, though, which is a little messy.)
Exact steps for others to reproduce the error
- Open attached .blend
- Either perform some transformation on the armature object or attempt to transform the bone in pose mode. Notice viewport performance tanks, despite ComplexObject being hidden via driver with constant value 1 (i.e. no obvious dependencies on ANY datablock), seemingly implying deformation is still being computed while the mesh's object is disabled. (Subdiv level on the complex object is tuned for my underpowered computer, so may need more subdivision levels to be apparent on a modern workstation).
- Delete the driver on ComplexObject's visibility.
- Perform another transformation of armature object or pose bone; notice viewport performance is back to normal despite no changes in visibility.
- Set ComplexObject's visibility back to True. The object is now visible, but viewport performance is now identical to what it was when hidden via driver.


