Skip to content

create_arnold_rop

CreateArnoldRop

Bases: RenderLegacyProductTypeCreator

Arnold ROP

Source code in client/ayon_houdini/plugins/create/create_arnold_rop.py
  5
  6
  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
class CreateArnoldRop(plugin.RenderLegacyProductTypeCreator):
    """Arnold ROP"""

    identifier = "io.openpype.creators.houdini.arnold_rop"
    label = "Arnold ROP"
    legacy_product_type = "arnold_rop"
    product_base_type = "render"
    icon = "magic"
    description =  "Create Arnold ROP for rendering with Arnold"

    # Default extension
    ext = "exr"

    # Default render target
    render_target = "farm_split"

    def create(self, product_name, instance_data, pre_create_data):
        import hou
        # 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]

        # Remove the active, we are checking the bypass flag of the nodes
        instance_data.update({"node_type": "arnold"})

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

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

        parms = {
            # Render frame range
            "trange": 1,
            # Arnold ROP settings
            "ar_exr_half_precision": 1           # half precision
        }

        if pre_create_data.get("render_target") in {
            "farm_split",
            "local_export_farm_render",
        }:
            parms["ar_ass_export_enable"] = 1

        instance_node.setParms(parms)

        # Lock any parameters in this list
        to_lock = ["productType", "productBaseType", "id"]
        self.lock_parameters(instance_node, to_lock)

    def set_node_staging_dir(
            self, node, staging_dir, instance, pre_create_data):
        node.setParms({
            "ar_picture": f"{staging_dir}"
                          f"/$OS.$F4.{pre_create_data['image_format']}",
            "ar_ass_file": f"{staging_dir}/ass/$OS.$F4.ass"
        })

    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 Export & Farm Rendering",
            "local_export_farm_render": "Local Export & Farm Rendering",
        }

        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 = [
            EnumDef("image_format",
                    image_format_enum,
                    default=self.ext,
                    label="Image Format Options"),
        ]
        return attrs + self.get_instance_attr_defs()

    def get_publish_families(self):
        return ["render", "arnold_rop"]

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_arnold_rop.py
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
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 Export & Farm Rendering",
        "local_export_farm_render": "Local Export & Farm Rendering",
    }

    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),
    ]