Skip to content

create_render

Create Render instance in Maya.

CreateRender

Bases: RenderlayerCreator

Create and manages renderlayer product per renderLayer in workfile.

This generates a single node in the scene which tells the Creator to if it exists collect Maya rendersetup renderlayers as individual instances. As such, triggering create doesn't actually create the instance node per layer but only the node which tells the Creator it may now collect the renderlayers.

Source code in client/ayon_maya/plugins/create/create_render.py
 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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
class CreateRender(plugin.RenderlayerCreator):
    """Create and manages renderlayer product per renderLayer in workfile.

    This generates a single node in the scene which tells the Creator to if
    it exists collect Maya rendersetup renderlayers as individual instances.
    As such, triggering create doesn't actually create the instance node per
    layer but only the node which tells the Creator it may now collect
    the renderlayers.

    """

    identifier = "io.openpype.creators.maya.renderlayer"
    product_base_type = "renderlayer"  # this won't be integrated
    product_type = product_base_type
    label = "Render"
    icon = "eye"

    singleton_node_name = "renderingMain"

    render_target = "farm"
    render_settings = {}

    def apply_settings(self, project_settings):
        super().apply_settings(project_settings)
        self.render_settings = project_settings["maya"]["render_settings"]

    def get_product_type_items(self) -> list[ProductTypeItem]:
        if self.product_type_items:
            return self.product_type_items
        # Make sure there is one item with product type 'render'
        # - this is to avoid having product type being 'renderlayer'
        return [
            ProductTypeItem(product_type="render")
        ]

    def get_product_name(
        self,
        project_name: str,
        folder_entity: dict[str, Any],
        task_entity: Optional[dict[str, Any]],
        variant: str,
        host_name: Optional[str] = None,
        instance: Optional["CreatedInstance"] = None,
        project_entity: Optional[dict[str, Any]] = None,
        product_type: Optional[str] = None,
    ) -> str:
        if host_name is None:
            host_name = self.create_context.host_name

        return get_product_name(
            project_name=project_name,
            folder_entity=folder_entity,
            task_entity=task_entity,
            host_name=host_name,
            product_base_type="render",
            product_type=product_type or "render",
            variant=variant,
            project_settings=self.project_settings,
        )

    def create(self, product_name, instance_data, pre_create_data):
        # Only allow a single render instance to exist
        if (
                not self._get_singleton_node()
                and self.render_settings.get("apply_render_settings")
        ):
            lib_rendersettings.RenderSettings().set_default_renderer_settings()

        super().create(product_name, instance_data, pre_create_data)

    def get_instance_attr_defs(self):
        """Create instance settings."""

        render_target_items: dict[str, str] = {
            "local": "Local machine rendering",
            "local_no_render": "Use existing frames (local)",
            "farm": "Farm Rendering",
        }

        return [
            EnumDef("render_target",
                    items=render_target_items,
                    label="Render target",
                    default=self.render_target),
            BoolDef("review",
                    label="Review",
                    tooltip="Mark as reviewable",
                    default=True),
            BoolDef("extendFrames",
                    label="Extend Frames",
                    tooltip="Extends the frames on top of the previous "
                            "publish.\nIf the previous was 1001-1050 and you "
                            "would now submit 1020-1070 only the new frames "
                            "1051-1070 would be rendered and published "
                            "together with the previously rendered frames.\n"
                            "If 'overrideExistingFrame' is enabled it *will* "
                            "render any existing frames.",
                    default=False),
            BoolDef("overrideExistingFrame",
                    label="Override Existing Frame",
                    tooltip="Override existing rendered frames "
                            "(if they exist).",
                    default=True),

            # TODO: Should these move to submit_maya_deadline plugin?
            # Tile rendering
            BoolDef("tileRendering",
                    label="Enable tiled rendering",
                    default=False),
            NumberDef("tilesX",
                      label="Tiles X",
                      default=2,
                      minimum=1,
                      decimals=0),
            NumberDef("tilesY",
                      label="Tiles Y",
                      default=2,
                      minimum=1,
                      decimals=0),

            # Additional settings
            BoolDef("convertToScanline",
                    label="Convert to Scanline",
                    tooltip="Convert the output images to scanline images",
                    default=False),
            BoolDef("useReferencedAovs",
                    label="Use Referenced AOVs",
                    tooltip="Consider the AOVs from referenced scenes as well",
                    default=False),

            BoolDef("renderSetupIncludeLights",
                    label="Render Setup Include Lights",
                    default=self.render_settings.get("enable_all_lights",
                                                     False))
        ]

get_instance_attr_defs()

Create instance settings.

Source code in client/ayon_maya/plugins/create/create_render.py
 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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
def get_instance_attr_defs(self):
    """Create instance settings."""

    render_target_items: dict[str, str] = {
        "local": "Local machine rendering",
        "local_no_render": "Use existing frames (local)",
        "farm": "Farm Rendering",
    }

    return [
        EnumDef("render_target",
                items=render_target_items,
                label="Render target",
                default=self.render_target),
        BoolDef("review",
                label="Review",
                tooltip="Mark as reviewable",
                default=True),
        BoolDef("extendFrames",
                label="Extend Frames",
                tooltip="Extends the frames on top of the previous "
                        "publish.\nIf the previous was 1001-1050 and you "
                        "would now submit 1020-1070 only the new frames "
                        "1051-1070 would be rendered and published "
                        "together with the previously rendered frames.\n"
                        "If 'overrideExistingFrame' is enabled it *will* "
                        "render any existing frames.",
                default=False),
        BoolDef("overrideExistingFrame",
                label="Override Existing Frame",
                tooltip="Override existing rendered frames "
                        "(if they exist).",
                default=True),

        # TODO: Should these move to submit_maya_deadline plugin?
        # Tile rendering
        BoolDef("tileRendering",
                label="Enable tiled rendering",
                default=False),
        NumberDef("tilesX",
                  label="Tiles X",
                  default=2,
                  minimum=1,
                  decimals=0),
        NumberDef("tilesY",
                  label="Tiles Y",
                  default=2,
                  minimum=1,
                  decimals=0),

        # Additional settings
        BoolDef("convertToScanline",
                label="Convert to Scanline",
                tooltip="Convert the output images to scanline images",
                default=False),
        BoolDef("useReferencedAovs",
                label="Use Referenced AOVs",
                tooltip="Consider the AOVs from referenced scenes as well",
                default=False),

        BoolDef("renderSetupIncludeLights",
                label="Render Setup Include Lights",
                default=self.render_settings.get("enable_all_lights",
                                                 False))
    ]