Archive for September, 2013

MotionBuilder 2014 Take Swap save bug Fix

MotionBuilder 2014 has a save bug where the index of takes (FBX anim stacks) will swap around on save. At work our game animation export setup relies on the index of the takes and all that breaks once someone presses save.. Not great :-)

Extension/service pack time has come and gone for the other 2014 media and entertainment products. So I think it’s fair to assume that nothing is coming for MotionBuilder and that we are on our own, in dealing with this (unless our Subscription level covers us).

As it turns out, the fix is really straightforward – once you find it. Simply make sure you create a take before you save. Meaning, after opening a scene with multiple takes in it, if you save before creating a new take, you will get the bug. If you create a new take prior to saving, you’ll be fine. You can even delete it, before you save. Obviously we cannot be counted on to remember to do this rather awkward procedure, so here is how to make it happen automatically.

 
## Define take fix and add/remove pre-save callback methods somewhere ##
def prevent_take_save_bug():
    print 'Take fix is running...'
    new_take = FBTake("Take_Save_Bug_Temp_Take")
    FBSystem().Scene.Takes.append(new_take)
    new_take.FBDelete()
    
def onFileSave(control, event):
    """Run this function every time a scene is saved"""
    prevent_take_save_bug()
    
def fileSaveRegister():
    """Register file pre-save events"""
    app.OnFileSave.Add(onFileSave)
    app.OnFileExit.Add(fileSaveUnregister)
    
def fileSaveUnregister(control=None, event=None):
    """Unregister file pre-save events"""
    app.OnFileSave.Remove(onFileSave)    
    app.OnFileExit.Remove(fileSaveUnregister)
	
## Add the callback, most likely on MotionBuilder startup ##
fileNewRegister()
 
Monday, September 30th, 2013 Main No Comments