Page MenuHome

Drivers not updating correctly when multiple drivers are relying on single property value change (viewport issue only)
Open, Needs Triage by DeveloperPublic

Description

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

Blender Version
Broken: version: 2.81 (sub 10), branch: master, commit date: 2019-09-10 13:53, hash: rBe0f7ada0d2b0
Also tested on 2.80 release version. Happened for me there for the first time so I've downloaded newest build to check if issue still occurs.

Short description of error
When multiple drivers are linked into the same property, changing value of that property is not always propagated to all drivers. It looks like some sort of race condition, although I don't think it's caused by switching property back and forth and threads overlapping in that scenario, because even when doing this slowly, issue occurs. Issue also occurs when clicking arrows on a property instead of dragging left/right.

Seems to be related to viewport displaying only. As presented at the end of linked video, rendering scene in such broken state is working correctly.

Exact steps for others to reproduce the error

  1. Open provided blend file
  2. Select small cube at the bottom of the screen
  3. Cube has a property on it. Switch its value back and forth.
  4. When property is set to 0, only vertical bars should be visible. When property is set to 1, only horizontal bars should be visible.
  5. Not every time, but occasionally bar is visible when it shouldn't or the other way around.

Video of bug occurrence:

https://www.youtube.com/watch?v=5wrGXl3KnrQ&feature=youtu.be

Details

Type
Bug

Event Timeline

Developer note.

The issue is happening due to two different drivers are affecting value which is internally stored as a single bitfield property. Those drivers are evaluated in parallel, so updating the bitfield does not happen reliably (one thread will conflict with another when reading and writing bits which is done via reading, modifying, and writing back the entire bitfield value).

The reason why drivers are evaluated in parallel is because drivers are represented as separate nodes in the dependency graph. This allows to have complicated setups with chained drivers and even interleaved evaluation between drivers and bones of different armatures.

The solution which will not cause performance penalty is still to be found.