From 3ba5478d0f4c61ccdd51daafc6d347c9ba00446f Mon Sep 17 00:00:00 2001 From: Toke Jepsen Date: Wed, 24 Jul 2019 23:17:52 +0100 Subject: [PATCH 1/5] Validate Maya render output folder to not be scene dependent. --- pype/plugins/maya/publish/validate_rendersettings.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pype/plugins/maya/publish/validate_rendersettings.py b/pype/plugins/maya/publish/validate_rendersettings.py index a41fe7b5f2..952c028bbf 100644 --- a/pype/plugins/maya/publish/validate_rendersettings.py +++ b/pype/plugins/maya/publish/validate_rendersettings.py @@ -9,9 +9,9 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin): """Validates the global render settings * File Name Prefix must be as followed: - * vray: // - * arnold: // - * default: // + * vray: maya// + * arnold: maya// + * default: maya// * Frame Padding must be: * default: 4 @@ -34,8 +34,8 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin): actions = [pype.api.RepairAction] DEFAULT_PADDING = 4 - RENDERER_PREFIX = {"vray": "//"} - DEFAULT_PREFIX = "//_" + RENDERER_PREFIX = {"vray": "maya//"} + DEFAULT_PREFIX = "maya//_" def process(self, instance): From dd944d0dda65a7d8c787b28308be46d8eb1f2916 Mon Sep 17 00:00:00 2001 From: Toke Jepsen Date: Wed, 24 Jul 2019 23:20:31 +0100 Subject: [PATCH 2/5] Create write nodes with no version in the output path. --- pype/nuke/lib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pype/nuke/lib.py b/pype/nuke/lib.py index 6a57704fff..bb8131b849 100644 --- a/pype/nuke/lib.py +++ b/pype/nuke/lib.py @@ -191,7 +191,7 @@ def create_write_node(name, data): # build file path to workfiles fpath = str(anatomy_filled["work"]["folder"]).replace("\\", "/") - fpath = '{work}/renders/v{version}/{subset}.{frame}.{ext}'.format( + fpath = '{work}/renders/nuke/{subset}/{subset}.{frame}.{ext}'.format( work=fpath, version=data["version"], subset=data["subset"], frame=data["frame"], ext=data["nuke_dataflow_writes"]["file_type"]) From 62ce7fad853188a3727899db2bdaf368a4321b8c Mon Sep 17 00:00:00 2001 From: Toke Jepsen Date: Sat, 27 Jul 2019 12:36:53 +0100 Subject: [PATCH 3/5] Account for host name in work file path. --- pype/nuke/lib.py | 15 ++++++++++--- .../maya/publish/validate_rendersettings.py | 22 ++++++++++++++++--- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/pype/nuke/lib.py b/pype/nuke/lib.py index bb8131b849..37d3f9eb40 100644 --- a/pype/nuke/lib.py +++ b/pype/nuke/lib.py @@ -191,10 +191,19 @@ def create_write_node(name, data): # build file path to workfiles fpath = str(anatomy_filled["work"]["folder"]).replace("\\", "/") - fpath = '{work}/renders/nuke/{subset}/{subset}.{frame}.{ext}'.format( - work=fpath, version=data["version"], subset=data["subset"], + pattern = "{work}/renders/nuke/{subset}/{subset}.{frame}.{ext}" + # Workfile paths can be configured to have host name in file path. + # In this case we want to avoid duplicate folder names. + if "nuke" in fpath.lower(): + pattern = pattern.replace("nuke/", "") + + fpath = pattern.format( + work=fpath, + version=data["version"], + subset=data["subset"], frame=data["frame"], - ext=data["nuke_dataflow_writes"]["file_type"]) + ext=data["nuke_dataflow_writes"]["file_type"] + ) # create directory if not os.path.isdir(os.path.dirname(fpath)): diff --git a/pype/plugins/maya/publish/validate_rendersettings.py b/pype/plugins/maya/publish/validate_rendersettings.py index 952c028bbf..f4798e6dbe 100644 --- a/pype/plugins/maya/publish/validate_rendersettings.py +++ b/pype/plugins/maya/publish/validate_rendersettings.py @@ -1,4 +1,7 @@ +import os + import maya.cmds as cmds +import pymel.core as pm import pyblish.api import pype.api @@ -66,8 +69,8 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin): cls.log.error("Animation needs to be enabled. Use the same " "frame for start and end to render single frame") - fname_prefix = cls.RENDERER_PREFIX.get(renderer, - cls.DEFAULT_PREFIX) + fname_prefix = cls.get_prefix(cls, renderer) + if prefix != fname_prefix: invalid = True cls.log.error("Wrong file name prefix: %s (expected: %s)" @@ -80,6 +83,19 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin): return invalid + @classmethod + def get_prefix(cls, renderer): + prefix = cls.RENDERER_PREFIX.get(renderer, cls.DEFAULT_PREFIX) + output_path = os.path.join( + pm.workspace.getcwd(), pm.workspace.fileRules["images"] + ) + # Workfile paths can be configured to have host name in file path. + # In this case we want to avoid duplicate folder names. + if "maya" in output_path.lower(): + prefix = prefix.replace("maya/", "") + + return prefix + @classmethod def repair(cls, instance): @@ -94,7 +110,7 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin): node = render_attrs["node"] prefix_attr = render_attrs["prefix"] - fname_prefix = cls.RENDERER_PREFIX.get(renderer, cls.DEFAULT_PREFIX) + fname_prefix = cls.get_prefix(cls, renderer) cmds.setAttr("{}.{}".format(node, prefix_attr), fname_prefix, type="string") From d5c76a4c10366e969113168e2eb6e1639024ea39 Mon Sep 17 00:00:00 2001 From: Toke Jepsen Date: Mon, 29 Jul 2019 09:15:03 +0100 Subject: [PATCH 4/5] Fix hardcoded deadline submission. --- .../maya/publish/submit_maya_deadline.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/pype/plugins/maya/publish/submit_maya_deadline.py b/pype/plugins/maya/publish/submit_maya_deadline.py index b7a4a835fa..6264609fdf 100644 --- a/pype/plugins/maya/publish/submit_maya_deadline.py +++ b/pype/plugins/maya/publish/submit_maya_deadline.py @@ -51,7 +51,7 @@ def get_renderer_variables(renderlayer=None): # returns an index number. filename_base = os.path.basename(filename_0) extension = os.path.splitext(filename_base)[-1].strip(".") - filename_prefix = "//" + filename_prefix = cmds.getAttr("defaultRenderGlobals.imageFilePrefix") return {"ext": extension, "filename_prefix": filename_prefix, @@ -77,8 +77,19 @@ def preview_fname(folder, scene, layer, padding, ext): """ - # Following hardcoded "/_/" - output = "{scene}/{layer}/{layer}.{number}.{ext}".format( + fileprefix = cmds.getAttr("defaultRenderGlobals.imageFilePrefix") + output = fileprefix + ".{number}.{ext}" + # RenderPass is currently hardcoded to "beauty" because its not important + # for the deadline submission, but we will need something to replace + # "". + mapping = { + "": "{scene}", + "": "{layer}", + "RenderPass": "beauty" + } + for key, value in mapping.items(): + output = output.replace(key, value) + output = output.format( scene=scene, layer=layer, number="#" * padding, From f8f9c4f085ccd5463095d548a3f7ee85eafb997c Mon Sep 17 00:00:00 2001 From: Toke Jepsen Date: Mon, 29 Jul 2019 15:51:43 +0100 Subject: [PATCH 5/5] Fix get_prefix and workspace root. --- pype/plugins/maya/publish/validate_rendersettings.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pype/plugins/maya/publish/validate_rendersettings.py b/pype/plugins/maya/publish/validate_rendersettings.py index f4798e6dbe..0d983b9cf1 100644 --- a/pype/plugins/maya/publish/validate_rendersettings.py +++ b/pype/plugins/maya/publish/validate_rendersettings.py @@ -1,6 +1,6 @@ import os -import maya.cmds as cmds +from maya import cmds, mel import pymel.core as pm import pyblish.api @@ -69,7 +69,7 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin): cls.log.error("Animation needs to be enabled. Use the same " "frame for start and end to render single frame") - fname_prefix = cls.get_prefix(cls, renderer) + fname_prefix = cls.get_prefix(renderer) if prefix != fname_prefix: invalid = True @@ -86,8 +86,10 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin): @classmethod def get_prefix(cls, renderer): prefix = cls.RENDERER_PREFIX.get(renderer, cls.DEFAULT_PREFIX) + # maya.cmds and pymel.core return only default project directory and + # not the current one but only default. output_path = os.path.join( - pm.workspace.getcwd(), pm.workspace.fileRules["images"] + mel.eval("workspace -q -rd;"), pm.workspace.fileRules["images"] ) # Workfile paths can be configured to have host name in file path. # In this case we want to avoid duplicate folder names. @@ -110,7 +112,7 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin): node = render_attrs["node"] prefix_attr = render_attrs["prefix"] - fname_prefix = cls.get_prefix(cls, renderer) + fname_prefix = cls.get_prefix(renderer) cmds.setAttr("{}.{}".format(node, prefix_attr), fname_prefix, type="string")