So I spent some time learning the basics of drivers today, and tried to rig up a simple custom grid array as a test. But then, I found out Blender seems to have trouble auto-updating driven values when making calls to Python functions. Here’s a screenshot and explanation of what I tried to do:
There’s a “leader” object (greeble_f_leader - the active object in the screenshot), and a bunch of “follower” objects (greeble_follower.001, 002, etc) that have drivers applied to their X and Y location values. Each of those drivers calls a relevant Python function (defined in the Text Editor) to organize these “follower” objects into rows and columns, based on the “leader” object’s position and some voodoo using bpy.data.object indices.
It all works fine when first duplicating the “follower” objects to create the array, but then when I try to move the original “leader” object, the “follower” locations don’t update based on the new “leader” location. I tried all sorts of things: scrubbing the timeline, changing the Py code around, etc. This is broken in both 2.79 and 2.80. Finally, I stumbled on a way to force-refresh the driven values: 1) hit the “Run Script” button in the Text Editor, and then 2) hit Undo in the 3D viewport. (?!) But that’s useless if you want to animate the “leader” object’s location.
After some digging, I found this BA thread from 5+ years ago talking about this very same problem: No more way to use python functions in drivers ?
Apparently this behavior broke around the time of the 2.5x refresh, but it had worked fine in 2.4x and earlier. There’s a workaround where you create a dummy variable in the driver UI of the Graph Editor for each driven property and then pass it in a function, but that’s a pain. Since this didn’t get fixed this far into 2.80 development, I’m guessing it’s not a high priority, and probably won’t get fixed until Animation 2020.
Is there a fix for this that people know about? Or am I better off learning Animation Nodes for now, to work with these kinds of setups?