def traverse_animation_curves(fbx_scene, fbx_node, fbx_layer, egg_parent): for i in range(fbx_node.GetChildCount()): fbx_child = fbx_node.GetChild(i) if fbx_child.GetSkeleton() is None: continue xform_new = EggXfmSAnim("xform") xform_new.setOrder(EggXfmSAnim.getStandardOrder()) # xform_new.setOrder("shprt") xform_new.setFps(30) for transform in get_transforms(fbx_child, fbx_layer): xform_new.addData(transform) egg_table = EggTable(fbx_child.GetName()) egg_table.addChild(xform_new) egg_parent.addChild(egg_table) traverse_animation_curves(fbx_scene, fbx_child, fbx_layer, egg_table)
def fbx2egg_animation(fbx_path, egg_path): manager, scene = FbxCommon.InitializeSdkObjects() FbxCommon.LoadScene(manager, scene, fbx_path) prepare_scene(scene) data = EggData() data.addChild(EggCoordinateSystem(CSYupRight)) skeleton = EggTable("<skeleton>") walking = EggTable("walking") # TODO: get name from animation layer walking.setTableType(EggTable.stringTableType("bundle")) walking.addChild(skeleton) table = EggTable() table.addChild(walking) for layer in get_anim_layers(scene): traverse_animation_curves(scene, scene.GetRootNode(), layer, skeleton) data.addChild(table) data.writeEgg(egg_path)