I'm looking for your input/experiences/suggestions using armature actions built for one rig on a different rig.
I have characters -- and related armature actions -- built from various techniques such as:
- maximo (walk & jog cycles, for example)
- DAZ imports (some custom-built actions like an arm_stand)
- MB_Lab (some custom-built actions like riding a bicycle)
I now want to somehow mix and match in a scene that uses some of these characters, for example when an MB_lab and maximo character walk together side-by-side, mixed in the NLA editor.
I can think of several strategies that could send me down the worm-hole:
- Add additional/dual armatures as parents to a given character with Automated weights for when I need to apply an action that uses an given armature.
- use python to convert action bone references from a foreign rig reference to the characters rig reference.
TWO ARMATURES:
If I have more than one armature as parents to a given character,
I'd be sure that there are no duplicate bone names, so the Vertex Groups are unique for Automated weights. Armature1 would have "foreArm.fk.L" while Armature2 might have "L.foreArm.fk".
When I need to apply an action that uses an given armature, I might have to disable one or other armature modifiers during a range of frames, or might have to temporarily change VGs vertex weights (ouch!)
PYTHON ACTION CONVERSION:
The python-conversion approaches would convert Action bone-references from one armature type to another, with bone-to-bone mappings. This would be complicated by converting actions that use IK in one armature to an armature with no IK, or perhaps easier to add IK to an FK-only armature (maximo). There might be other side-effects or poor animations where one armature has twist and other auxiliary bones.
### set up replacement patterns
def initrep( rep, baseName='' ):
rep = [ [baseName, "", 0 ] ] # get rid of basename
rep.append( ['Pelvis', 'torso', 0 ] )
rep.append( ['Head', 'head', 0 ] )
rep.append( ['L Thigh', 'thigh_fk.L', 0 ] )
rep.append( ['R Thigh', 'thigh_fk.R', 0 ] )
rep.append( ['L Calf', 'shin_fk.L', 0 ] )
rep.append( ['L Foot', 'foot_fk.L', 0 ] )
rep.append( ['R Calf', 'shin_fk.R', 0 ] )
rep.append( ['R Foot', 'foot_fk.R', 0 ] )
rep.append( ['Toe01', 'DELETE', 2 ] )
rep.append( ['Toe11', 'DELETE', 2 ] )
... etc ...