Skip to content

create_mantra_rop

Creator plugin to create Mantra ROP.

CreateMantraROP

Bases: HoudiniCreator

Mantra ROP

Source code in client/ayon_houdini/plugins/create/create_mantra_rop.py
  7
  8
  9
 10
 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
 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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
class CreateMantraROP(plugin.HoudiniCreator):
    """Mantra ROP"""
    identifier = "io.openpype.creators.houdini.mantra_rop"
    label = "Mantra ROP"
    product_type = "mantra_rop"
    icon = "magic"

    # Default render target
    render_target = "farm_split"

    def create(self, product_name, instance_data, pre_create_data):
        import hou  # noqa
        # Transfer settings from pre create to instance
        creator_attributes = instance_data.setdefault(
            "creator_attributes", dict())
        for key in ["render_target", "review"]:
            if key in pre_create_data:
                creator_attributes[key] = pre_create_data[key]

        instance_data.update({"node_type": "ifd"})

        instance = super(CreateMantraROP, self).create(
            product_name,
            instance_data,
            pre_create_data)

        instance_node = hou.node(instance.get("instance_node"))

        ext = pre_create_data.get("image_format")

        renders_dir = hou.text.expandString("$HIP/pyblish/renders/")
        filepath = f"{renders_dir}{product_name}/{product_name}.$F4.{ext}"

        parms = {
            # Render Frame Range
            "trange": 1,
            # Mantra ROP Setting
            "vm_picture": filepath,
        }

        if pre_create_data.get("render_target") == "farm_split":
            export_dir = hou.text.expandString("$HIP/pyblish/ifd/")
            ifd_filepath = (
                f"{export_dir}{product_name}/{product_name}.$F4.ifd"
            )
            parms["soho_outputmode"] = 1
            parms["soho_diskfile"] = ifd_filepath

        if self.selected_nodes:
            # If camera found in selection
            # we will use as render camera
            camera = None
            for node in self.selected_nodes:
                if node.type().name() == "cam":
                    camera = node.path()

            if not camera:
                self.log.warning("No render camera found in selection")

            parms.update({"camera": camera or ""})

        custom_res = pre_create_data.get("override_resolution")
        if custom_res:
            parms.update({"override_camerares": 1})
        instance_node.setParms(parms)

        # Lock some Avalon attributes
        to_lock = ["productType", "id"]
        self.lock_parameters(instance_node, to_lock)

    def get_instance_attr_defs(self):
        """get instance attribute definitions.

        Attributes defined in this method are exposed in
            publish tab in the publisher UI.
        """

        render_target_items = {
            "local": "Local machine rendering",
            "local_no_render": "Use existing frames (local)",
            "farm": "Farm Rendering",
            "farm_split": "Farm Rendering - Split export & render jobs",
        }

        return [
            BoolDef("review",
                    label="Review",
                    tooltip="Mark as reviewable",
                    default=True),
            EnumDef("render_target",
                    items=render_target_items,
                    label="Render target",
                    default=self.render_target)
        ]

    def get_pre_create_attr_defs(self):
        image_format_enum = [
            "bmp", "cin", "exr", "jpg", "pic", "pic.gz", "png",
            "rad", "rat", "rta", "sgi", "tga", "tif",
        ]

        attrs = super(CreateMantraROP, self).get_pre_create_attr_defs()

        attrs += [
            EnumDef("image_format",
                    image_format_enum,
                    default="exr",
                    label="Image Format Options"),
            BoolDef("override_resolution",
                    label="Override Camera Resolution",
                    tooltip="Override the current camera "
                            "resolution, recommended for IPR.",
                    default=False),
        ]
        return attrs + self.get_instance_attr_defs()

get_instance_attr_defs()

get instance attribute definitions.

Attributes defined in this method are exposed in publish tab in the publisher UI.

Source code in client/ayon_houdini/plugins/create/create_mantra_rop.py
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
def get_instance_attr_defs(self):
    """get instance attribute definitions.

    Attributes defined in this method are exposed in
        publish tab in the publisher UI.
    """

    render_target_items = {
        "local": "Local machine rendering",
        "local_no_render": "Use existing frames (local)",
        "farm": "Farm Rendering",
        "farm_split": "Farm Rendering - Split export & render jobs",
    }

    return [
        BoolDef("review",
                label="Review",
                tooltip="Mark as reviewable",
                default=True),
        EnumDef("render_target",
                items=render_target_items,
                label="Render target",
                default=self.render_target)
    ]