Hi, can anyone take a look at this?
Scene download: pose_space_deformation.blend (583 KB)
I think using drivers is a way to implement that “pose-space deformation” technique seen in Maya and others, as explained here:
It’s when you activate corrective shapekeys based on the position of bones relative to each other, rather than their rotation. This way you avoid having weird rotations not activate the drivers.
The driver expression is this:
max( ( ((sourceX-pivotX)*(targetX-pivotX)) + ((sourceY-pivotY)*(targetY-pivotY)) + ((sourceZ-pivotZ)*(targetZ-pivotZ)) ) / (source_pivot_distance*target_pivot_distance), 0 )
It’s a dot product, and the variables are the world-space coordinates of the bones involved.
It’s just an experiment, I imagine that as it is it’s too heavy for a production rig that would use a lot of drivers like this. You need 11 variables per corrective shape-key.
Hopefully someone can find a way to optimise it etc., maybe taking the bone positions as properties so you don’t need as many variables or something. EDIT: this is certainly possible with a custom function as the driver expression.