One of the goals of my Othello face rig is to mimic facial muscle action as nearly as a bone system will allow, and part of that idea is to get the bones to react in the same away as complementary muscle-pairs (one extends while the other contracts). Setting bone scales by hand one by one does this, but is neither intuitive nor very fast. So I’m building a layer of controls that will operate groups of muscles simultaneously.
In principle this works great so far – I have “clusters” of Transformation Constraints for each bone, with varying degrees of influence and “reaction” to the control based on the control’s Location in two axes. Influence is modulated by IPO drivers.
However, I’ve found that as the complexity of the system necessarily increases, the real time performance of the rig falls off drastically, until now, with only 1/2 the face so rigged, I often get no response in the UI at all when I move the control that governs the constraint clusters. If I increment/decrement by a frame, everything updates fine, but that’s not a viable solution, I want a user to see the changes fully represented in real time as the controls move.
This sort of behavior sometimes shows up when there are cyclic dependencies, but none are reported in the console, so that’s apparently not an issue.
Is there some means of forcing the Transformation constraints, or the constraint stack for each bone, to evaluate in real time? I tried setting the “Extrapolate” button (no idea what it does – the manual is blank on this) but to no effect.
@mtracer: I may have found the source of my IPO driver update probs, maybe you could check on your troublesome uses of same:
When first setting the IPO curves for all my driven constraints, I did not notice that the button in the IPO Editor window menu bar making the IPO part of a Action was enabled. This isn’t desirable since the drivers should work in the “background” apart from any Actions created by keyframing the face rig. So I unlinked the Action, disabled the button in the IPO Editor window (making the IPOs apply directly to the constraints being driven), and re-linked the appropriate IPOs directly to the constraints. Now the whole rig updates beautifully in real time, every time.
When creating a IPO curve in the IPO Editor Window, there’s a button on the far left of the controls in the menu bar that also show the type of IPO (World, Object, Constraint, Material, etc.). It has a little “Action figure” icon ion it. When working with bones or their constraints, it seems that this button is enabled by default, and if you hover on it, the Tool Tip says “IPO is connected to Pose Action.” Thus any IPOs created, including driver IPOs, become part of the current Action, or, if no Action is current in the Action Editor, a new one is created for the IPO.
But this isn’t desirable for driver IPOs as they won’t work unless the Action they’re connected to is the current Action. To keep the IPO drivers working at all times for any current Action, the IPO curves have to be connected to the Constraint itself, which is the case when the button is disabled.
In my case I had already connected the driver IPOs and the Action, so I had to unlink that connection and re-establish it apart from the Action. Once I had done this, all my drivers updated in real time, very reliably.