Maya to FBX Batch Export

UPDATE(30/7/13) If you’ve found this post and you’re thinking of using this code please try this instead. It’s my much more reliable and feature-rich exporter. The one below works fine, but it’s really just a check to see if batch exporting is possible. Once I’d established that I made the thing that’s on the other end of the link above.

A simple FBX batch export script, useful for exporting multiple animations from a single file. You can download the .py file here. It should be noted however that this script isn’t tested anywhere near as much as it should be, so back up your work before running it.

# James Kyle 12/3/13, http://www.jameskyle.net
# Maya to UDK batch exporter script
# Contains code borrowed from Mark Jackson's blog, which can be found here: http://markj3d.blogspot.co.uk/2010/09/exporting-simple-skeleton-and-mesh-data.html

# Warning!
# This is probably a bit buggy and isn't tested. Save your work before you use it!
# I take no responsibility for any data lost as a result of this script. Use at your own risk! 🙂

# Instructions:
# Edit the Tuple data below with your own filenames, start frames and end frames.
# Select the mesh/meshes and the root joint of the joint hierarchy you want to export.
# Run script!

# Important importing...
import maya.cmds as cmds
import maya.mel as mm

# Lists of animation names, start frames and end frames.
# Add/remove as required.
exportNames = ("BE_idle", "BE_fistBump", "BE_pickup")
exportStartFrame = (1, 32, 300)
exportEndFrame = (23, 70, 333)

# This code selects the joints and meshes only. This isn't my code!
# Original author credit at the top of the script.
meshes=[]
joints=cmds.ls(sl=True)

#find all joints
joints.extend(cmds.listRelatives(type='joint',allDescendents=True))

#find your Skinned Geo
for skin in cmds.listConnections(joints,type='skinCluster'):
    if skin:
        shape=cmds.skinCluster(skin,query=True,geometry=True)
        meshTransform=cmds.listRelatives(shape,parent=True)[0]
        if meshTransform not in meshes:
            meshes.append(meshTransform)
# Borrowed code ends here.

for x in range(len(exportNames)):
    print exportNames[x]
    # Select the mesh and joints to export
    cmds.select(joints,meshes)

    # FBX Exporter options. Set as required.
    # You can find a reference guide here: http://download.autodesk.com/us/fbx/20112/Maya/_index.html
    # Just add/change what you need.

    # Geometry
    mm.eval("FBXExportSmoothingGroups -v true")
    mm.eval("FBXExportHardEdges -v false")
    mm.eval("FBXExportTangents -v false")
    mm.eval("FBXExportSmoothMesh -v true")
    mm.eval("FBXExportInstances -v false")
    mm.eval("FBXExportReferencedContainersContent -v false")
    # Animation
    mm.eval("FBXExportBakeComplexAnimation -v true")
    mm.eval("FBXExportBakeComplexStart -v "+str(exportStartFrame[x]))
    mm.eval("FBXExportBakeComplexEnd -v "+str(exportEndFrame[x]))
    mm.eval("FBXExportBakeComplexStep -v 1")
    # mm.eval("FBXExportBakeResampleAll -v true")
    mm.eval("FBXExportUseSceneName -v false")
    mm.eval("FBXExportQuaternion -v euler")
    mm.eval("FBXExportShapes -v true")
    mm.eval("FBXExportSkins -v true")
    # Constraints
    mm.eval("FBXExportConstraints -v false")
    # Cameras
    mm.eval("FBXExportCameras -v false")
    # Lights
    mm.eval("FBXExportLights -v false")
    # Embed Media
    mm.eval("FBXExportEmbeddedTextures -v false")
    # Connections
    mm.eval("FBXExportInputConnections -v false")
    # Axis Conversion
    mm.eval("FBXExportUpAxis y")

    # Export!
    mm.eval("FBXExport -f "+exportNames[x]+".fbx -s")
Share

2 thoughts on “Maya to FBX Batch Export

  1. Hi there

    I’ve just come across this code and noticed the bake start and end frames. I’m trying to set the range for the FBX export to say only frames between 200-500 but I can’t find a way to do it without deleting the keys outside of the range. Using the bake settings doesn’t seem to work either. Did you have any luck getting this to work?

  2. There’s not much I can do to help as it’s been a few years since I’ve used Maya or Python for anything and no longer have the means to test anything in this script. What you could do is repost this code elsewhere where more up to date and active Maya/Python users could help. No need to attribute or link to this article or anything if you do.

    I’m sorry I can’t be of much more help.

Leave a Reply

Your email address will not be published. Required fields are marked *