Well, as I’m working right now, a bunch of little deforming control bones are parented to the head, but are free-floating, so the animator could grab one and drag it anywhere. I want their translation to be constrained to the surface of a mesh – other than the actual character mesh being deformed – as a guide, so you’d be able to grab them (and hopefully even constrain to a global axis) and translate them, but they wouldn’t be able to get into weird positions like -1BU away from the mesh. By constraining to a surface, the rig could have ‘sculpting’ controls while preserving the model’s volume (eg. how eyebrows move along the ridge of the eyesocket), and it’d make it impossible, or at least plenty more difficult, for the animator to break the mesh deformation by translating the bones way out of whack.
I’ve seen this done with curves in an old thread at CGTalk, but we can’t constrain bones along a curve yet – though with a commit by Aligorith this morning, and ideasman42’s fixing the curve twist problem a few days ago, it looks like the devs are already getting this in place for Durian. In that thread, it looks like they’re using a lot of “expressions,” which look to be the equivalent of pyDrivers, for solving stuff that we can do with Constraints in Blender. (A problem we’ve got is that Poses don’t have IPOs and thereby can’t be driven like Shapekeys, but that’s on another subject.)
I figure using a hidden surface would be better than curves, as, for example, by building a simple skull that resides with the rig (CopyLocRotScale or 100% weighted to the head bone, but not deformed by any of it’s children bones) extensibility among similar character models would be made much easier. Interpenetration of static things like the teeth, and to a lesser functional extent eyeballs, could be solved automatically.
I guess it’s sort of like a ‘muscle rig,’ but instead of the character mesh itself constrained to a set of muscles deformed by an Armature, it’s deformed by an Armature, which has lots of ‘skin’ deforming controls constrained to a simpler ‘skeleton’ mesh (sort of like Cessen’s Biped Rig, in fact!) to preserve volume, the ‘skeleton’ itself being driven by the same Armature. (Ha, the cyclic dependency is apparent in even the sentence!)
I’ve hadn’t played with pyConstraints either, but gave them a look yesterday. Tried making a CopyRot constraint. I don’t know why I hadn’t realized it beforehand, but they’re evaluated just like regular Constraints so they end up creating the same cyclic dependencies!
Maybe I should think about invest in some rigging DVDs or something – I wonder if this is even possible in other packages, or if cyclic dependency is a fundamental aspect of parent-child dependencies in general!
…Naw, I’ll just wait and play with the new Curves stuff.