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..79c7e850886 100644 --- a/openpype/hosts/maya/plugins/publish/collect_render.py +++ b/openpype/hosts/maya/plugins/publish/collect_render.py @@ -90,6 +90,9 @@ def process(self, context): return render_globals = render_instance + # Get global overrides and translate to Deadline values + overrides = self.parse_options(str(render_globals)) + collected_render_layers = render_instance.data["setMembers"] filepath = context.data["currentFile"].replace("\\", "/") asset = api.Session["AVALON_ASSET"] @@ -235,8 +238,14 @@ def process(self, context): for aov in exp_files: full_paths = [] for file in aov[aov.keys()[0]]: - full_path = os.path.join(workspace, default_render_file, - file) + if 'overrideOutput' in overrides: + full_path = os.path.join(overrides['overrideOutput'], + default_render_file, + file) + else: + full_path = os.path.join(workspace, + default_render_file, + file) full_path = full_path.replace("\\", "/") full_paths.append(full_path) publish_meta_path = os.path.dirname(full_path) @@ -380,8 +389,6 @@ def process(self, context): data["families"].append("assscene_render") # Include (optional) global settings - # Get global overrides and translate to Deadline values - overrides = self.parse_options(str(render_globals)) data.update(**overrides) # Define nice label @@ -426,6 +433,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 b21599f0cee..e7590722a91 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,15 @@ 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]