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