Skip to content

create_unreal_skeletalmesh

Creator for Unreal Skeletal Meshes.

CreateUnrealSkeletalMesh

Bases: MayaCreator

Unreal Static Meshes with collisions.

Source code in client/ayon_maya/plugins/create/create_unreal_skeletalmesh.py
 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
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
class CreateUnrealSkeletalMesh(plugin.MayaCreator):
    """Unreal Static Meshes with collisions."""

    identifier = "io.openpype.creators.maya.unrealskeletalmesh"
    label = "Unreal - Skeletal Mesh"
    product_type = "skeletalMesh"
    icon = "thumbs-up"

    # Defined in settings
    joint_hints = set()

    def get_dynamic_data(
        self,
        project_name,
        folder_entity,
        task_entity,
        variant,
        host_name,
        instance
    ):
        """
        The default product name templates for Unreal include {asset} and thus
        we should pass that along as dynamic data.
        """
        dynamic_data = super(CreateUnrealSkeletalMesh, self).get_dynamic_data(
            project_name,
            folder_entity,
            task_entity,
            variant,
            host_name,
            instance
        )
        dynamic_data["asset"] = folder_entity["name"]
        return dynamic_data

    def create(self, product_name, instance_data, pre_create_data):

        with lib.undo_chunk():
            instance = super(CreateUnrealSkeletalMesh, self).create(
                product_name, instance_data, pre_create_data)
            instance_node = instance.get("instance_node")

            # We reorganize the geometry that was originally added into the
            # set into either 'joints_SET' or 'geometry_SET' based on the
            # joint_hints from project settings
            members = cmds.sets(instance_node, query=True) or []
            cmds.sets(clear=instance_node)

            geometry_set = cmds.sets(name="geometry_SET", empty=True)
            joints_set = cmds.sets(name="joints_SET", empty=True)

            cmds.sets([geometry_set, joints_set], forceElement=instance_node)

            for node in members:
                if node in self.joint_hints:
                    cmds.sets(node, forceElement=joints_set)
                else:
                    cmds.sets(node, forceElement=geometry_set)

    def get_instance_attr_defs(self):

        defs = lib.collect_animation_defs()

        defs.extend([
            BoolDef("renderableOnly",
                    label="Renderable Only",
                    tooltip="Only export renderable visible shapes",
                    default=False),
            BoolDef("visibleOnly",
                    label="Visible Only",
                    tooltip="Only export dag objects visible during "
                            "frame range",
                    default=False),
            BoolDef("includeParentHierarchy",
                    label="Include Parent Hierarchy",
                    tooltip="Whether to include parent hierarchy of nodes in "
                            "the publish instance",
                    default=False),
            BoolDef("worldSpace",
                    label="World-Space Export",
                    default=True),
            BoolDef("refresh",
                    label="Refresh viewport during export",
                    default=False),
            TextDef("attr",
                    label="Custom Attributes",
                    default="",
                    placeholder="attr1, attr2"),
            TextDef("attrPrefix",
                    label="Custom Attributes Prefix",
                    placeholder="prefix1, prefix2")
        ])

        return defs

get_dynamic_data(project_name, folder_entity, task_entity, variant, host_name, instance)

The default product name templates for Unreal include {asset} and thus we should pass that along as dynamic data.

Source code in client/ayon_maya/plugins/create/create_unreal_skeletalmesh.py
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
def get_dynamic_data(
    self,
    project_name,
    folder_entity,
    task_entity,
    variant,
    host_name,
    instance
):
    """
    The default product name templates for Unreal include {asset} and thus
    we should pass that along as dynamic data.
    """
    dynamic_data = super(CreateUnrealSkeletalMesh, self).get_dynamic_data(
        project_name,
        folder_entity,
        task_entity,
        variant,
        host_name,
        instance
    )
    dynamic_data["asset"] = folder_entity["name"]
    return dynamic_data