Maya 2012: HumanIK

i’m trying to get maya’s new humanIK rig in our game pipeline. previously we did custom rigs and used character sets with clips as a port to our game engine. worked fine, but mocap data was too hard(at least for me) to bake on the rig.
for mocap data the humanIK rig(from motionbuilder) seems pretty solid in maya 2012. unfortunately there are so many inputs i’m not sure what to add to character sets so my animations don’t break.
anybody useing this setup for their animation pipline or how do you handle exporting your animation clips?

I know we were using human IK here at CCP successfully, and it rocked. But TBH I am not sure how we handled it on the mobu side (just how we handled some of the plotting and exporting).

Abstracting the data onto a dummy skeleton that gets exported is certainly doable. You’d need to bake to this skeleton, and then save the clips as you normally would. Pros and Cons, but certainly workable.

I haven’t played around much with 2012 yet…

thanks for the answers. maybe i need to clarify our pipeline:
we use maya clips to store the animations. we just add all animated nodes of our rig to the character set and we’re fine. our exporter bakes the information on the joints. so basically, as animator you can do what you want in maya, as long as the necessary information for animating is stored in clips.
for the humanIK rig especially when baking mocap data, the animations seem to break. i guess i just don’t have the right attributes in my set. aren’t the ik translate/rotate and fk rotate attributes enough?

Have you tried to add all the Control Rig Effector nodes too? Theres a ton of “computeLocal” nodes as well as the master HIKproperties1 node too. You may have to include all that mumbojumbo in the character set as HumanIK keying can effect the whole character and therefore all the hidden stuff. If you can’t figure it out with all the nodes included in the character set, then try to redirect to a character that is ust characterized without a Control Rig?

that’s the problem. there’s so much hidden stuff and nothing is documented. so i have to go try and error to see what works out. strange that there are almost no threads about humanIK and maya on the web.
found some stuff out:
it’s enough to key the ik and fk translate and rotate node and put them in the character set.
the problem is you can’t bake to the rig when a character set is on those nodes. it breaks the connections. so you have to do it in clean file without set.
but for classic keyframe animations you need more stuff in the set, as long you don’t set full body keys on the rig.
for tht future it’s probably best to find a solution to bake mocap to custom rigs. at least i know how they work and what needs to be keyed. or wait for better documentation. :wink:

I have also been messing around with HumanIK in Maya 2012, its a really slick system. Best way I found is make a character (characterize it) from your motion capture data. After that, set the baked character (characterized and setup with a control rig) to use the motioncapture character as its source input.

I would recomend using the add to an animation layer to automatically bake the rig to a layer, then select all the nodes/attrs that are in that layer so you can get at it.
But the way it works, with the controls and the skeleton, all you need is to bake the data for the skeleton, not all the rig controls so you end up with keyframes on the skeleton that is exported to the game engine.

Anyone have any luck setting up a pose library system with the HIK in Maya 2012?

you can store single fBX files with the character keyframed or write your own format/ use the maya animation format.

If you use FBX then you can share the poses between mobu and maya and use override layers as a storage/creation system for the poses as an idea.

Again the same problems of what to have selected comes up and if you look at the code that exists in the red( http://www.creativecrash.com/maya/downloads/scripts-plugins/animation/c/red9-studio-pack since I think the new one deals with some of the trickier bits of updating the HIK by code.

Hi Brad, the HIK management in the latest version (v1.09) is broken at the moment.
Had a big shift around of code and didn’t get to put the HIKContext management back in. Should be fixed in the next release hopefully.

:slight_smile: thanks for the heads up, I didn’t grab that one yet

StudioPack v1.10 should be up in the next few days with tons of fixes and full HIK integration thanks to Yang at Autodesk for the pointers. So all the copy Attributes / copy Keys, snap nodes etc will all run with or without Hierarchy flag on HIK baked data. There’s also a few new videos which I’ll upload to Vimeo with the release. Talk about jumping through hoops to to make tools work with the HIK systems!

Awesome guys, thanks for the heads up!

I had thought about doing the poses as .FBX files, baked from the skeleton, but I was running into all kinds of code errors dealing with the HIK system (I am new to maya and python). This will be a great starting point for me.

The big one for any coding to do with the HIK stuff is you need to manage the callbacks that Maya and the systems run under the hood. For example you can’t just use getAttr and setAttrs on HIK nodes as they will snap back. When I stick the latest version of the pack up take a look at the HIKContext in the Red9_General module. This is easy to wrap, you’d just use the with() statement and everything else will then be managed for you. Code goes something like this:

class HIKContext(object):
    """
    Simple Context Manager for restoring HIK Animation settings
    """
    def __init__(self, NodeList):
        self.objs=cmds.ls(sl=True,l=True)
        self.NodeList=NodeList
        self.managedHIK = False
        #We set the keying group mainly for the copyKey code, stops the entire rig being
        #manipulated on copy of single effector data
        self.keyingGroups=cmds.keyingGroup(q=True, fil=True)
        if [node for node in self.NodeList if cmds.nodeType(node) == 'hikIKEffector'\
            or cmds.nodeType(node) == 'hikFKJoint']:
            self.managedHIK = True
           
    def __enter__(self):
        if self.managedHIK:
            cmds.keyingGroup(fil="NoKeyingGroups")
            log.info('Processing HIK Mode >> using HIKContext Manager:')
            cmds.select(self.NodeList)
            mel.eval("hikManipStart 1 1")  

    def __exit__(self, exc_type, exc_value, traceback):
        if self.managedHIK:
            cmds.keyingGroup(fil=self.keyingGroups)
            cmds.select(self.NodeList)
            mel.eval("hikManipStop")
            log.info('Exit HIK Mode >> HIKContext Manager:')
        if exc_type:
            log.exception('%s : %s'%(exc_type, exc_value))
        cmds.select(self.objs)
        return True 

The key is the start and stop manip calls

mel.eval(“hikManipStart 1 1”)
do your shit here:
mel.eval(“hikManipStop”)

Hope that helps. Like I say the latest build will probably go up on my blog and CreativeCrash in the next day or too

Red

You know you just saved me weeks of frustration? Thanks!

Yeah it’s not a lot of fun dealing with the internals of HIK.
I’ve just added StudioPack v1.10 to my blog for download, it’s also on CreativeCrash. Let me know how you get on!

http://red9-consultancy.blogspot.com/

http://vimeo.com/user9491246
https://www.creativecrash.com/maya/downloads/scripts-plugins/animation/c/red9-studio-pack