From cc3167bf8cd43eab56216f6d7da1badd2c3c9b96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20LORRAIN?= Date: Tue, 16 Nov 2021 16:57:36 +0100 Subject: [PATCH] Deadline publish plugin override output option --- .../maya/plugins/create/create_render.py | 2 ++ .../maya/plugins/publish/collect_render.py | 5 +++++ .../plugins/publish/submit_maya_deadline.py | 19 +++++++++++++++++-- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index fa5e73f3ed4..38d18c71b93 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -174,6 +174,7 @@ def process(self): ]) cmds.setAttr("{}.machineList".format(self.instance), lock=True) + cmds.setAttr("{}.overrideOutput".format(self.instance), lock=False) self._rs = renderSetup.instance() layers = self._rs.getRenderLayers() if use_selection: @@ -265,6 +266,7 @@ def _create_render_settings(self): self.data["framesPerTask"] = 1 self.data["whitelist"] = False self.data["machineList"] = "" + self.data["overrideOutput"] = "" self.data["useMayaBatch"] = False self.data["tileRendering"] = False self.data["tilesX"] = 2 diff --git a/openpype/hosts/maya/plugins/publish/collect_render.py b/openpype/hosts/maya/plugins/publish/collect_render.py index cbddb86e534..772afb6d212 100644 --- a/openpype/hosts/maya/plugins/publish/collect_render.py +++ b/openpype/hosts/maya/plugins/publish/collect_render.py @@ -426,6 +426,11 @@ def parse_options(self, render_globals): key = "Whitelist" if attributes["whitelist"] else "Blacklist" options["renderGlobals"][key] = machine_list + # Override Output + override_output = attributes["overrideOutput"] + if override_output: + options["overrideOutput"] = override_output + # Suspend publish job state = "Suspended" if attributes["suspendPublishJob"] else "Active" options["publishJobState"] = state diff --git a/openpype/modules/default_modules/deadline/plugins/publish/submit_maya_deadline.py b/openpype/modules/default_modules/deadline/plugins/publish/submit_maya_deadline.py index 51a19e2aadf..5716f3b2001 100644 --- a/openpype/modules/default_modules/deadline/plugins/publish/submit_maya_deadline.py +++ b/openpype/modules/default_modules/deadline/plugins/publish/submit_maya_deadline.py @@ -158,7 +158,7 @@ def _format_tiles( return out, cfg -def get_renderer_variables(renderlayer, root): +def get_renderer_variables(renderlayer, root, override=False): """Retrieve the extension which has been set in the VRay settings. Will return None if the current renderer is not VRay @@ -179,6 +179,10 @@ def get_renderer_variables(renderlayer, root): padding = cmds.getAttr("{}.{}".format(render_attrs["node"], render_attrs["padding"])) + if override: + workspace = cmds.workspace(q=True, rootDirectory=True) + cmds.workspace(root, openWorkspace=True) + filename_0 = cmds.renderSettings( fullPath=True, gin="#" * int(padding), @@ -186,6 +190,10 @@ def get_renderer_variables(renderlayer, root): layer=renderlayer or lib.get_current_renderlayer())[0] filename_0 = re.sub('_', '_beauty', filename_0, flags=re.IGNORECASE) + + if override: + cmds.workspace(workspace, openWorkspace=True) + prefix_attr = "defaultRenderGlobals.imageFilePrefix" if renderer == "vray": renderlayer = renderlayer.split("_")[-1] @@ -393,6 +401,11 @@ def process(self, instance): self.log.debug(filepath) + override_output = False + override_output_path = instance.data.get('overrideOutput') + if override_output_path: + override_output = True + # Gather needed data ------------------------------------------------ default_render_file = instance.context.data.get('project_settings')\ .get('maya')\ @@ -402,12 +415,14 @@ def process(self, instance): filename = os.path.basename(filepath) comment = context.data.get("comment", "") dirname = os.path.join(workspace, default_render_file) + if override_output: + dirname = override_output_path renderlayer = instance.data['setMembers'] # rs_beauty deadline_user = context.data.get("user", getpass.getuser()) jobname = "%s - %s" % (filename, instance.name) # Get the variables depending on the renderer - render_variables = get_renderer_variables(renderlayer, dirname) + render_variables = get_renderer_variables(renderlayer, dirname, override_output) filename_0 = render_variables["filename_0"] if self.use_published: new_scene = os.path.splitext(filename)[0]