Skip to content

extract_fbx_animation

ExtractFBXAnimation

Bases: MayaExtractorPlugin

Extract Rig in FBX format from Maya.

This extracts the rig in fbx with the constraints and referenced asset content included. This also optionally extract animated rig in fbx with geometries included.

Source code in client/ayon_maya/plugins/publish/extract_fbx_animation.py
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
class ExtractFBXAnimation(plugin.MayaExtractorPlugin):
    """Extract Rig in FBX format from Maya.

    This extracts the rig in fbx with the constraints
    and referenced asset content included.
    This also optionally extract animated rig in fbx with
    geometries included.

    """
    order = pyblish.api.ExtractorOrder
    label = "Extract Animation (FBX)"
    families = ["animation.fbx"]

    def process(self, instance):
        # Define output path
        staging_dir = self.staging_dir(instance)
        filename = "{0}.fbx".format(instance.name)
        path = os.path.join(staging_dir, filename)
        path = path.replace("\\", "/")

        fbx_exporter = fbx.FBXExtractor(log=self.log)
        out_members = instance.data.get("animated_skeleton", [])
        # Export
        # TODO: need to set up the options for users to set up
        # the flags they intended to export
        instance.data["skeletonDefinitions"] = True
        instance.data["referencedAssetsContent"] = True
        fbx_exporter.set_options_from_instance(instance)

        # Export relative only to the first level of the namespace,
        # keeping any nested namespaces intact. Fix #147
        # So `root:sublevel:mesh` becomes `sublevel:mesh`
        namespace = get_namespace(out_members[0]).split(":", 1)[0]
        relative_out_members = [
            strip_namespace(node, namespace) for node in out_members
        ]
        with namespaced(
            ":" + namespace,
            new=False,
            relative_names=True
        ) as _namespace:
            fbx_exporter.export(relative_out_members, path)

        representations = instance.data.setdefault("representations", [])
        representations.append({
            'name': 'fbx',
            'ext': 'fbx',
            'files': filename,
            "stagingDir": staging_dir
        })

        self.log.debug(
            "Extracted FBX animation to: {0}".format(path))