Search code examples
animationmaya

How do I insert time into my Maya animation timeline


I frequently get myself into trouble when I've put together a complex animation in Maya with lots of rigs and connections and animated attributes and then find that I need to insert 100 frames somewhere in my 5000 frame animation to make space for additional animation. In the past, I've struggled with selecting all objects and all of their keyframes to move them down the timeline as it seems that I always miss some attributes that don't get moved and then things get ugly and I waste a lot of time fixing things.

I feel like there must be a more elegant way to insert a certain number of frames into the timeline easily without worrying that some keyframes will be left behind. I've tried my luck with the dope sheet, but I don't really find it any easier to use than the graph editor.


Solution

  • "Elegant" in this case is in the eye of the beholder.

    Effectively what you need to do is move all the keys after a given point by a given amount. The hard part is that moving the keys will change the meaning of the curves: the interpolation is going to change no matter what you do unless you've got locked tangents on both sides of the change.

    if you just want to insert keys at a particular point in time, it'll look like this:

    def move_keys_after(start, time_shift):
        key_string = '%s:' % start
        for curve in cmds.ls(type='animCurve'):
            before =  cmds.keyframe(curve, q=True)
            cmds.keyframe(curve, r = True,  tc = time_shift, t = (key_string,), iub=True)
            after = cmds.keyframe(curve, q=True)
            print curve, before, "->", after
    
    
    move_keys_after( 10, 20)
    

    That example moves all of the keys in the scene after time start by time_shift frames. If you want to limit this to an object you could get the anim curves from the object directly or use the animation flag of the keyframe command