From ed76a59d9d6fd691c8eaadd3e678952b583aa2a0 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Wed, 2 Feb 2022 22:53:00 +0100 Subject: [PATCH 001/123] Remove unused code --- .../hosts/maya/plugins/publish/collect_render.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_render.py b/openpype/hosts/maya/plugins/publish/collect_render.py index cbddb86e53..cca3b43fec 100644 --- a/openpype/hosts/maya/plugins/publish/collect_render.py +++ b/openpype/hosts/maya/plugins/publish/collect_render.py @@ -104,13 +104,12 @@ class CollectMayaRender(pyblish.api.ContextPlugin): if deadline_settings["enabled"]: deadline_url = render_instance.data.get("deadlineUrl") - self._rs = renderSetup.instance() - current_layer = self._rs.getVisibleRenderLayer() - maya_render_layers = { - layer.name(): layer for layer in self._rs.getRenderLayers() - } - self.maya_layers = maya_render_layers + # Retrieve render setup layers + rs = renderSetup.instance() + maya_render_layers = { + layer.name(): layer for layer in rs.getRenderLayers() + } for layer in collected_render_layers: try: @@ -473,10 +472,6 @@ class CollectMayaRender(pyblish.api.ContextPlugin): return pool_a, pool_b - def _get_overrides(self, layer): - rset = self.maya_layers[layer].renderSettingsCollectionInstance() - return rset.getOverrides() - @staticmethod def get_render_attribute(attr, layer): """Get attribute from render options. From f3ac88fb54732fc533e507f6064610a6fdbcd716 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Wed, 2 Feb 2022 23:05:30 +0100 Subject: [PATCH 002/123] Move deadline url logic closer together --- .../maya/plugins/publish/collect_render.py | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_render.py b/openpype/hosts/maya/plugins/publish/collect_render.py index cca3b43fec..934f81e298 100644 --- a/openpype/hosts/maya/plugins/publish/collect_render.py +++ b/openpype/hosts/maya/plugins/publish/collect_render.py @@ -71,7 +71,6 @@ class CollectMayaRender(pyblish.api.ContextPlugin): def process(self, context): """Entry point to collector.""" render_instance = None - deadline_url = None for instance in context: if "rendering" in instance.data["families"]: @@ -95,16 +94,6 @@ class CollectMayaRender(pyblish.api.ContextPlugin): asset = api.Session["AVALON_ASSET"] workspace = context.data["workspaceDir"] - deadline_settings = ( - context.data - ["system_settings"] - ["modules"] - ["deadline"] - ) - - if deadline_settings["enabled"]: - deadline_url = render_instance.data.get("deadlineUrl") - # Retrieve render setup layers rs = renderSetup.instance() maya_render_layers = { @@ -348,8 +337,12 @@ class CollectMayaRender(pyblish.api.ContextPlugin): "aovSeparator": aov_separator } - if deadline_url: - data["deadlineUrl"] = deadline_url + # Collect Deadline url if Deadline module is enabled + deadline_settings = ( + context.data["system_settings"]["modules"]["deadline"] + ) + if deadline_settings["enabled"]: + data["deadlineUrl"] = render_instance.data.get("deadlineUrl") if self.sync_workfile_version: data["version"] = context.data["version"] From 542f634d73f01ed81127d655ec0902fdc2d006b5 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Wed, 2 Feb 2022 23:07:10 +0100 Subject: [PATCH 003/123] Re-use "read" logic from avalon.maya --- .../hosts/maya/plugins/publish/collect_render.py | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_render.py b/openpype/hosts/maya/plugins/publish/collect_render.py index 934f81e298..caee978b3f 100644 --- a/openpype/hosts/maya/plugins/publish/collect_render.py +++ b/openpype/hosts/maya/plugins/publish/collect_render.py @@ -49,7 +49,8 @@ import maya.app.renderSetup.model.renderSetup as renderSetup import pyblish.api -from avalon import maya, api +import avalon.maya +from avalon import api from openpype.hosts.maya.api.lib_renderproducts import get as get_layer_render_products # noqa: E501 from openpype.hosts.maya.api import lib @@ -352,16 +353,7 @@ class CollectMayaRender(pyblish.api.ContextPlugin): instance.data["version"] = context.data["version"] # Apply each user defined attribute as data - for attr in cmds.listAttr(layer, userDefined=True) or list(): - try: - value = cmds.getAttr("{}.{}".format(layer, attr)) - except Exception: - # Some attributes cannot be read directly, - # such as mesh and color attributes. These - # are considered non-essential to this - # particular publishing pipeline. - value = None - + for attr, value in avalon.maya.read(layer).items(): data[attr] = value # handle standalone renderers @@ -401,7 +393,7 @@ class CollectMayaRender(pyblish.api.ContextPlugin): dict: only overrides with values """ - attributes = maya.read(render_globals) + attributes = avalon.maya.read(render_globals) options = {"renderGlobals": {}} options["renderGlobals"]["Priority"] = attributes["priority"] From f18b12e354ba5ed523474df7262261aab63a9d25 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Wed, 2 Feb 2022 23:08:55 +0100 Subject: [PATCH 004/123] Bugfix: use 'renderer' variable that was defined to correctly capture renderman independent of its versions --- openpype/hosts/maya/plugins/publish/collect_render.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_render.py b/openpype/hosts/maya/plugins/publish/collect_render.py index caee978b3f..059988c754 100644 --- a/openpype/hosts/maya/plugins/publish/collect_render.py +++ b/openpype/hosts/maya/plugins/publish/collect_render.py @@ -310,8 +310,7 @@ class CollectMayaRender(pyblish.api.ContextPlugin): "byFrameStep": int( self.get_render_attribute("byFrameStep", layer=layer_name)), - "renderer": self.get_render_attribute("currentRenderer", - layer=layer_name), + "renderer": renderer, # instance subset "family": "renderlayer", "families": ["renderlayer"], From 20c4f86b8fdc06e2016c46563a5c1181258fe0cc Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Wed, 2 Feb 2022 23:11:10 +0100 Subject: [PATCH 005/123] Preserve logic to get renderer from in the renderlayer --- openpype/hosts/maya/plugins/publish/collect_render.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_render.py b/openpype/hosts/maya/plugins/publish/collect_render.py index 059988c754..f8d3761b7c 100644 --- a/openpype/hosts/maya/plugins/publish/collect_render.py +++ b/openpype/hosts/maya/plugins/publish/collect_render.py @@ -155,9 +155,8 @@ class CollectMayaRender(pyblish.api.ContextPlugin): layer_name = "rs_{}".format(expected_layer_name) # collect all frames we are expecting to be rendered - renderer = cmds.getAttr( - "defaultRenderGlobals.currentRenderer" - ).lower() + renderer = self.get_render_attribute("currentRenderer", + layer=layer_name) # handle various renderman names if renderer.startswith("renderman"): renderer = "renderman" From a2c05a9f382645a6b37191aefd7b011a0f2ebd6d Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Thu, 3 Feb 2022 00:11:07 +0100 Subject: [PATCH 006/123] Simplify subset detection code --- .../maya/plugins/publish/collect_render.py | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_render.py b/openpype/hosts/maya/plugins/publish/collect_render.py index f8d3761b7c..aa5ac40be9 100644 --- a/openpype/hosts/maya/plugins/publish/collect_render.py +++ b/openpype/hosts/maya/plugins/publish/collect_render.py @@ -135,22 +135,21 @@ class CollectMayaRender(pyblish.api.ContextPlugin): self.log.warning(msg) continue - # test if there are sets (subsets) to attach render to + # detect if there are sets (subsets) to attach render to sets = cmds.sets(layer, query=True) or [] attach_to = [] - if sets: - for s in sets: - if "family" not in cmds.listAttr(s): - continue + for s in sets: + if not cmds.attributeQuery("family", node=s, exists=True): + continue - attach_to.append( - { - "version": None, # we need integrator for that - "subset": s, - "family": cmds.getAttr("{}.family".format(s)), - } - ) - self.log.info(" -> attach render to: {}".format(s)) + attach_to.append( + { + "version": None, # we need integrator for that + "subset": s, + "family": cmds.getAttr("{}.family".format(s)), + } + ) + self.log.info(" -> attach render to: {}".format(s)) layer_name = "rs_{}".format(expected_layer_name) From 47622d5dd0a41c73fa9f459c119b18d95825aa16 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Thu, 3 Feb 2022 00:18:03 +0100 Subject: [PATCH 007/123] Don't collect aov_separator from settings twice --- openpype/hosts/maya/plugins/publish/collect_render.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_render.py b/openpype/hosts/maya/plugins/publish/collect_render.py index aa5ac40be9..44114efd5d 100644 --- a/openpype/hosts/maya/plugins/publish/collect_render.py +++ b/openpype/hosts/maya/plugins/publish/collect_render.py @@ -281,16 +281,6 @@ class CollectMayaRender(pyblish.api.ContextPlugin): self.log.info("collecting layer: {}".format(layer_name)) # Get layer specific settings, might be overrides - try: - aov_separator = self._aov_chars[( - context.data["project_settings"] - ["create"] - ["CreateRender"] - ["aov_separator"] - )] - except KeyError: - aov_separator = "_" - data = { "subset": expected_layer_name, "attachTo": attach_to, From 9f5eb074e474e0392fb02def4369ba61d07f0ef1 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Thu, 3 Feb 2022 00:22:10 +0100 Subject: [PATCH 008/123] Don't provide render instance to override render products aov separator and potentially other things. - Leave it up to validators to ensure the output matches what the user wanted it to match so we can never submit wrong renders. --- .../hosts/maya/plugins/publish/collect_render.py | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_render.py b/openpype/hosts/maya/plugins/publish/collect_render.py index 44114efd5d..f4ba862955 100644 --- a/openpype/hosts/maya/plugins/publish/collect_render.py +++ b/openpype/hosts/maya/plugins/publish/collect_render.py @@ -160,22 +160,9 @@ class CollectMayaRender(pyblish.api.ContextPlugin): if renderer.startswith("renderman"): renderer = "renderman" - try: - aov_separator = self._aov_chars[( - context.data["project_settings"] - ["create"] - ["CreateRender"] - ["aov_separator"] - )] - except KeyError: - aov_separator = "_" - - render_instance.data["aovSeparator"] = aov_separator - # return all expected files for all cameras and aovs in given # frame range - layer_render_products = get_layer_render_products( - layer_name, render_instance) + layer_render_products = get_layer_render_products(layer_name) render_products = layer_render_products.layer_data.products assert render_products, "no render products generated" exp_files = [] From 44003cc95292ad7983c56335ecc16b8d4606489d Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Thu, 3 Feb 2022 00:37:23 +0100 Subject: [PATCH 009/123] Move logic closer together --- openpype/hosts/maya/plugins/publish/collect_render.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_render.py b/openpype/hosts/maya/plugins/publish/collect_render.py index f4ba862955..3aa1335c74 100644 --- a/openpype/hosts/maya/plugins/publish/collect_render.py +++ b/openpype/hosts/maya/plugins/publish/collect_render.py @@ -215,6 +215,7 @@ class CollectMayaRender(pyblish.api.ContextPlugin): full_paths.append(full_path) publish_meta_path = os.path.dirname(full_path) aov_dict[aov.keys()[0]] = full_paths + full_exp_files.append(aov_dict) frame_start_render = int(self.get_render_attribute( "startFrame", layer=layer_name)) @@ -238,8 +239,6 @@ class CollectMayaRender(pyblish.api.ContextPlugin): frame_start_handle = frame_start_render frame_end_handle = frame_end_render - full_exp_files.append(aov_dict) - # find common path to store metadata # so if image prefix is branching to many directories # metadata file will be located in top-most common From ae35f0e7ab292f2b9d0b2126629e9da11fb3a0ca Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Thu, 3 Feb 2022 01:38:27 +0100 Subject: [PATCH 010/123] Refactor the "set_default_render_settings" logic out of CreateRender - This is a first step to allow the default render settings to be applied from elsewhere. - Also simplifies the logic of the actual Creator --- .../maya/plugins/create/create_render.py | 278 +++++++++--------- 1 file changed, 140 insertions(+), 138 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index fa5e73f3ed..ff230a0ff2 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -24,6 +24,142 @@ from avalon.api import Session from avalon.api import CreatorError +class RenderSettings(object): + + _image_prefix_nodes = { + 'mentalray': 'defaultRenderGlobals.imageFilePrefix', + 'vray': 'vraySettings.fileNamePrefix', + 'arnold': 'defaultRenderGlobals.imageFilePrefix', + 'renderman': 'defaultRenderGlobals.imageFilePrefix', + 'redshift': 'defaultRenderGlobals.imageFilePrefix' + } + + _image_prefixes = { + 'mentalray': 'maya///{aov_separator}', # noqa + 'vray': 'maya///', + 'arnold': 'maya///{aov_separator}', # noqa + 'renderman': 'maya///{aov_separator}', + 'redshift': 'maya///{aov_separator}' # noqa + } + + _aov_chars = { + "dot": ".", + "dash": "-", + "underscore": "_" + } + + def __init__(self, project_settings): + self._project_settings = project_settings + + @staticmethod + def apply_defaults(renderer, project_settings=None): + if project_settings is None: + project_settings = get_project_settings(Session["AVALON_PROJECT"]) + + render_settings = RenderSettings(project_settings) + render_settings.set_default_renderer_settings(renderer) + + def set_default_renderer_settings(self, renderer): + """Set basic settings based on renderer. + + Args: + renderer (str): Renderer name. + + """ + # project_settings/maya/create/CreateRender/aov_separator + try: + aov_separator = self._aov_chars[( + self._project_settings["maya"] + ["create"] + ["CreateRender"] + ["aov_separator"] + )] + except KeyError: + aov_separator = "_" + + prefix = self._image_prefixes[renderer] + prefix = prefix.replace("{aov_separator}", aov_separator) + cmds.setAttr(self._image_prefix_nodes[renderer], + prefix, + type="string") + + asset = get_asset() + width = asset["data"].get("resolutionWidth") + height = asset["data"].get("resolutionHeight") + + if renderer == "arnold": + # set format to exr + cmds.setAttr( + "defaultArnoldDriver.ai_translator", "exr", type="string") + self._set_global_output_settings() + + # resolution + cmds.setAttr("defaultResolution.width", width) + cmds.setAttr("defaultResolution.height", height) + + if renderer == "vray": + self._set_vray_settings(aov_separator, width, height) + + if renderer == "redshift": + # set format to exr + cmds.setAttr("RedshiftOptions.imageFormat", 1) + + # resolution + cmds.setAttr("defaultResolution.width", width) + cmds.setAttr("defaultResolution.height", height) + + self._set_global_output_settings() + + def _set_vray_settings(self, aov_separator, width, height): + # type: (dict) -> None + """Sets important settings for Vray.""" + settings = cmds.ls(type="VRaySettingsNode") + node = settings[0] if settings else cmds.createNode("VRaySettingsNode") + + # Set aov separator + # First we need to explicitly set the UI items in Render Settings + # because that is also what V-Ray updates to when that Render Settings + # UI did initialize before and refreshes again. + MENU = "vrayRenderElementSeparator" + if cmds.optionMenuGrp(MENU, query=True, exists=True): + items = cmds.optionMenuGrp(MENU, query=True, ill=True) + separators = [cmds.menuItem(i, query=True, label=True) for i in items] # noqa: E501 + try: + sep_idx = separators.index(aov_separator) + except ValueError: + raise CreatorError( + "AOV character {} not in {}".format( + aov_separator, separators)) + + cmds.optionMenuGrp(MENU, edit=True, select=sep_idx + 1) + + # Set the render element attribute as string. This is also what V-Ray + # sets whenever the `vrayRenderElementSeparator` menu items switch + cmds.setAttr( + "{}.fileNameRenderElementSeparator".format(node), + aov_separator, + type="string" + ) + + # set format to exr + cmds.setAttr("{}.imageFormatStr".format(node), "exr", type="string") + + # animType + cmds.setAttr("{}.animType".format(node), 1) + + # resolution + cmds.setAttr("{}.width".format(node), width) + cmds.setAttr("{}.height".format(node), height) + + @staticmethod + def _set_global_output_settings(): + # enable animation + cmds.setAttr("defaultRenderGlobals.outFormatControl", 0) + cmds.setAttr("defaultRenderGlobals.animation", 1) + cmds.setAttr("defaultRenderGlobals.putFrameBeforeExt", 1) + cmds.setAttr("defaultRenderGlobals.extensionPadding", 4) + + class CreateRender(plugin.Creator): """Create *render* instance. @@ -70,31 +206,6 @@ class CreateRender(plugin.Creator): _user = None _password = None - # renderSetup instance - _rs = None - - _image_prefix_nodes = { - 'mentalray': 'defaultRenderGlobals.imageFilePrefix', - 'vray': 'vraySettings.fileNamePrefix', - 'arnold': 'defaultRenderGlobals.imageFilePrefix', - 'renderman': 'defaultRenderGlobals.imageFilePrefix', - 'redshift': 'defaultRenderGlobals.imageFilePrefix' - } - - _image_prefixes = { - 'mentalray': 'maya///{aov_separator}', # noqa - 'vray': 'maya///', - 'arnold': 'maya///{aov_separator}', # noqa - 'renderman': 'maya///{aov_separator}', - 'redshift': 'maya///{aov_separator}' # noqa - } - - _aov_chars = { - "dot": ".", - "dash": "-", - "underscore": "_" - } - _project_settings = None def __init__(self, *args, **kwargs): @@ -107,17 +218,6 @@ class CreateRender(plugin.Creator): self._project_settings = get_project_settings( Session["AVALON_PROJECT"]) - # project_settings/maya/create/CreateRender/aov_separator - try: - self.aov_separator = self._aov_chars[( - self._project_settings["maya"] - ["create"] - ["CreateRender"] - ["aov_separator"] - )] - except KeyError: - self.aov_separator = "_" - try: default_servers = deadline_settings["deadline_urls"] project_servers = ( @@ -174,8 +274,8 @@ class CreateRender(plugin.Creator): ]) cmds.setAttr("{}.machineList".format(self.instance), lock=True) - self._rs = renderSetup.instance() - layers = self._rs.getRenderLayers() + rs = renderSetup.instance() + layers = rs.getRenderLayers() if use_selection: print(">>> processing existing layers") sets = [] @@ -190,7 +290,7 @@ class CreateRender(plugin.Creator): # if no render layers are present, create default one with # asterisk selector if not layers: - render_layer = self._rs.createRenderLayer('Main') + render_layer = rs.createRenderLayer('Main') collection = render_layer.createCollection("defaultCollection") collection.getSelector().setPattern('*') @@ -200,7 +300,7 @@ class CreateRender(plugin.Creator): if renderer.startswith('renderman'): renderer = 'renderman' - self._set_default_renderer_settings(renderer) + RenderSettings.apply_defaults(renderer) return self.instance def _deadline_webservice_changed(self): @@ -422,101 +522,3 @@ class CreateRender(plugin.Creator): if "verify" not in kwargs: kwargs["verify"] = not os.getenv("OPENPYPE_DONT_VERIFY_SSL", True) return requests.get(*args, **kwargs) - - def _set_default_renderer_settings(self, renderer): - """Set basic settings based on renderer. - - Args: - renderer (str): Renderer name. - - """ - prefix = self._image_prefixes[renderer] - prefix = prefix.replace("{aov_separator}", self.aov_separator) - cmds.setAttr(self._image_prefix_nodes[renderer], - prefix, - type="string") - - asset = get_asset() - - if renderer == "arnold": - # set format to exr - - cmds.setAttr( - "defaultArnoldDriver.ai_translator", "exr", type="string") - self._set_global_output_settings() - # resolution - cmds.setAttr( - "defaultResolution.width", - asset["data"].get("resolutionWidth")) - cmds.setAttr( - "defaultResolution.height", - asset["data"].get("resolutionHeight")) - - if renderer == "vray": - self._set_vray_settings(asset) - if renderer == "redshift": - _ = self._set_renderer_option( - "RedshiftOptions", "{}.imageFormat", 1 - ) - - # resolution - cmds.setAttr( - "defaultResolution.width", - asset["data"].get("resolutionWidth")) - cmds.setAttr( - "defaultResolution.height", - asset["data"].get("resolutionHeight")) - - self._set_global_output_settings() - - def _set_vray_settings(self, asset): - # type: (dict) -> None - """Sets important settings for Vray.""" - settings = cmds.ls(type="VRaySettingsNode") - node = settings[0] if settings else cmds.createNode("VRaySettingsNode") - - # set separator - # set it in vray menu - if cmds.optionMenuGrp("vrayRenderElementSeparator", exists=True, - q=True): - items = cmds.optionMenuGrp( - "vrayRenderElementSeparator", ill=True, query=True) - - separators = [cmds.menuItem(i, label=True, query=True) for i in items] # noqa: E501 - try: - sep_idx = separators.index(self.aov_separator) - except ValueError: - raise CreatorError( - "AOV character {} not in {}".format( - self.aov_separator, separators)) - - cmds.optionMenuGrp( - "vrayRenderElementSeparator", sl=sep_idx + 1, edit=True) - cmds.setAttr( - "{}.fileNameRenderElementSeparator".format(node), - self.aov_separator, - type="string" - ) - # set format to exr - cmds.setAttr( - "{}.imageFormatStr".format(node), "exr", type="string") - - # animType - cmds.setAttr( - "{}.animType".format(node), 1) - - # resolution - cmds.setAttr( - "{}.width".format(node), - asset["data"].get("resolutionWidth")) - cmds.setAttr( - "{}.height".format(node), - asset["data"].get("resolutionHeight")) - - @staticmethod - def _set_global_output_settings(): - # enable animation - cmds.setAttr("defaultRenderGlobals.outFormatControl", 0) - cmds.setAttr("defaultRenderGlobals.animation", 1) - cmds.setAttr("defaultRenderGlobals.putFrameBeforeExt", 1) - cmds.setAttr("defaultRenderGlobals.extensionPadding", 4) From 542918135f88f2a38e60d9066d23402f9c11e9e2 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Thu, 3 Feb 2022 01:42:55 +0100 Subject: [PATCH 011/123] Move more logic to the RenderSettings class --- .../hosts/maya/plugins/create/create_render.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index ff230a0ff2..05af3f32a9 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -52,7 +52,14 @@ class RenderSettings(object): self._project_settings = project_settings @staticmethod - def apply_defaults(renderer, project_settings=None): + def apply_defaults(renderer=None, project_settings=None): + if renderer is None: + renderer = cmds.getAttr( + 'defaultRenderGlobals.currentRenderer').lower() + # handle various renderman names + if renderer.startswith('renderman'): + renderer = 'renderman' + if project_settings is None: project_settings = get_project_settings(Session["AVALON_PROJECT"]) @@ -294,13 +301,7 @@ class CreateRender(plugin.Creator): collection = render_layer.createCollection("defaultCollection") collection.getSelector().setPattern('*') - renderer = cmds.getAttr( - 'defaultRenderGlobals.currentRenderer').lower() - # handle various renderman names - if renderer.startswith('renderman'): - renderer = 'renderman' - - RenderSettings.apply_defaults(renderer) + RenderSettings.apply_defaults() return self.instance def _deadline_webservice_changed(self): From 17be6f0f038d91c782b03d4fec3448e088ecfdf0 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Thu, 3 Feb 2022 01:48:28 +0100 Subject: [PATCH 012/123] Use log instead of print --- openpype/hosts/maya/plugins/create/create_render.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index 05af3f32a9..fd37b8a709 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -284,10 +284,10 @@ class CreateRender(plugin.Creator): rs = renderSetup.instance() layers = rs.getRenderLayers() if use_selection: - print(">>> processing existing layers") + self.log.info("Processing existing layers") sets = [] for layer in layers: - print(" - creating set for {}:{}".format( + self.log.info(" - creating set for {}:{}".format( namespace, layer.name())) render_set = cmds.sets( n="{}:{}".format(namespace, layer.name())) @@ -301,6 +301,7 @@ class CreateRender(plugin.Creator): collection = render_layer.createCollection("defaultCollection") collection.getSelector().setPattern('*') + self.log.info("Applying default render settings..") RenderSettings.apply_defaults() return self.instance From 8b0f60eaaa5789a742b2db3feb556e6d4659be70 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Thu, 3 Feb 2022 11:24:34 +0100 Subject: [PATCH 013/123] Collect the AOV separator for Render Products in Layer Data --- openpype/hosts/maya/api/lib_renderproducts.py | 45 +++++++++++++++++-- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/openpype/hosts/maya/api/lib_renderproducts.py b/openpype/hosts/maya/api/lib_renderproducts.py index e8e4b9aaef..db2c6c1fdc 100644 --- a/openpype/hosts/maya/api/lib_renderproducts.py +++ b/openpype/hosts/maya/api/lib_renderproducts.py @@ -97,6 +97,12 @@ class LayerMetadata(object): # Render Products products = attr.ib(init=False, default=attr.Factory(list)) + # The AOV separator token. Note that not all renderers define an explicit + # render separator but allow to put the AOV/RenderPass token anywhere in + # the file path prefix. For those renderers we'll fall back to whatever + # is between the last occurrences of and tokens. + aov_separator = attr.ib(default="_") + @attr.s class RenderProduct(object): @@ -180,7 +186,6 @@ class ARenderProducts: self.layer = layer self.render_instance = render_instance self.multipart = False - self.aov_separator = render_instance.data.get("aovSeparator", "_") # Initialize self.layer_data = self._get_layer_data() @@ -316,6 +321,31 @@ class ARenderProducts: # defaultRenderLayer renders as masterLayer layer_name = "masterLayer" + # AOV separator - default behavior extracts the part between + # last occurences of and + # todo: This code also triggers for V-Ray which overrides it explicitly + # so this code will invalidly debug log it couldn't extract the + # aov separator even though it does set it in RenderProductsVray + layer_tokens = ["", ""] + aov_tokens = ["", ""] + + def match_last(tokens, text): + """regex match the last occurence from a list of tokens""" + pattern = "(?:.*)({})".format("|".join(tokens)) + return re.search(pattern, text, re.IGNORECASE) + + layer_match = match_last(layer_tokens, file_prefix) + aov_match = match_last(aov_tokens, file_prefix) + kwargs = {} + if layer_match and aov_match: + matches = sorted((layer_match, aov_match), + key=lambda match: match.end(1)) + separator = file_prefix[matches[0].end(1):matches[1].start(1)] + kwargs["aov_separator"] = separator + else: + log.debug("Couldn't extract aov separator from " + "file prefix: {}".format(file_prefix)) + # todo: Support Custom Frames sequences 0,5-10,100-120 # Deadline allows submitting renders with a custom frame list # to support those cases we might want to allow 'custom frames' @@ -332,7 +362,8 @@ class ARenderProducts: layerName=layer_name, renderer=self.renderer, defaultExt=self._get_attr("defaultRenderGlobals.imfPluginKey"), - filePrefix=file_prefix + filePrefix=file_prefix, + **kwargs ) def _generate_file_sequence( @@ -677,9 +708,15 @@ class RenderProductsVray(ARenderProducts): """ prefix = super(RenderProductsVray, self).get_renderer_prefix() - prefix = "{}{}".format(prefix, self.aov_separator) + aov_separator = self._get_aov_separator() + prefix = "{}{}".format(prefix, aov_separator) return prefix + def _get_aov_separator(self): + return self._get_attr( + "vraySettings.fileNameRenderElementSeparator" + ) + def _get_layer_data(self): # type: () -> LayerMetadata """Override to get vray specific extension.""" @@ -691,6 +728,8 @@ class RenderProductsVray(ARenderProducts): layer_data.defaultExt = default_ext layer_data.padding = self._get_attr("vraySettings.fileNamePadding") + layer_data.aov_separator = self._get_aov_separator() + return layer_data def get_render_products(self): From 0516bb0f6f5fa43be7a087dd1664bc1b8bb75425 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Thu, 3 Feb 2022 11:39:17 +0100 Subject: [PATCH 014/123] Fix Redshift appending . even when or was explicitly set. --- openpype/hosts/maya/api/lib_renderproducts.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/openpype/hosts/maya/api/lib_renderproducts.py b/openpype/hosts/maya/api/lib_renderproducts.py index db2c6c1fdc..49b6d6f0da 100644 --- a/openpype/hosts/maya/api/lib_renderproducts.py +++ b/openpype/hosts/maya/api/lib_renderproducts.py @@ -80,6 +80,13 @@ IMAGE_PREFIXES = { } +def has_tokens(string, tokens): + """Return whether any of tokens is in input string (case-insensitive)""" + pattern = "({})".format("|".join(re.escape(token) for token in tokens)) + match = re.search(pattern, string, re.IGNORECASE) + return bool(match) + + @attr.s class LayerMetadata(object): """Data class for Render Layer metadata.""" @@ -950,7 +957,11 @@ class RenderProductsRedshift(ARenderProducts): """ prefix = super(RenderProductsRedshift, self).get_renderer_prefix() - prefix = "{}.".format(prefix) + + # Only append . if no or is specified + if not has_tokens(prefix, ["", ""]): + prefix = "{}.".format(prefix) + return prefix def get_render_products(self): From f8e8ce5c61d485b753595f4e2dc9e0e20f1321c3 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Thu, 3 Feb 2022 11:39:43 +0100 Subject: [PATCH 015/123] Add docstring --- openpype/hosts/maya/api/lib_renderproducts.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openpype/hosts/maya/api/lib_renderproducts.py b/openpype/hosts/maya/api/lib_renderproducts.py index 49b6d6f0da..0e1b553619 100644 --- a/openpype/hosts/maya/api/lib_renderproducts.py +++ b/openpype/hosts/maya/api/lib_renderproducts.py @@ -720,6 +720,8 @@ class RenderProductsVray(ARenderProducts): return prefix def _get_aov_separator(self): + # type: () -> str + """Return the V-Ray AOV/Render Elements separator""" return self._get_attr( "vraySettings.fileNameRenderElementSeparator" ) From 862167fc6aa6bec3793b120eac8f84cd901a5035 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Thu, 3 Feb 2022 14:23:48 +0100 Subject: [PATCH 016/123] Fix types --- openpype/hosts/maya/plugins/create/create_render.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index fd37b8a709..f87e1eac5d 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -118,7 +118,7 @@ class RenderSettings(object): self._set_global_output_settings() def _set_vray_settings(self, aov_separator, width, height): - # type: (dict) -> None + # type: (str, int, int) -> None """Sets important settings for Vray.""" settings = cmds.ls(type="VRaySettingsNode") node = settings[0] if settings else cmds.createNode("VRaySettingsNode") From ee3a3632731a5afbb3c7355f339f1818990a04ea Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Thu, 3 Feb 2022 16:03:12 +0100 Subject: [PATCH 017/123] Move RenderSettings into its on api --- openpype/hosts/maya/api/render_settings.py | 165 +++++++++++++++++ .../maya/plugins/create/create_render.py | 173 ++---------------- .../publish/validate_render_single_camera.py | 18 +- 3 files changed, 186 insertions(+), 170 deletions(-) create mode 100644 openpype/hosts/maya/api/render_settings.py diff --git a/openpype/hosts/maya/api/render_settings.py b/openpype/hosts/maya/api/render_settings.py new file mode 100644 index 0000000000..14f6468d1b --- /dev/null +++ b/openpype/hosts/maya/api/render_settings.py @@ -0,0 +1,165 @@ +import os +import sys + +from maya import cmds +import maya.app.renderSetup.model.renderSetup as renderSetup + +from openpype.hosts.maya.api import ( + lib, + plugin +) +from openpype.api import ( + get_system_settings, + get_project_settings, + get_asset) +from openpype.modules import ModulesManager + +from avalon.api import Session +from avalon.api import CreatorError + + +class RenderSettings(object): + + _image_prefix_nodes = { + 'mentalray': 'defaultRenderGlobals.imageFilePrefix', + 'vray': 'vraySettings.fileNamePrefix', + 'arnold': 'defaultRenderGlobals.imageFilePrefix', + 'renderman': 'defaultRenderGlobals.imageFilePrefix', + 'redshift': 'defaultRenderGlobals.imageFilePrefix' + } + + _image_prefixes = { + 'mentalray': 'maya///{aov_separator}', # noqa + 'vray': 'maya///', + 'arnold': 'maya///{aov_separator}', # noqa + 'renderman': 'maya///{aov_separator}', + 'redshift': 'maya///{aov_separator}' # noqa + } + + _aov_chars = { + "dot": ".", + "dash": "-", + "underscore": "_" + } + + @classmethod + def get_image_prefix_attr(cls, renderer): + return cls._image_prefix_nodes[renderer] + + def __init__(self, project_settings): + self._project_settings = project_settings + + @staticmethod + def apply_defaults(renderer=None, project_settings=None): + if renderer is None: + renderer = cmds.getAttr( + 'defaultRenderGlobals.currentRenderer').lower() + # handle various renderman names + if renderer.startswith('renderman'): + renderer = 'renderman' + + if project_settings is None: + project_settings = get_project_settings(Session["AVALON_PROJECT"]) + + render_settings = RenderSettings(project_settings) + render_settings.set_default_renderer_settings(renderer) + + def set_default_renderer_settings(self, renderer): + """Set basic settings based on renderer. + + Args: + renderer (str): Renderer name. + + """ + # project_settings/maya/create/CreateRender/aov_separator + try: + aov_separator = self._aov_chars[( + self._project_settings["maya"] + ["create"] + ["CreateRender"] + ["aov_separator"] + )] + except KeyError: + aov_separator = "_" + + prefix = self._image_prefixes[renderer] + prefix = prefix.replace("{aov_separator}", aov_separator) + cmds.setAttr(self._image_prefix_nodes[renderer], + prefix, + type="string") + + asset = get_asset() + width = asset["data"].get("resolutionWidth") + height = asset["data"].get("resolutionHeight") + + if renderer == "arnold": + # set format to exr + cmds.setAttr( + "defaultArnoldDriver.ai_translator", "exr", type="string") + self._set_global_output_settings() + + # resolution + cmds.setAttr("defaultResolution.width", width) + cmds.setAttr("defaultResolution.height", height) + + if renderer == "vray": + self._set_vray_settings(aov_separator, width, height) + + if renderer == "redshift": + # set format to exr + cmds.setAttr("RedshiftOptions.imageFormat", 1) + + # resolution + cmds.setAttr("defaultResolution.width", width) + cmds.setAttr("defaultResolution.height", height) + + self._set_global_output_settings() + + def _set_vray_settings(self, aov_separator, width, height): + # type: (str, int, int) -> None + """Sets important settings for Vray.""" + settings = cmds.ls(type="VRaySettingsNode") + node = settings[0] if settings else cmds.createNode("VRaySettingsNode") + + # Set aov separator + # First we need to explicitly set the UI items in Render Settings + # because that is also what V-Ray updates to when that Render Settings + # UI did initialize before and refreshes again. + MENU = "vrayRenderElementSeparator" + if cmds.optionMenuGrp(MENU, query=True, exists=True): + items = cmds.optionMenuGrp(MENU, query=True, ill=True) + separators = [cmds.menuItem(i, query=True, label=True) for i in items] # noqa: E501 + try: + sep_idx = separators.index(aov_separator) + except ValueError: + raise CreatorError( + "AOV character {} not in {}".format( + aov_separator, separators)) + + cmds.optionMenuGrp(MENU, edit=True, select=sep_idx + 1) + + # Set the render element attribute as string. This is also what V-Ray + # sets whenever the `vrayRenderElementSeparator` menu items switch + cmds.setAttr( + "{}.fileNameRenderElementSeparator".format(node), + aov_separator, + type="string" + ) + + # set format to exr + cmds.setAttr("{}.imageFormatStr".format(node), "exr", type="string") + + # animType + cmds.setAttr("{}.animType".format(node), 1) + + # resolution + cmds.setAttr("{}.width".format(node), width) + cmds.setAttr("{}.height".format(node), height) + + @staticmethod + def _set_global_output_settings(): + # enable animation + cmds.setAttr("defaultRenderGlobals.outFormatControl", 0) + cmds.setAttr("defaultRenderGlobals.animation", 1) + cmds.setAttr("defaultRenderGlobals.putFrameBeforeExt", 1) + cmds.setAttr("defaultRenderGlobals.extensionPadding", 4) \ No newline at end of file diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index f87e1eac5d..b75105736b 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -1,170 +1,27 @@ # -*- coding: utf-8 -*- """Create ``Render`` instance in Maya.""" -import os import json +import os +import sys + import appdirs import requests import six -import sys from maya import cmds -import maya.app.renderSetup.model.renderSetup as renderSetup - -from openpype.hosts.maya.api import ( - lib, - plugin -) -from openpype.api import ( - get_system_settings, - get_project_settings, - get_asset) -from openpype.modules import ModulesManager +from maya.app.renderSetup.model import renderSetup from avalon.api import Session -from avalon.api import CreatorError - - -class RenderSettings(object): - - _image_prefix_nodes = { - 'mentalray': 'defaultRenderGlobals.imageFilePrefix', - 'vray': 'vraySettings.fileNamePrefix', - 'arnold': 'defaultRenderGlobals.imageFilePrefix', - 'renderman': 'defaultRenderGlobals.imageFilePrefix', - 'redshift': 'defaultRenderGlobals.imageFilePrefix' - } - - _image_prefixes = { - 'mentalray': 'maya///{aov_separator}', # noqa - 'vray': 'maya///', - 'arnold': 'maya///{aov_separator}', # noqa - 'renderman': 'maya///{aov_separator}', - 'redshift': 'maya///{aov_separator}' # noqa - } - - _aov_chars = { - "dot": ".", - "dash": "-", - "underscore": "_" - } - - def __init__(self, project_settings): - self._project_settings = project_settings - - @staticmethod - def apply_defaults(renderer=None, project_settings=None): - if renderer is None: - renderer = cmds.getAttr( - 'defaultRenderGlobals.currentRenderer').lower() - # handle various renderman names - if renderer.startswith('renderman'): - renderer = 'renderman' - - if project_settings is None: - project_settings = get_project_settings(Session["AVALON_PROJECT"]) - - render_settings = RenderSettings(project_settings) - render_settings.set_default_renderer_settings(renderer) - - def set_default_renderer_settings(self, renderer): - """Set basic settings based on renderer. - - Args: - renderer (str): Renderer name. - - """ - # project_settings/maya/create/CreateRender/aov_separator - try: - aov_separator = self._aov_chars[( - self._project_settings["maya"] - ["create"] - ["CreateRender"] - ["aov_separator"] - )] - except KeyError: - aov_separator = "_" - - prefix = self._image_prefixes[renderer] - prefix = prefix.replace("{aov_separator}", aov_separator) - cmds.setAttr(self._image_prefix_nodes[renderer], - prefix, - type="string") - - asset = get_asset() - width = asset["data"].get("resolutionWidth") - height = asset["data"].get("resolutionHeight") - - if renderer == "arnold": - # set format to exr - cmds.setAttr( - "defaultArnoldDriver.ai_translator", "exr", type="string") - self._set_global_output_settings() - - # resolution - cmds.setAttr("defaultResolution.width", width) - cmds.setAttr("defaultResolution.height", height) - - if renderer == "vray": - self._set_vray_settings(aov_separator, width, height) - - if renderer == "redshift": - # set format to exr - cmds.setAttr("RedshiftOptions.imageFormat", 1) - - # resolution - cmds.setAttr("defaultResolution.width", width) - cmds.setAttr("defaultResolution.height", height) - - self._set_global_output_settings() - - def _set_vray_settings(self, aov_separator, width, height): - # type: (str, int, int) -> None - """Sets important settings for Vray.""" - settings = cmds.ls(type="VRaySettingsNode") - node = settings[0] if settings else cmds.createNode("VRaySettingsNode") - - # Set aov separator - # First we need to explicitly set the UI items in Render Settings - # because that is also what V-Ray updates to when that Render Settings - # UI did initialize before and refreshes again. - MENU = "vrayRenderElementSeparator" - if cmds.optionMenuGrp(MENU, query=True, exists=True): - items = cmds.optionMenuGrp(MENU, query=True, ill=True) - separators = [cmds.menuItem(i, query=True, label=True) for i in items] # noqa: E501 - try: - sep_idx = separators.index(aov_separator) - except ValueError: - raise CreatorError( - "AOV character {} not in {}".format( - aov_separator, separators)) - - cmds.optionMenuGrp(MENU, edit=True, select=sep_idx + 1) - - # Set the render element attribute as string. This is also what V-Ray - # sets whenever the `vrayRenderElementSeparator` menu items switch - cmds.setAttr( - "{}.fileNameRenderElementSeparator".format(node), - aov_separator, - type="string" - ) - - # set format to exr - cmds.setAttr("{}.imageFormatStr".format(node), "exr", type="string") - - # animType - cmds.setAttr("{}.animType".format(node), 1) - - # resolution - cmds.setAttr("{}.width".format(node), width) - cmds.setAttr("{}.height".format(node), height) - - @staticmethod - def _set_global_output_settings(): - # enable animation - cmds.setAttr("defaultRenderGlobals.outFormatControl", 0) - cmds.setAttr("defaultRenderGlobals.animation", 1) - cmds.setAttr("defaultRenderGlobals.putFrameBeforeExt", 1) - cmds.setAttr("defaultRenderGlobals.extensionPadding", 4) +from openpype.api import ( + get_system_settings, + get_project_settings +) +from openpype.hosts.maya.api import ( + lib, + plugin, + render_settings +) +from openpype.modules import ModulesManager class CreateRender(plugin.Creator): @@ -302,7 +159,7 @@ class CreateRender(plugin.Creator): collection.getSelector().setPattern('*') self.log.info("Applying default render settings..") - RenderSettings.apply_defaults() + render_settings.RenderSettings.apply_defaults() return self.instance def _deadline_webservice_changed(self): diff --git a/openpype/hosts/maya/plugins/publish/validate_render_single_camera.py b/openpype/hosts/maya/plugins/publish/validate_render_single_camera.py index 0838b4fbf8..3f08e0cd62 100644 --- a/openpype/hosts/maya/plugins/publish/validate_render_single_camera.py +++ b/openpype/hosts/maya/plugins/publish/validate_render_single_camera.py @@ -1,19 +1,11 @@ import re import pyblish.api -import openpype.api -import openpype.hosts.maya.api.action - from maya import cmds - -ImagePrefixes = { - 'mentalray': 'defaultRenderGlobals.imageFilePrefix', - 'vray': 'vraySettings.fileNamePrefix', - 'arnold': 'defaultRenderGlobals.imageFilePrefix', - 'renderman': 'defaultRenderGlobals.imageFilePrefix', - 'redshift': 'defaultRenderGlobals.imageFilePrefix' -} +import openpype.api +import openpype.hosts.maya.api.action +from openpype.hosts.maya.api.render_settings import RenderSettings class ValidateRenderSingleCamera(pyblish.api.InstancePlugin): @@ -46,7 +38,9 @@ class ValidateRenderSingleCamera(pyblish.api.InstancePlugin): # handle various renderman names if renderer.startswith('renderman'): renderer = 'renderman' - file_prefix = cmds.getAttr(ImagePrefixes[renderer]) + + attr = RenderSettings.get_image_prefix_attr(renderer) + file_prefix = cmds.getAttr(attr) if len(cameras) > 1: if re.search(cls.R_CAMERA_TOKEN, file_prefix): From fc0891c7f0617ffde70f78456051e59b2d04e400 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Thu, 3 Feb 2022 16:10:21 +0100 Subject: [PATCH 018/123] Cleanup render_settings.py imports + newline end of file --- openpype/hosts/maya/api/render_settings.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/openpype/hosts/maya/api/render_settings.py b/openpype/hosts/maya/api/render_settings.py index 14f6468d1b..48bf7fa56c 100644 --- a/openpype/hosts/maya/api/render_settings.py +++ b/openpype/hosts/maya/api/render_settings.py @@ -1,18 +1,8 @@ -import os -import sys - from maya import cmds -import maya.app.renderSetup.model.renderSetup as renderSetup -from openpype.hosts.maya.api import ( - lib, - plugin -) from openpype.api import ( - get_system_settings, get_project_settings, get_asset) -from openpype.modules import ModulesManager from avalon.api import Session from avalon.api import CreatorError @@ -162,4 +152,4 @@ class RenderSettings(object): cmds.setAttr("defaultRenderGlobals.outFormatControl", 0) cmds.setAttr("defaultRenderGlobals.animation", 1) cmds.setAttr("defaultRenderGlobals.putFrameBeforeExt", 1) - cmds.setAttr("defaultRenderGlobals.extensionPadding", 4) \ No newline at end of file + cmds.setAttr("defaultRenderGlobals.extensionPadding", 4) From 1177ee2a25403c143aa0d2639102ee1360ac77d2 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 11 Apr 2022 15:21:59 +0300 Subject: [PATCH 019/123] Refactor Maya Create Render Schema --- .../schemas/schema_maya_create.json | 39 +- .../schemas/schema_maya_create_render.json | 417 ++++++++++++++++++ 2 files changed, 420 insertions(+), 36 deletions(-) create mode 100644 openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create_render.json diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create.json index 6dc10ed2a5..4e92875677 100644 --- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create.json +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create.json @@ -29,42 +29,9 @@ } ] }, - { - "type": "dict", - "collapsible": true, - "key": "CreateRender", - "label": "Create Render", - "checkbox_key": "enabled", - "children": [ - { - "type": "boolean", - "key": "enabled", - "label": "Enabled" - }, - { - "type": "list", - "key": "defaults", - "label": "Default Subsets", - "object_type": "text" - }, - { - "key": "aov_separator", - "label": "AOV Separator character", - "type": "enum", - "multiselection": false, - "default": "underscore", - "enum_items": [ - {"dash": "- (dash)"}, - {"underscore": "_ (underscore)"}, - {"dot": ". (dot)"} - ] - }, - { - "type": "text", - "key": "default_render_image_folder", - "label": "Default render image folder" - } - ] + { + "type": "schema", + "name": "schema_maya_create_render" }, { "type": "dict", diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create_render.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create_render.json new file mode 100644 index 0000000000..f4a724cd5c --- /dev/null +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create_render.json @@ -0,0 +1,417 @@ +{ + "type": "dict", + "collapsible": true, + "key": "CreateRender", + "label": "Create Render", + "checkbox_key": "enabled", + "children": [ + { + "type": "boolean", + "key": "enabled", + "label": "Enabled" + }, + { + "type": "list", + "key": "defaults", + "label": "Default Subsets", + "object_type": "text" + }, + { + "type": "text", + "key": "default_render_image_folder", + "label": "Default render image folder" + }, + { + "key": "aov_separator", + "label": "AOV Separator character", + "type": "enum", + "multiselection": false, + "default": "underscore", + "enum_items": [ + {"dash": "- (dash)"}, + {"underscore": "_ (underscore)"}, + {"dot": ". (dot)"} + ] + }, + { + "type": "dict", + "collapsible": true, + "key": "arnold_renderer", + "label": "Arnold Renderer", + "is_group": true, + "children": [ + { + "key": "image_prefix", + "label": "Image prefix template", + "type": "text" + }, + { + "key": "image_format", + "label": "Output Image Format", + "type": "enum", + "multiselection": false, + "defaults": "exr", + "enum_items": [ + {"jpeg": "jpeg"}, + {"png": "png"}, + {"deepexr": "deep exr"}, + {"tif": "tif"}, + {"exr": "exr"}, + {"maya": "maya"}, + {"mtoa_shaders": "mtoa_shaders"} + ] + }, + { + "key": "multilayer_exr", + "label": "Multilayer (exr)", + "type": "boolean" + }, + { + "key": "tiled", + "label": "Tiled (tif, exr)", + "type": "boolean" + }, + { + "key": "aov_list", + "label": "AOVs to create", + "type": "enum", + "multiselection": true, + "defaults": "empty", + "enum_items": [ + {"empty": "< empty >"}, + {"ID": "ID"}, + {"N": "N"}, + {"P": "P"}, + {"Pref": "Pref"}, + {"RGBA": "RGBA"}, + {"Z": "Z"}, + {"albedo": "albedo"}, + {"background": "background"}, + {"coat": "coat"}, + {"coat_albedo": "coat_albedo"}, + {"coat_direct": "coat_direct"}, + {"coat_indirect": "coat_indirect"}, + {"cputime": "cputime"}, + {"crypto_asset": "crypto_asset"}, + {"crypto_material": "cypto_material"}, + {"crypto_object": "crypto_object"}, + {"diffuse": "diffuse"}, + {"diffuse_albedo": "diffuse_albedo"}, + {"diffuse_direct": "diffuse_direct"}, + {"diffuse_indirect": "diffuse_indirect"}, + {"direct": "direct"}, + {"emission": "emission"}, + {"highlight": "highlight"}, + {"indirect": "indirect"}, + {"motionvector": "motionvector"}, + {"opacity": "opacity"}, + {"raycount": "raycount"}, + {"rim_light": "rim_light"}, + {"shadow": "shadow"}, + {"shadow_diff": "shadow_diff"}, + {"shadow_mask": "shadow_mask"}, + {"shadow_matte": "shadow_matte"}, + {"sheen": "sheen"}, + {"sheen_albedo": "sheen_albedo"}, + {"sheen_direct": "sheen_direct"}, + {"sheen_indirect": "sheen_indirect"}, + {"specular": "specular"}, + {"specular_albedo": "specular_albedo"}, + {"specular_direct": "specular_direct"}, + {"specular_indirect": "specular_indirect"}, + {"sss": "sss"}, + {"sss_albedo": "sss_albedo"}, + {"sss_direct": "sss_direct"}, + {"sss_indirect": "sss_indirect"}, + {"transmission": "transmission"}, + {"transmission_albedo": "transmission_albedo"}, + {"transmission_direct": "transmission_direct"}, + {"transmission_indirect": "transmission_indirect"}, + {"volume": "volume"}, + {"volume_Z": "volume_Z"}, + {"volume_albedo": "volume_albedo"}, + {"volume_direct": "volume_direct"}, + {"volume_indirect": "volume_indirect"}, + {"volume_opacity": "volume_opacity"} + ] + }, + { + "type": "label", + "label": "Add additional options - put attribute and value, like AASamples" + }, + { + "type": "dict-modifiable", + "key": "additional_options", + "label": "Additional Renderer Options", + "use_label_wrap": true, + "object_type": { + "type": "text" + } + } + ] + }, + { + "type": "dict", + "collapsible": true, + "key": "vray_renderer", + "label": "V-Ray Renderer", + "is_group": true, + "children": [ + { + "key": "image_prefix", + "label": "Image prefix template", + "type": "text" + }, + { + "key": "engine", + "label": "Production Engine", + "type": "enum", + "multiselection": false, + "defaults": "1", + "enum_items": [ + {"1": "V-Ray"}, + {"2": "V-Ray GPU"} + ] + }, + { + "key": "image_format", + "label": "Output Image Format", + "type": "enum", + "multiselection": false, + "defaults": "exr", + "enum_items": [ + {"png": "png"}, + {"jpg": "jpg"}, + {"vrimg": "vrimg"}, + {"hdr": "hdr"}, + {"exr": "exr"}, + {"exr (multichannel)": "exr (multichannel)"}, + {"exr (deep)": "exr (deep)"}, + {"tga": "tga"}, + {"bmp": "bmp"}, + {"sgi": "sgi"} + ] + }, + { + "key": "aov_list", + "label": "AOVs to create", + "type": "enum", + "multiselection": true, + "defaults": "empty", + "enum_items": [ + {"empty": "< empty >"}, + {"atmosphereChannel": "atmosphere"}, + {"backgroundChannel": "background"}, + {"bumpNormalsChannel": "bumpnormals"}, + {"causticsChannel": "caustics"}, + {"coatFilterChannel": "coat_filter"}, + {"coatGlossinessChannel": "coatGloss"}, + {"coatReflectionChannel": "coat_reflection"}, + {"vrayCoatChannel": "coat_specular"}, + {"CoverageChannel": "coverage"}, + {"cryptomatteChannel": "cryptomatte"}, + {"customColor": "custom_color"}, + {"drBucketChannel": "DR"}, + {"denoiserChannel": "denoiser"}, + {"diffuseChannel": "diffuse"}, + {"ExtraTexElement": "extraTex"}, + {"giChannel": "GI"}, + {"LightMixElement": "None"}, + {"lightingChannel": "lighting"}, + {"LightingAnalysisChannel": "LightingAnalysis"}, + {"materialIDChannel": "materialID"}, + {"MaterialSelectElement": "materialSelect"}, + {"matteShadowChannel": "matteShadow"}, + {"MultiMatteElement": "multimatte"}, + {"multimatteIDChannel": "multimatteID"}, + {"normalsChannel": "normals"}, + {"nodeIDChannel": "objectId"}, + {"objectSelectChannel": "objectSelect"}, + {"rawCoatFilterChannel": "raw_coat_filter"}, + {"rawCoatReflectionChannel": "raw_coat_reflection"}, + {"rawDiffuseFilterChannel": "rawDiffuseFilter"}, + {"rawGiChannel": "rawGI"}, + {"rawLightChannel": "rawLight"}, + {"rawReflectionChannel": "rawReflection"}, + {"rawReflectionFilterChannel": "rawReflectionFilter"}, + {"rawRefractionChannel": "rawRefraction"}, + {"rawRefractionFilterChannel": "rawRefractionFilter"}, + {"rawShadowChannel": "rawShadow"}, + {"rawSheenFilterChannel": "raw_sheen_filter"}, + {"rawSheenReflectionChannel": "raw_sheen_reflection"}, + {"rawTotalLightChannel": "rawTotalLight"}, + {"reflectIORChannel": "reflIOR"}, + {"reflectChannel": "reflect"}, + {"reflectionFilterChannel": "reflectionFilter"}, + {"reflectGlossinessChannel": "reflGloss"}, + {"refractChannel": "refract"}, + {"refractionFilterChannel": "refractionFilter"}, + {"refractGlossinessChannel": "refrGloss"}, + {"renderIDChannel": "renderId"}, + {"FastSSS2Channel": "SSS"}, + {"sampleRateChannel": "sampleRate"}, + {"samplerInfo": "samplerInfo"}, + {"selfIllumChannel": "selfIllum"}, + {"shadowChannel": "shadow"}, + {"sheenFilterChannel": "sheen_filter"}, + {"sheenGlossinessChannel": "sheenGloss"}, + {"sheenReflectionChannel": "sheen_reflection"}, + {"vraySheenChannel": "sheen_specular"}, + {"specularChannel": "specular"}, + {"Toon": "Toon"}, + {"toonLightingChannel": "toonLighting"}, + {"toonSpecularChannel": "toonSpecular"}, + {"totalLightChannel": "totalLight"}, + {"unclampedColorChannel": "unclampedColor"}, + {"VRScansPaintMaskChannel": "VRScansPaintMask"}, + {"VRScansZoneMaskChannel": "VRScansZoneMask"}, + {"velocityChannel": "velocity"}, + {"zdepthChannel": "zDepth"}, + {"LightSelectElement": "lightselect"} + ] + }, + { + "type": "label", + "label": "Add additional options - put attribute and value, like aaFilterSize" + }, + { + "type": "dict-modifiable", + "key": "additional_options", + "label": "Additional Renderer Options", + "use_label_wrap": true, + "object_type": { + "type": "text" + } + } + ] + }, + { + "type": "dict", + "collapsible": true, + "key": "redshift_renderer", + "label": "Redshift Renderer", + "is_group": true, + "children": [ + { + "key": "image_prefix", + "label": "Image prefix template", + "type": "text" + }, + { + "key": "primary_gi_engine", + "label": "Primary GI Engine", + "type": "enum", + "multiselection": false, + "defaults": "0", + "enum_items": [ + {"0": "None"}, + {"1": "Photon Map"}, + {"2": "Irradiance Cache"}, + {"3": "Brute Force"} + ] + }, + { + "key": "secondary_gi_engine", + "label": "Secondary GI Engine", + "type": "enum", + "multiselection": false, + "defaults": "0", + "enum_items": [ + {"0": "None"}, + {"1": "Photon Map"}, + {"2": "Irradiance Cache"}, + {"3": "Brute Force"} + ] + }, + { + "key": "image_format", + "label": "Output Image Format", + "type": "enum", + "multiselection": false, + "defaults": "exr", + "enum_items": [ + {"iff": "Maya IFF"}, + {"exr": "OpenEXR"}, + {"tif": "TIFF"}, + {"png": "PNG"}, + {"tga": "Targa"}, + {"jpg": "JPEG"} + ] + }, + { + "key": "multilayer_exr", + "label": "Multilayer (exr)", + "type": "boolean" + }, + { + "key": "force_combine", + "label": "Force combine beauty and AOVs", + "type": "boolean" + }, + { + "key": "aov_list", + "label": "AOVs to create", + "type": "enum", + "multiselection": true, + "defaults": "empty", + "enum_items": [ + {"empty": "< none >"}, + {"AO": "Ambient Occlusion"}, + {"Background": "Background"}, + {"Beauty": "Beauty"}, + {"BumpNormals": "Bump Normals"}, + {"Caustics": "Caustics"}, + {"CausticsRaw": "Caustics Raw"}, + {"Cryptomatte": "Cryptomatte"}, + {"Custom": "Custom"}, + {"Z": "Depth"}, + {"DiffuseFilter": "Diffuse Filter"}, + {"DiffuseLighting": "Diffuse Lighting"}, + {"DiffuseLightingRaw": "Diffuse Lighting Raw"}, + {"Emission": "Emission"}, + {"GI": "Global Illumination"}, + {"GIRaw": "Global Illumination Raw"}, + {"Matte": "Matte"}, + {"MotionVectors": "Ambient Occlusion"}, + {"N": "Normals"}, + {"ID": "ObjectID"}, + {"ObjectBumpNormal": "Object-Space Bump Normals"}, + {"ObjectPosition": "Object-Space Positions"}, + {"PuzzleMatte": "Puzzle Matte"}, + {"Reflections": "Reflections"}, + {"ReflectionsFilter": "Reflections Filter"}, + {"ReflectionsRaw": "Reflections Raw"}, + {"Refractions": "Refractions"}, + {"RefractionsFilter": "Refractions Filter"}, + {"RefractionsRaw": "Refractions Filter"}, + {"Shadows": "Shadows"}, + {"SpecularLighting": "Specular Lighting"}, + {"SSS": "Sub Surface Scatter"}, + {"SSSRaw": "Sub Surface Scatter Raw"}, + {"TotalDiffuseLightingRaw": "Total Diffuse Lighting Raw"}, + {"TotalTransLightingRaw": "Total Translucency Filter"}, + {"TransTint": "Translucency Filter"}, + {"TransGIRaw": "Translucency Lighting Raw"}, + {"VolumeFogEmission": "Volume Fog Emission"}, + {"VolumeFogTint": "Volume Fog Tint"}, + {"VolumeLighting": "Volume Lighting"}, + {"P": "World Position"} + ] + }, + { + "type": "label", + "label": "Add additional options - put attribute and value, like reflectionMaxTraceDepth" + }, + { + "type": "dict-modifiable", + "key": "additional_options", + "label": "Additional Renderer Options", + "use_label_wrap": true, + "object_type": { + "type": "text" + } + } + ] + } + ] +} \ No newline at end of file From 8c4d44fd46ab182ad442e47f3cfe8f7ba9a76f47 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 11 Apr 2022 15:22:17 +0300 Subject: [PATCH 020/123] add renderer settings --- .../defaults/project_settings/maya.json | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/openpype/settings/defaults/project_settings/maya.json b/openpype/settings/defaults/project_settings/maya.json index 4cdfe1ca5d..c0b85eb0eb 100644 --- a/openpype/settings/defaults/project_settings/maya.json +++ b/openpype/settings/defaults/project_settings/maya.json @@ -43,8 +43,39 @@ "defaults": [ "Main" ], + "default_render_image_folder": "renders", "aov_separator": "underscore", - "default_render_image_folder": "renders" + "arnold_renderer": { + "image_prefix": "maya///{aov_separator}", + "image_format": "exr", + "multilayer_exr": false, + "tiled": true, + "aov_list": [ + "empty" + ], + "additional_options": {} + }, + "vray_renderer": { + "image_prefix": "maya///", + "engine": "1", + "image_format": "exr", + "aov_list": [ + "empty" + ], + "additional_options": {} + }, + "redshift_renderer": { + "image_prefix": "'maya///{aov_separator}", + "primary_gi_engine": "0", + "secondary_gi_engine": "0", + "image_format": "exr", + "multilayer_exr": false, + "force_combine": false, + "aov_list": [ + "empty" + ], + "additional_options": {} + } }, "CreateUnrealStaticMesh": { "enabled": true, From b64b0a66b06ea6fc8dfaeedc4a7c3bef1f53a609 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Tue, 19 Apr 2022 20:28:56 +0300 Subject: [PATCH 021/123] add function to grab Arnold settings --- .../maya/plugins/create/create_render.py | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index 4f0a394f85..84ac8f36ec 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -431,6 +431,20 @@ class CreateRender(plugin.Creator): kwargs["verify"] = not os.getenv("OPENPYPE_DONT_VERIFY_SSL", True) return requests.get(*args, **kwargs) + def _set_Arnold_settings(self): + """Sets settings for Arnold.""" + + img_ext = self.arnold_renderer.get("image_format") + self._set_global_output_settings() + # Resolution + resWidth = self.attributes.get("resolutionWidth") + resHeight = self.attributes.get("resolutionHeight") + + cmds.setAttr("defaultArnoldDriver.ai_translator", + img_ext, type="string") + cmds.setAttr("defaultResolution.width", resWidth) + cmds.setAttr("defaultResolution.height", resHeight) + def _set_default_renderer_settings(self, renderer): """Set basic settings based on renderer. @@ -448,18 +462,7 @@ class CreateRender(plugin.Creator): if renderer == "arnold": # set format to exr - - cmds.setAttr( - "defaultArnoldDriver.ai_translator", "exr", type="string") - self._set_global_output_settings() - # resolution - cmds.setAttr( - "defaultResolution.width", - asset["data"].get("resolutionWidth")) - cmds.setAttr( - "defaultResolution.height", - asset["data"].get("resolutionHeight")) - + self._set_Arnold_settings() if renderer == "vray": self._set_vray_settings(asset) if renderer == "redshift": From 5d56323050e48951930c0439b88d646b94d98872 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Tue, 19 Apr 2022 22:50:34 +0300 Subject: [PATCH 022/123] add redshift settings function --- .../hosts/maya/plugins/create/create_render.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index 84ac8f36ec..f0317ccb9e 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -466,6 +466,7 @@ class CreateRender(plugin.Creator): if renderer == "vray": self._set_vray_settings(asset) if renderer == "redshift": + self._set_redshift_settings() cmds.setAttr("redshiftOptions.imageFormat", 1) # resolution @@ -478,6 +479,19 @@ class CreateRender(plugin.Creator): self._set_global_output_settings() + def _set_redshift_settings(self): + """Sets settings for Arnold.""" + + img_ext = self.redshift_renderer.get("image_format") + self._set_global_output_settings() + # Resolution + resWidth = self.attributes.get("resolutionWidth") + resHeight = self.attributes.get("resolutionHeight") + + cmds.setAttr("redshiftOptions.imageFormat", img_ext) + cmds.setAttr("defaultResolution.width", resWidth) + cmds.setAttr("defaultResolution.height", resHeight) + def _set_vray_settings(self, asset): # type: (dict) -> None """Sets important settings for Vray.""" From b62fa7451b4a69460e7a2e26c4a3d0e25ca23353 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Tue, 19 Apr 2022 23:04:08 +0300 Subject: [PATCH 023/123] replace redshift settings setters with method --- openpype/hosts/maya/plugins/create/create_render.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index f0317ccb9e..757cc16fda 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -467,17 +467,6 @@ class CreateRender(plugin.Creator): self._set_vray_settings(asset) if renderer == "redshift": self._set_redshift_settings() - cmds.setAttr("redshiftOptions.imageFormat", 1) - - # resolution - cmds.setAttr( - "defaultResolution.width", - asset["data"].get("resolutionWidth")) - cmds.setAttr( - "defaultResolution.height", - asset["data"].get("resolutionHeight")) - - self._set_global_output_settings() def _set_redshift_settings(self): """Sets settings for Arnold.""" From 7ea7a0f5f5827ab20160a8ad635c5613179a4352 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Wed, 20 Apr 2022 23:40:42 +0300 Subject: [PATCH 024/123] remove extra code in render creator --- openpype/hosts/maya/api/render_settings.py | 24 ++++++++++++------- .../maya/plugins/create/create_render.py | 4 +--- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/openpype/hosts/maya/api/render_settings.py b/openpype/hosts/maya/api/render_settings.py index 48bf7fa56c..2614ca23e2 100644 --- a/openpype/hosts/maya/api/render_settings.py +++ b/openpype/hosts/maya/api/render_settings.py @@ -54,6 +54,20 @@ class RenderSettings(object): render_settings = RenderSettings(project_settings) render_settings.set_default_renderer_settings(renderer) + def _set_Arnold_settings(self): + """Sets settings for Arnold.""" + + img_ext = self.arnold_renderer.get("image_format") + self._set_global_output_settings() + # Resolution + resWidth = self.attributes.get("resolutionWidth") + resHeight = self.attributes.get("resolutionHeight") + + cmds.setAttr("defaultArnoldDriver.ai_translator", + img_ext, type="string") + cmds.setAttr("defaultResolution.width", resWidth) + cmds.setAttr("defaultResolution.height", resHeight) + def set_default_renderer_settings(self, renderer): """Set basic settings based on renderer. @@ -83,14 +97,8 @@ class RenderSettings(object): height = asset["data"].get("resolutionHeight") if renderer == "arnold": - # set format to exr - cmds.setAttr( - "defaultArnoldDriver.ai_translator", "exr", type="string") - self._set_global_output_settings() - - # resolution - cmds.setAttr("defaultResolution.width", width) - cmds.setAttr("defaultResolution.height", height) + # set renderer settings for Arnold from project settings + self._set_Arnold_settings() if renderer == "vray": self._set_vray_settings(aov_separator, width, height) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index 5431cfea57..0ef9665fdf 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -421,9 +421,7 @@ class CreateRender(plugin.Creator): asset = get_asset() - if renderer == "arnold": - # set format to exr - self._set_Arnold_settings() + if renderer == "vray": self._set_vray_settings(asset) if renderer == "redshift": From 854ec3b762f61d71be5e9358fefb67945057f1dd Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Wed, 20 Apr 2022 23:44:28 +0300 Subject: [PATCH 025/123] add missing get_asset() --- openpype/hosts/maya/plugins/create/create_render.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index 0ef9665fdf..313fb68fa7 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -14,7 +14,8 @@ from maya.app.renderSetup.model import renderSetup from avalon.api import Session from openpype.api import ( get_system_settings, - get_project_settings + get_project_settings, + get_asset, ) from openpype.hosts.maya.api import ( lib, @@ -421,7 +422,6 @@ class CreateRender(plugin.Creator): asset = get_asset() - if renderer == "vray": self._set_vray_settings(asset) if renderer == "redshift": From 3f488594bea9ecd1feda46987bea09195835a40c Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Thu, 21 Apr 2022 00:50:41 +0300 Subject: [PATCH 026/123] remove unused function --- .../hosts/maya/plugins/create/create_render.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index 313fb68fa7..e95e39e975 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -393,20 +393,6 @@ class CreateRender(plugin.Creator): kwargs["verify"] = not os.getenv("OPENPYPE_DONT_VERIFY_SSL", True) return requests.get(*args, **kwargs) - def _set_Arnold_settings(self): - """Sets settings for Arnold.""" - - img_ext = self.arnold_renderer.get("image_format") - self._set_global_output_settings() - # Resolution - resWidth = self.attributes.get("resolutionWidth") - resHeight = self.attributes.get("resolutionHeight") - - cmds.setAttr("defaultArnoldDriver.ai_translator", - img_ext, type="string") - cmds.setAttr("defaultResolution.width", resWidth) - cmds.setAttr("defaultResolution.height", resHeight) - def _set_default_renderer_settings(self, renderer): """Set basic settings based on renderer. From 0bc8ad9694c32eb096b67e1fc2dce335b53b9d1c Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Thu, 21 Apr 2022 00:52:54 +0300 Subject: [PATCH 027/123] change placement of redshift settings function --- openpype/hosts/maya/api/render_settings.py | 13 +++++++++++++ openpype/hosts/maya/plugins/create/create_render.py | 13 ------------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/openpype/hosts/maya/api/render_settings.py b/openpype/hosts/maya/api/render_settings.py index 2614ca23e2..6c741046ed 100644 --- a/openpype/hosts/maya/api/render_settings.py +++ b/openpype/hosts/maya/api/render_settings.py @@ -113,6 +113,19 @@ class RenderSettings(object): self._set_global_output_settings() + def _set_redshift_settings(self): + """Sets settings for Arnold.""" + + img_ext = self.redshift_renderer.get("image_format") + self._set_global_output_settings() + # Resolution + resWidth = self.attributes.get("resolutionWidth") + resHeight = self.attributes.get("resolutionHeight") + + cmds.setAttr("redshiftOptions.imageFormat", img_ext) + cmds.setAttr("defaultResolution.width", resWidth) + cmds.setAttr("defaultResolution.height", resHeight) + def _set_vray_settings(self, aov_separator, width, height): # type: (str, int, int) -> None """Sets important settings for Vray.""" diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index e95e39e975..3ab83c5143 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -413,19 +413,6 @@ class CreateRender(plugin.Creator): if renderer == "redshift": self._set_redshift_settings() - def _set_redshift_settings(self): - """Sets settings for Arnold.""" - - img_ext = self.redshift_renderer.get("image_format") - self._set_global_output_settings() - # Resolution - resWidth = self.attributes.get("resolutionWidth") - resHeight = self.attributes.get("resolutionHeight") - - cmds.setAttr("redshiftOptions.imageFormat", img_ext) - cmds.setAttr("defaultResolution.width", resWidth) - cmds.setAttr("defaultResolution.height", resHeight) - def _set_vray_settings(self, asset): # type: (dict) -> None """Sets important settings for Vray.""" From 71434dee8b500bdabc7073535943b9fbdf047558 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Thu, 21 Apr 2022 10:48:28 +0300 Subject: [PATCH 028/123] remove unused refactored function --- openpype/hosts/maya/plugins/create/create_render.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index 3ab83c5143..93f305f3b9 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -456,11 +456,3 @@ class CreateRender(plugin.Creator): cmds.setAttr( "{}.height".format(node), asset["data"].get("resolutionHeight")) - - @staticmethod - def _set_global_output_settings(): - # enable animation - cmds.setAttr("defaultRenderGlobals.outFormatControl", 0) - cmds.setAttr("defaultRenderGlobals.animation", 1) - cmds.setAttr("defaultRenderGlobals.putFrameBeforeExt", 1) - cmds.setAttr("defaultRenderGlobals.extensionPadding", 4) From 50e60acc22e297238be281984bbf871ceadf9ddd Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Thu, 21 Apr 2022 10:57:30 +0300 Subject: [PATCH 029/123] removed unused refactored vray settings func --- .../maya/plugins/create/create_render.py | 44 ------------------- 1 file changed, 44 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index 93f305f3b9..815b2a6b0f 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -412,47 +412,3 @@ class CreateRender(plugin.Creator): self._set_vray_settings(asset) if renderer == "redshift": self._set_redshift_settings() - - def _set_vray_settings(self, asset): - # type: (dict) -> None - """Sets important settings for Vray.""" - settings = cmds.ls(type="VRaySettingsNode") - node = settings[0] if settings else cmds.createNode("VRaySettingsNode") - - # set separator - # set it in vray menu - if cmds.optionMenuGrp("vrayRenderElementSeparator", exists=True, - q=True): - items = cmds.optionMenuGrp( - "vrayRenderElementSeparator", ill=True, query=True) - - separators = [cmds.menuItem(i, label=True, query=True) for i in items] # noqa: E501 - try: - sep_idx = separators.index(self.aov_separator) - except ValueError: - raise CreatorError( - "AOV character {} not in {}".format( - self.aov_separator, separators)) - - cmds.optionMenuGrp( - "vrayRenderElementSeparator", sl=sep_idx + 1, edit=True) - cmds.setAttr( - "{}.fileNameRenderElementSeparator".format(node), - self.aov_separator, - type="string" - ) - # set format to exr - cmds.setAttr( - "{}.imageFormatStr".format(node), "exr", type="string") - - # animType - cmds.setAttr( - "{}.animType".format(node), 1) - - # resolution - cmds.setAttr( - "{}.width".format(node), - asset["data"].get("resolutionWidth")) - cmds.setAttr( - "{}.height".format(node), - asset["data"].get("resolutionHeight")) From 6f58d72be5e5f23ecdc151eed1d135edd750b5e0 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Thu, 21 Apr 2022 11:18:40 +0300 Subject: [PATCH 030/123] add/cleanup refactored redshift settings function --- openpype/hosts/maya/api/render_settings.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/openpype/hosts/maya/api/render_settings.py b/openpype/hosts/maya/api/render_settings.py index 6c741046ed..75646b858b 100644 --- a/openpype/hosts/maya/api/render_settings.py +++ b/openpype/hosts/maya/api/render_settings.py @@ -104,14 +104,7 @@ class RenderSettings(object): self._set_vray_settings(aov_separator, width, height) if renderer == "redshift": - # set format to exr - cmds.setAttr("RedshiftOptions.imageFormat", 1) - - # resolution - cmds.setAttr("defaultResolution.width", width) - cmds.setAttr("defaultResolution.height", height) - - self._set_global_output_settings() + self._set_redshift_settings() def _set_redshift_settings(self): """Sets settings for Arnold.""" From 105fb3e377e207f32f385fee4e03bcc363ff0b4a Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Thu, 21 Apr 2022 11:19:07 +0300 Subject: [PATCH 031/123] remove refactored default renderer settings func --- .../maya/plugins/create/create_render.py | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index 815b2a6b0f..97f059077f 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -392,23 +392,3 @@ class CreateRender(plugin.Creator): if "verify" not in kwargs: kwargs["verify"] = not os.getenv("OPENPYPE_DONT_VERIFY_SSL", True) return requests.get(*args, **kwargs) - - def _set_default_renderer_settings(self, renderer): - """Set basic settings based on renderer. - - Args: - renderer (str): Renderer name. - - """ - prefix = self._image_prefixes[renderer] - prefix = prefix.replace("{aov_separator}", self.aov_separator) - cmds.setAttr(self._image_prefix_nodes[renderer], - prefix, - type="string") - - asset = get_asset() - - if renderer == "vray": - self._set_vray_settings(asset) - if renderer == "redshift": - self._set_redshift_settings() From 2cd42298e9b51d8323c1b4a023d74115ebf62bc0 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Thu, 21 Apr 2022 11:27:57 +0300 Subject: [PATCH 032/123] remove unused import --- openpype/hosts/maya/plugins/create/create_render.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index 97f059077f..f6e75c825c 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -15,7 +15,6 @@ from avalon.api import Session from openpype.api import ( get_system_settings, get_project_settings, - get_asset, ) from openpype.hosts.maya.api import ( lib, From 54ff5a8e53449bf4ae895e4ddb142dbe25b0fe95 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Thu, 21 Apr 2022 20:17:40 +0300 Subject: [PATCH 033/123] remove extra import --- openpype/hosts/maya/plugins/create/create_render.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index f6e75c825c..86276c3f77 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -24,7 +24,6 @@ from openpype.hosts.maya.api import ( from openpype.modules import ModulesManager from openpype.pipeline import CreatorError -from avalon.api import Session class CreateRender(plugin.Creator): """Create *render* instance. From 2867a2f2a0da67112c5a893eddb131fcc3ee6832 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Thu, 21 Apr 2022 20:18:10 +0300 Subject: [PATCH 034/123] fix redshift comment --- openpype/hosts/maya/api/render_settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/api/render_settings.py b/openpype/hosts/maya/api/render_settings.py index 75646b858b..1a2064986e 100644 --- a/openpype/hosts/maya/api/render_settings.py +++ b/openpype/hosts/maya/api/render_settings.py @@ -107,7 +107,7 @@ class RenderSettings(object): self._set_redshift_settings() def _set_redshift_settings(self): - """Sets settings for Arnold.""" + """Sets settings for Redshift.""" img_ext = self.redshift_renderer.get("image_format") self._set_global_output_settings() From 675c7a000601257fbfad78eb2339377e767d226d Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Thu, 21 Apr 2022 22:30:07 +0300 Subject: [PATCH 035/123] replace avalon CreatorError with OP's impl. --- openpype/hosts/maya/api/render_settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/api/render_settings.py b/openpype/hosts/maya/api/render_settings.py index 1a2064986e..48026e1510 100644 --- a/openpype/hosts/maya/api/render_settings.py +++ b/openpype/hosts/maya/api/render_settings.py @@ -5,7 +5,7 @@ from openpype.api import ( get_asset) from avalon.api import Session -from avalon.api import CreatorError +from openpype.pipeline import CreatorError class RenderSettings(object): From 74cc8230ea01c27277f5e61414fd3d7b3ec3f81d Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Thu, 21 Apr 2022 22:31:43 +0300 Subject: [PATCH 036/123] remove unused import --- openpype/hosts/maya/plugins/create/create_render.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index 86276c3f77..bdd1844b5e 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -22,7 +22,6 @@ from openpype.hosts.maya.api import ( render_settings ) from openpype.modules import ModulesManager -from openpype.pipeline import CreatorError class CreateRender(plugin.Creator): From 4d4ca196f7808a5007893136dcf5d4c82d84cf21 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Thu, 21 Apr 2022 23:44:08 +0300 Subject: [PATCH 037/123] remove redundant code --- openpype/hosts/maya/plugins/publish/collect_render.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/openpype/hosts/maya/plugins/publish/collect_render.py b/openpype/hosts/maya/plugins/publish/collect_render.py index 839ead8bd6..ab7b7a78ac 100644 --- a/openpype/hosts/maya/plugins/publish/collect_render.py +++ b/openpype/hosts/maya/plugins/publish/collect_render.py @@ -325,10 +325,6 @@ class CollectMayaRender(pyblish.api.ContextPlugin): if instance.data['family'] == "workfile": instance.data["version"] = context.data["version"] - # Apply each user defined attribute as data - for attr, value in avalon.maya.read(layer).items(): - data[attr] = value - # handle standalone renderers if render_instance.data.get("vrayScene") is True: data["families"].append("vrayscene_render") From 9faa7e0b618f06af28081a521fe4cec4753092d5 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 22 Apr 2022 00:03:37 +0300 Subject: [PATCH 038/123] Rename file to match convention. --- .../hosts/maya/api/{render_settings.py => lib_rendersettings.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename openpype/hosts/maya/api/{render_settings.py => lib_rendersettings.py} (100%) diff --git a/openpype/hosts/maya/api/render_settings.py b/openpype/hosts/maya/api/lib_rendersettings.py similarity index 100% rename from openpype/hosts/maya/api/render_settings.py rename to openpype/hosts/maya/api/lib_rendersettings.py From 24a1dea3eb8688feec1ae5379d9708fe2f94d95f Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 22 Apr 2022 00:04:19 +0300 Subject: [PATCH 039/123] Append render settings schema. --- .../projects_schema/schema_project_maya.json | 4 + .../schemas/schema_maya_render_settings.json | 411 ++++++++++++++++++ 2 files changed, 415 insertions(+) create mode 100644 openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json diff --git a/openpype/settings/entities/schemas/projects_schema/schema_project_maya.json b/openpype/settings/entities/schemas/projects_schema/schema_project_maya.json index cc70516c72..76a235bc12 100644 --- a/openpype/settings/entities/schemas/projects_schema/schema_project_maya.json +++ b/openpype/settings/entities/schemas/projects_schema/schema_project_maya.json @@ -51,6 +51,10 @@ "type": "schema", "name": "schema_maya_scriptsmenu" }, + { + "type": "schema", + "name": "schema_maya_render_settings" + }, { "type": "schema", "name": "schema_maya_create" diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json new file mode 100644 index 0000000000..62e9c9e461 --- /dev/null +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json @@ -0,0 +1,411 @@ +{ + "type": "dict", + "collapsible": true, + "key": "RenderSettings", + "label": "Render Settings", + "checkbox_key": "enabled", + "children": [ + { + "type": "boolean", + "key": "enabled", + "label": "Enabled" + }, + { + "type": "text", + "key": "default_render_image_folder", + "label": "Default render image folder" + }, + { + "key": "aov_separator", + "label": "AOV Separator character", + "type": "enum", + "multiselection": false, + "default": "underscore", + "enum_items": [ + {"dash": "- (dash)"}, + {"underscore": "_ (underscore)"}, + {"dot": ". (dot)"} + ] + }, + { + "type": "dict", + "collapsible": true, + "key": "arnold_renderer", + "label": "Arnold Renderer", + "is_group": true, + "children": [ + { + "key": "image_prefix", + "label": "Image prefix template", + "type": "text" + }, + { + "key": "image_format", + "label": "Output Image Format", + "type": "enum", + "multiselection": false, + "defaults": "exr", + "enum_items": [ + {"jpeg": "jpeg"}, + {"png": "png"}, + {"deepexr": "deep exr"}, + {"tif": "tif"}, + {"exr": "exr"}, + {"maya": "maya"}, + {"mtoa_shaders": "mtoa_shaders"} + ] + }, + { + "key": "multilayer_exr", + "label": "Multilayer (exr)", + "type": "boolean" + }, + { + "key": "tiled", + "label": "Tiled (tif, exr)", + "type": "boolean" + }, + { + "key": "aov_list", + "label": "AOVs to create", + "type": "enum", + "multiselection": true, + "defaults": "empty", + "enum_items": [ + {"empty": "< empty >"}, + {"ID": "ID"}, + {"N": "N"}, + {"P": "P"}, + {"Pref": "Pref"}, + {"RGBA": "RGBA"}, + {"Z": "Z"}, + {"albedo": "albedo"}, + {"background": "background"}, + {"coat": "coat"}, + {"coat_albedo": "coat_albedo"}, + {"coat_direct": "coat_direct"}, + {"coat_indirect": "coat_indirect"}, + {"cputime": "cputime"}, + {"crypto_asset": "crypto_asset"}, + {"crypto_material": "cypto_material"}, + {"crypto_object": "crypto_object"}, + {"diffuse": "diffuse"}, + {"diffuse_albedo": "diffuse_albedo"}, + {"diffuse_direct": "diffuse_direct"}, + {"diffuse_indirect": "diffuse_indirect"}, + {"direct": "direct"}, + {"emission": "emission"}, + {"highlight": "highlight"}, + {"indirect": "indirect"}, + {"motionvector": "motionvector"}, + {"opacity": "opacity"}, + {"raycount": "raycount"}, + {"rim_light": "rim_light"}, + {"shadow": "shadow"}, + {"shadow_diff": "shadow_diff"}, + {"shadow_mask": "shadow_mask"}, + {"shadow_matte": "shadow_matte"}, + {"sheen": "sheen"}, + {"sheen_albedo": "sheen_albedo"}, + {"sheen_direct": "sheen_direct"}, + {"sheen_indirect": "sheen_indirect"}, + {"specular": "specular"}, + {"specular_albedo": "specular_albedo"}, + {"specular_direct": "specular_direct"}, + {"specular_indirect": "specular_indirect"}, + {"sss": "sss"}, + {"sss_albedo": "sss_albedo"}, + {"sss_direct": "sss_direct"}, + {"sss_indirect": "sss_indirect"}, + {"transmission": "transmission"}, + {"transmission_albedo": "transmission_albedo"}, + {"transmission_direct": "transmission_direct"}, + {"transmission_indirect": "transmission_indirect"}, + {"volume": "volume"}, + {"volume_Z": "volume_Z"}, + {"volume_albedo": "volume_albedo"}, + {"volume_direct": "volume_direct"}, + {"volume_indirect": "volume_indirect"}, + {"volume_opacity": "volume_opacity"} + ] + }, + { + "type": "label", + "label": "Add additional options - put attribute and value, like AASamples" + }, + { + "type": "dict-modifiable", + "key": "additional_options", + "label": "Additional Renderer Options", + "use_label_wrap": true, + "object_type": { + "type": "text" + } + } + ] + }, + { + "type": "dict", + "collapsible": true, + "key": "vray_renderer", + "label": "V-Ray Renderer", + "is_group": true, + "children": [ + { + "key": "image_prefix", + "label": "Image prefix template", + "type": "text" + }, + { + "key": "engine", + "label": "Production Engine", + "type": "enum", + "multiselection": false, + "defaults": "1", + "enum_items": [ + {"1": "V-Ray"}, + {"2": "V-Ray GPU"} + ] + }, + { + "key": "image_format", + "label": "Output Image Format", + "type": "enum", + "multiselection": false, + "defaults": "exr", + "enum_items": [ + {"png": "png"}, + {"jpg": "jpg"}, + {"vrimg": "vrimg"}, + {"hdr": "hdr"}, + {"exr": "exr"}, + {"exr (multichannel)": "exr (multichannel)"}, + {"exr (deep)": "exr (deep)"}, + {"tga": "tga"}, + {"bmp": "bmp"}, + {"sgi": "sgi"} + ] + }, + { + "key": "aov_list", + "label": "AOVs to create", + "type": "enum", + "multiselection": true, + "defaults": "empty", + "enum_items": [ + {"empty": "< empty >"}, + {"atmosphereChannel": "atmosphere"}, + {"backgroundChannel": "background"}, + {"bumpNormalsChannel": "bumpnormals"}, + {"causticsChannel": "caustics"}, + {"coatFilterChannel": "coat_filter"}, + {"coatGlossinessChannel": "coatGloss"}, + {"coatReflectionChannel": "coat_reflection"}, + {"vrayCoatChannel": "coat_specular"}, + {"CoverageChannel": "coverage"}, + {"cryptomatteChannel": "cryptomatte"}, + {"customColor": "custom_color"}, + {"drBucketChannel": "DR"}, + {"denoiserChannel": "denoiser"}, + {"diffuseChannel": "diffuse"}, + {"ExtraTexElement": "extraTex"}, + {"giChannel": "GI"}, + {"LightMixElement": "None"}, + {"lightingChannel": "lighting"}, + {"LightingAnalysisChannel": "LightingAnalysis"}, + {"materialIDChannel": "materialID"}, + {"MaterialSelectElement": "materialSelect"}, + {"matteShadowChannel": "matteShadow"}, + {"MultiMatteElement": "multimatte"}, + {"multimatteIDChannel": "multimatteID"}, + {"normalsChannel": "normals"}, + {"nodeIDChannel": "objectId"}, + {"objectSelectChannel": "objectSelect"}, + {"rawCoatFilterChannel": "raw_coat_filter"}, + {"rawCoatReflectionChannel": "raw_coat_reflection"}, + {"rawDiffuseFilterChannel": "rawDiffuseFilter"}, + {"rawGiChannel": "rawGI"}, + {"rawLightChannel": "rawLight"}, + {"rawReflectionChannel": "rawReflection"}, + {"rawReflectionFilterChannel": "rawReflectionFilter"}, + {"rawRefractionChannel": "rawRefraction"}, + {"rawRefractionFilterChannel": "rawRefractionFilter"}, + {"rawShadowChannel": "rawShadow"}, + {"rawSheenFilterChannel": "raw_sheen_filter"}, + {"rawSheenReflectionChannel": "raw_sheen_reflection"}, + {"rawTotalLightChannel": "rawTotalLight"}, + {"reflectIORChannel": "reflIOR"}, + {"reflectChannel": "reflect"}, + {"reflectionFilterChannel": "reflectionFilter"}, + {"reflectGlossinessChannel": "reflGloss"}, + {"refractChannel": "refract"}, + {"refractionFilterChannel": "refractionFilter"}, + {"refractGlossinessChannel": "refrGloss"}, + {"renderIDChannel": "renderId"}, + {"FastSSS2Channel": "SSS"}, + {"sampleRateChannel": "sampleRate"}, + {"samplerInfo": "samplerInfo"}, + {"selfIllumChannel": "selfIllum"}, + {"shadowChannel": "shadow"}, + {"sheenFilterChannel": "sheen_filter"}, + {"sheenGlossinessChannel": "sheenGloss"}, + {"sheenReflectionChannel": "sheen_reflection"}, + {"vraySheenChannel": "sheen_specular"}, + {"specularChannel": "specular"}, + {"Toon": "Toon"}, + {"toonLightingChannel": "toonLighting"}, + {"toonSpecularChannel": "toonSpecular"}, + {"totalLightChannel": "totalLight"}, + {"unclampedColorChannel": "unclampedColor"}, + {"VRScansPaintMaskChannel": "VRScansPaintMask"}, + {"VRScansZoneMaskChannel": "VRScansZoneMask"}, + {"velocityChannel": "velocity"}, + {"zdepthChannel": "zDepth"}, + {"LightSelectElement": "lightselect"} + ] + }, + { + "type": "label", + "label": "Add additional options - put attribute and value, like aaFilterSize" + }, + { + "type": "dict-modifiable", + "key": "additional_options", + "label": "Additional Renderer Options", + "use_label_wrap": true, + "object_type": { + "type": "text" + } + } + ] + }, + { + "type": "dict", + "collapsible": true, + "key": "redshift_renderer", + "label": "Redshift Renderer", + "is_group": true, + "children": [ + { + "key": "image_prefix", + "label": "Image prefix template", + "type": "text" + }, + { + "key": "primary_gi_engine", + "label": "Primary GI Engine", + "type": "enum", + "multiselection": false, + "defaults": "0", + "enum_items": [ + {"0": "None"}, + {"1": "Photon Map"}, + {"2": "Irradiance Cache"}, + {"3": "Brute Force"} + ] + }, + { + "key": "secondary_gi_engine", + "label": "Secondary GI Engine", + "type": "enum", + "multiselection": false, + "defaults": "0", + "enum_items": [ + {"0": "None"}, + {"1": "Photon Map"}, + {"2": "Irradiance Cache"}, + {"3": "Brute Force"} + ] + }, + { + "key": "image_format", + "label": "Output Image Format", + "type": "enum", + "multiselection": false, + "defaults": "exr", + "enum_items": [ + {"iff": "Maya IFF"}, + {"exr": "OpenEXR"}, + {"tif": "TIFF"}, + {"png": "PNG"}, + {"tga": "Targa"}, + {"jpg": "JPEG"} + ] + }, + { + "key": "multilayer_exr", + "label": "Multilayer (exr)", + "type": "boolean" + }, + { + "key": "force_combine", + "label": "Force combine beauty and AOVs", + "type": "boolean" + }, + { + "key": "aov_list", + "label": "AOVs to create", + "type": "enum", + "multiselection": true, + "defaults": "empty", + "enum_items": [ + {"empty": "< none >"}, + {"AO": "Ambient Occlusion"}, + {"Background": "Background"}, + {"Beauty": "Beauty"}, + {"BumpNormals": "Bump Normals"}, + {"Caustics": "Caustics"}, + {"CausticsRaw": "Caustics Raw"}, + {"Cryptomatte": "Cryptomatte"}, + {"Custom": "Custom"}, + {"Z": "Depth"}, + {"DiffuseFilter": "Diffuse Filter"}, + {"DiffuseLighting": "Diffuse Lighting"}, + {"DiffuseLightingRaw": "Diffuse Lighting Raw"}, + {"Emission": "Emission"}, + {"GI": "Global Illumination"}, + {"GIRaw": "Global Illumination Raw"}, + {"Matte": "Matte"}, + {"MotionVectors": "Ambient Occlusion"}, + {"N": "Normals"}, + {"ID": "ObjectID"}, + {"ObjectBumpNormal": "Object-Space Bump Normals"}, + {"ObjectPosition": "Object-Space Positions"}, + {"PuzzleMatte": "Puzzle Matte"}, + {"Reflections": "Reflections"}, + {"ReflectionsFilter": "Reflections Filter"}, + {"ReflectionsRaw": "Reflections Raw"}, + {"Refractions": "Refractions"}, + {"RefractionsFilter": "Refractions Filter"}, + {"RefractionsRaw": "Refractions Filter"}, + {"Shadows": "Shadows"}, + {"SpecularLighting": "Specular Lighting"}, + {"SSS": "Sub Surface Scatter"}, + {"SSSRaw": "Sub Surface Scatter Raw"}, + {"TotalDiffuseLightingRaw": "Total Diffuse Lighting Raw"}, + {"TotalTransLightingRaw": "Total Translucency Filter"}, + {"TransTint": "Translucency Filter"}, + {"TransGIRaw": "Translucency Lighting Raw"}, + {"VolumeFogEmission": "Volume Fog Emission"}, + {"VolumeFogTint": "Volume Fog Tint"}, + {"VolumeLighting": "Volume Lighting"}, + {"P": "World Position"} + ] + }, + { + "type": "label", + "label": "Add additional options - put attribute and value, like reflectionMaxTraceDepth" + }, + { + "type": "dict-modifiable", + "key": "additional_options", + "label": "Additional Renderer Options", + "use_label_wrap": true, + "object_type": { + "type": "text" + } + } + ] + } + ] +} \ No newline at end of file From c853e8440f81123b089b8f329ce6b179a703d8ac Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 22 Apr 2022 00:11:23 +0300 Subject: [PATCH 040/123] Add comment about pools --- openpype/hosts/maya/plugins/create/create_render.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index bdd1844b5e..b718bbfa9c 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -18,8 +18,8 @@ from openpype.api import ( ) from openpype.hosts.maya.api import ( lib, - plugin, - render_settings + lib_rendersettings, + plugin ) from openpype.modules import ModulesManager @@ -158,7 +158,7 @@ class CreateRender(plugin.Creator): collection.getSelector().setPattern('*') self.log.info("Applying default render settings..") - render_settings.RenderSettings.apply_defaults() + lib_rendersettings.RenderSettings.apply_defaults() return self.instance def _deadline_webservice_changed(self): @@ -209,7 +209,7 @@ class CreateRender(plugin.Creator): def _create_render_settings(self): """Create instance settings.""" - # get pools + # get pools (slave machines of the render farm) pool_names = [] default_priority = 50 From b5004aeaa5696a14d745d8e93c1113de2bc3b8cc Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 22 Apr 2022 00:13:23 +0300 Subject: [PATCH 041/123] Add comment about pool_names source --- openpype/hosts/maya/plugins/create/create_render.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index b718bbfa9c..e431eb2bf1 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -253,7 +253,8 @@ class CreateRender(plugin.Creator): # if 'default' server is not between selected, # use first one for initial list of pools. deadline_url = next(iter(self.deadline_servers.values())) - + # Uses function to get pool machines from the assigned deadline + # url in settings pool_names = self._get_deadline_pools(deadline_url) maya_submit_dl = self._project_settings.get( "deadline", {}).get( From 05ed9c5c5396dca022785215c73db3ff8ef6452e Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 22 Apr 2022 00:19:39 +0300 Subject: [PATCH 042/123] Redshift function cleanup. --- openpype/hosts/maya/api/lib_rendersettings.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 48026e1510..887cbc775e 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -106,18 +106,14 @@ class RenderSettings(object): if renderer == "redshift": self._set_redshift_settings() - def _set_redshift_settings(self): + def _set_redshift_settings(self, width, height): """Sets settings for Redshift.""" img_ext = self.redshift_renderer.get("image_format") self._set_global_output_settings() - # Resolution - resWidth = self.attributes.get("resolutionWidth") - resHeight = self.attributes.get("resolutionHeight") - cmds.setAttr("redshiftOptions.imageFormat", img_ext) - cmds.setAttr("defaultResolution.width", resWidth) - cmds.setAttr("defaultResolution.height", resHeight) + cmds.setAttr("defaultResolution.width", width) + cmds.setAttr("defaultResolution.height", height) def _set_vray_settings(self, aov_separator, width, height): # type: (str, int, int) -> None From 5969124fbc059f9f6d42db866c5f5a02383e2d4e Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 22 Apr 2022 00:21:08 +0300 Subject: [PATCH 043/123] Arnold function cleanup. --- openpype/hosts/maya/api/lib_rendersettings.py | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 887cbc775e..13ab0ae6cb 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -54,20 +54,6 @@ class RenderSettings(object): render_settings = RenderSettings(project_settings) render_settings.set_default_renderer_settings(renderer) - def _set_Arnold_settings(self): - """Sets settings for Arnold.""" - - img_ext = self.arnold_renderer.get("image_format") - self._set_global_output_settings() - # Resolution - resWidth = self.attributes.get("resolutionWidth") - resHeight = self.attributes.get("resolutionHeight") - - cmds.setAttr("defaultArnoldDriver.ai_translator", - img_ext, type="string") - cmds.setAttr("defaultResolution.width", resWidth) - cmds.setAttr("defaultResolution.height", resHeight) - def set_default_renderer_settings(self, renderer): """Set basic settings based on renderer. @@ -106,6 +92,16 @@ class RenderSettings(object): if renderer == "redshift": self._set_redshift_settings() + def _set_Arnold_settings(self, width, height): + """Sets settings for Arnold.""" + + img_ext = self.arnold_renderer.get("image_format") + self._set_global_output_settings() + cmds.setAttr("defaultArnoldDriver.ai_translator", + img_ext, type="string") + cmds.setAttr("defaultResolution.width", width) + cmds.setAttr("defaultResolution.height", height) + def _set_redshift_settings(self, width, height): """Sets settings for Redshift.""" From 47e70d33c79787d88d912daa771a007ca0ef101d Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 22 Apr 2022 00:31:03 +0300 Subject: [PATCH 044/123] add comment about vray file format setting --- openpype/hosts/maya/api/lib_rendersettings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 13ab0ae6cb..5e0d40e6f9 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -142,7 +142,7 @@ class RenderSettings(object): type="string" ) - # set format to exr + # Set render file format to exr cmds.setAttr("{}.imageFormatStr".format(node), "exr", type="string") # animType From b902b2a7e96008268d0f87493265195297b679f2 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 22 Apr 2022 07:55:49 +0300 Subject: [PATCH 045/123] Remove unnecessary checkbox --- .../projects_schema/schemas/schema_maya_render_settings.json | 1 - 1 file changed, 1 deletion(-) diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json index 62e9c9e461..2f8b9562bf 100644 --- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json @@ -3,7 +3,6 @@ "collapsible": true, "key": "RenderSettings", "label": "Render Settings", - "checkbox_key": "enabled", "children": [ { "type": "boolean", From 61b59ef2c4b6f1af5fa4eedc7c1ab361cf603d70 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 25 Apr 2022 09:09:38 +0300 Subject: [PATCH 046/123] add checkbox to render settings to apply render settings on creation --- .../projects_schema/schemas/schema_maya_render_settings.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json index 2f8b9562bf..8a5730fbef 100644 --- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json @@ -6,8 +6,8 @@ "children": [ { "type": "boolean", - "key": "enabled", - "label": "Enabled" + "key": "apply_render_settings", + "label": "Apply Render Settings on creation" }, { "type": "text", From 998eb0ee762700c80ca675cbfe3db9d6d8f0e1dd Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 25 Apr 2022 09:12:55 +0300 Subject: [PATCH 047/123] remove redundant schema settings --- .../schemas/schema_maya_create_render.json | 397 ------------------ 1 file changed, 397 deletions(-) diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create_render.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create_render.json index f4a724cd5c..68ad7ad63d 100644 --- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create_render.json +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create_render.json @@ -15,403 +15,6 @@ "key": "defaults", "label": "Default Subsets", "object_type": "text" - }, - { - "type": "text", - "key": "default_render_image_folder", - "label": "Default render image folder" - }, - { - "key": "aov_separator", - "label": "AOV Separator character", - "type": "enum", - "multiselection": false, - "default": "underscore", - "enum_items": [ - {"dash": "- (dash)"}, - {"underscore": "_ (underscore)"}, - {"dot": ". (dot)"} - ] - }, - { - "type": "dict", - "collapsible": true, - "key": "arnold_renderer", - "label": "Arnold Renderer", - "is_group": true, - "children": [ - { - "key": "image_prefix", - "label": "Image prefix template", - "type": "text" - }, - { - "key": "image_format", - "label": "Output Image Format", - "type": "enum", - "multiselection": false, - "defaults": "exr", - "enum_items": [ - {"jpeg": "jpeg"}, - {"png": "png"}, - {"deepexr": "deep exr"}, - {"tif": "tif"}, - {"exr": "exr"}, - {"maya": "maya"}, - {"mtoa_shaders": "mtoa_shaders"} - ] - }, - { - "key": "multilayer_exr", - "label": "Multilayer (exr)", - "type": "boolean" - }, - { - "key": "tiled", - "label": "Tiled (tif, exr)", - "type": "boolean" - }, - { - "key": "aov_list", - "label": "AOVs to create", - "type": "enum", - "multiselection": true, - "defaults": "empty", - "enum_items": [ - {"empty": "< empty >"}, - {"ID": "ID"}, - {"N": "N"}, - {"P": "P"}, - {"Pref": "Pref"}, - {"RGBA": "RGBA"}, - {"Z": "Z"}, - {"albedo": "albedo"}, - {"background": "background"}, - {"coat": "coat"}, - {"coat_albedo": "coat_albedo"}, - {"coat_direct": "coat_direct"}, - {"coat_indirect": "coat_indirect"}, - {"cputime": "cputime"}, - {"crypto_asset": "crypto_asset"}, - {"crypto_material": "cypto_material"}, - {"crypto_object": "crypto_object"}, - {"diffuse": "diffuse"}, - {"diffuse_albedo": "diffuse_albedo"}, - {"diffuse_direct": "diffuse_direct"}, - {"diffuse_indirect": "diffuse_indirect"}, - {"direct": "direct"}, - {"emission": "emission"}, - {"highlight": "highlight"}, - {"indirect": "indirect"}, - {"motionvector": "motionvector"}, - {"opacity": "opacity"}, - {"raycount": "raycount"}, - {"rim_light": "rim_light"}, - {"shadow": "shadow"}, - {"shadow_diff": "shadow_diff"}, - {"shadow_mask": "shadow_mask"}, - {"shadow_matte": "shadow_matte"}, - {"sheen": "sheen"}, - {"sheen_albedo": "sheen_albedo"}, - {"sheen_direct": "sheen_direct"}, - {"sheen_indirect": "sheen_indirect"}, - {"specular": "specular"}, - {"specular_albedo": "specular_albedo"}, - {"specular_direct": "specular_direct"}, - {"specular_indirect": "specular_indirect"}, - {"sss": "sss"}, - {"sss_albedo": "sss_albedo"}, - {"sss_direct": "sss_direct"}, - {"sss_indirect": "sss_indirect"}, - {"transmission": "transmission"}, - {"transmission_albedo": "transmission_albedo"}, - {"transmission_direct": "transmission_direct"}, - {"transmission_indirect": "transmission_indirect"}, - {"volume": "volume"}, - {"volume_Z": "volume_Z"}, - {"volume_albedo": "volume_albedo"}, - {"volume_direct": "volume_direct"}, - {"volume_indirect": "volume_indirect"}, - {"volume_opacity": "volume_opacity"} - ] - }, - { - "type": "label", - "label": "Add additional options - put attribute and value, like AASamples" - }, - { - "type": "dict-modifiable", - "key": "additional_options", - "label": "Additional Renderer Options", - "use_label_wrap": true, - "object_type": { - "type": "text" - } - } - ] - }, - { - "type": "dict", - "collapsible": true, - "key": "vray_renderer", - "label": "V-Ray Renderer", - "is_group": true, - "children": [ - { - "key": "image_prefix", - "label": "Image prefix template", - "type": "text" - }, - { - "key": "engine", - "label": "Production Engine", - "type": "enum", - "multiselection": false, - "defaults": "1", - "enum_items": [ - {"1": "V-Ray"}, - {"2": "V-Ray GPU"} - ] - }, - { - "key": "image_format", - "label": "Output Image Format", - "type": "enum", - "multiselection": false, - "defaults": "exr", - "enum_items": [ - {"png": "png"}, - {"jpg": "jpg"}, - {"vrimg": "vrimg"}, - {"hdr": "hdr"}, - {"exr": "exr"}, - {"exr (multichannel)": "exr (multichannel)"}, - {"exr (deep)": "exr (deep)"}, - {"tga": "tga"}, - {"bmp": "bmp"}, - {"sgi": "sgi"} - ] - }, - { - "key": "aov_list", - "label": "AOVs to create", - "type": "enum", - "multiselection": true, - "defaults": "empty", - "enum_items": [ - {"empty": "< empty >"}, - {"atmosphereChannel": "atmosphere"}, - {"backgroundChannel": "background"}, - {"bumpNormalsChannel": "bumpnormals"}, - {"causticsChannel": "caustics"}, - {"coatFilterChannel": "coat_filter"}, - {"coatGlossinessChannel": "coatGloss"}, - {"coatReflectionChannel": "coat_reflection"}, - {"vrayCoatChannel": "coat_specular"}, - {"CoverageChannel": "coverage"}, - {"cryptomatteChannel": "cryptomatte"}, - {"customColor": "custom_color"}, - {"drBucketChannel": "DR"}, - {"denoiserChannel": "denoiser"}, - {"diffuseChannel": "diffuse"}, - {"ExtraTexElement": "extraTex"}, - {"giChannel": "GI"}, - {"LightMixElement": "None"}, - {"lightingChannel": "lighting"}, - {"LightingAnalysisChannel": "LightingAnalysis"}, - {"materialIDChannel": "materialID"}, - {"MaterialSelectElement": "materialSelect"}, - {"matteShadowChannel": "matteShadow"}, - {"MultiMatteElement": "multimatte"}, - {"multimatteIDChannel": "multimatteID"}, - {"normalsChannel": "normals"}, - {"nodeIDChannel": "objectId"}, - {"objectSelectChannel": "objectSelect"}, - {"rawCoatFilterChannel": "raw_coat_filter"}, - {"rawCoatReflectionChannel": "raw_coat_reflection"}, - {"rawDiffuseFilterChannel": "rawDiffuseFilter"}, - {"rawGiChannel": "rawGI"}, - {"rawLightChannel": "rawLight"}, - {"rawReflectionChannel": "rawReflection"}, - {"rawReflectionFilterChannel": "rawReflectionFilter"}, - {"rawRefractionChannel": "rawRefraction"}, - {"rawRefractionFilterChannel": "rawRefractionFilter"}, - {"rawShadowChannel": "rawShadow"}, - {"rawSheenFilterChannel": "raw_sheen_filter"}, - {"rawSheenReflectionChannel": "raw_sheen_reflection"}, - {"rawTotalLightChannel": "rawTotalLight"}, - {"reflectIORChannel": "reflIOR"}, - {"reflectChannel": "reflect"}, - {"reflectionFilterChannel": "reflectionFilter"}, - {"reflectGlossinessChannel": "reflGloss"}, - {"refractChannel": "refract"}, - {"refractionFilterChannel": "refractionFilter"}, - {"refractGlossinessChannel": "refrGloss"}, - {"renderIDChannel": "renderId"}, - {"FastSSS2Channel": "SSS"}, - {"sampleRateChannel": "sampleRate"}, - {"samplerInfo": "samplerInfo"}, - {"selfIllumChannel": "selfIllum"}, - {"shadowChannel": "shadow"}, - {"sheenFilterChannel": "sheen_filter"}, - {"sheenGlossinessChannel": "sheenGloss"}, - {"sheenReflectionChannel": "sheen_reflection"}, - {"vraySheenChannel": "sheen_specular"}, - {"specularChannel": "specular"}, - {"Toon": "Toon"}, - {"toonLightingChannel": "toonLighting"}, - {"toonSpecularChannel": "toonSpecular"}, - {"totalLightChannel": "totalLight"}, - {"unclampedColorChannel": "unclampedColor"}, - {"VRScansPaintMaskChannel": "VRScansPaintMask"}, - {"VRScansZoneMaskChannel": "VRScansZoneMask"}, - {"velocityChannel": "velocity"}, - {"zdepthChannel": "zDepth"}, - {"LightSelectElement": "lightselect"} - ] - }, - { - "type": "label", - "label": "Add additional options - put attribute and value, like aaFilterSize" - }, - { - "type": "dict-modifiable", - "key": "additional_options", - "label": "Additional Renderer Options", - "use_label_wrap": true, - "object_type": { - "type": "text" - } - } - ] - }, - { - "type": "dict", - "collapsible": true, - "key": "redshift_renderer", - "label": "Redshift Renderer", - "is_group": true, - "children": [ - { - "key": "image_prefix", - "label": "Image prefix template", - "type": "text" - }, - { - "key": "primary_gi_engine", - "label": "Primary GI Engine", - "type": "enum", - "multiselection": false, - "defaults": "0", - "enum_items": [ - {"0": "None"}, - {"1": "Photon Map"}, - {"2": "Irradiance Cache"}, - {"3": "Brute Force"} - ] - }, - { - "key": "secondary_gi_engine", - "label": "Secondary GI Engine", - "type": "enum", - "multiselection": false, - "defaults": "0", - "enum_items": [ - {"0": "None"}, - {"1": "Photon Map"}, - {"2": "Irradiance Cache"}, - {"3": "Brute Force"} - ] - }, - { - "key": "image_format", - "label": "Output Image Format", - "type": "enum", - "multiselection": false, - "defaults": "exr", - "enum_items": [ - {"iff": "Maya IFF"}, - {"exr": "OpenEXR"}, - {"tif": "TIFF"}, - {"png": "PNG"}, - {"tga": "Targa"}, - {"jpg": "JPEG"} - ] - }, - { - "key": "multilayer_exr", - "label": "Multilayer (exr)", - "type": "boolean" - }, - { - "key": "force_combine", - "label": "Force combine beauty and AOVs", - "type": "boolean" - }, - { - "key": "aov_list", - "label": "AOVs to create", - "type": "enum", - "multiselection": true, - "defaults": "empty", - "enum_items": [ - {"empty": "< none >"}, - {"AO": "Ambient Occlusion"}, - {"Background": "Background"}, - {"Beauty": "Beauty"}, - {"BumpNormals": "Bump Normals"}, - {"Caustics": "Caustics"}, - {"CausticsRaw": "Caustics Raw"}, - {"Cryptomatte": "Cryptomatte"}, - {"Custom": "Custom"}, - {"Z": "Depth"}, - {"DiffuseFilter": "Diffuse Filter"}, - {"DiffuseLighting": "Diffuse Lighting"}, - {"DiffuseLightingRaw": "Diffuse Lighting Raw"}, - {"Emission": "Emission"}, - {"GI": "Global Illumination"}, - {"GIRaw": "Global Illumination Raw"}, - {"Matte": "Matte"}, - {"MotionVectors": "Ambient Occlusion"}, - {"N": "Normals"}, - {"ID": "ObjectID"}, - {"ObjectBumpNormal": "Object-Space Bump Normals"}, - {"ObjectPosition": "Object-Space Positions"}, - {"PuzzleMatte": "Puzzle Matte"}, - {"Reflections": "Reflections"}, - {"ReflectionsFilter": "Reflections Filter"}, - {"ReflectionsRaw": "Reflections Raw"}, - {"Refractions": "Refractions"}, - {"RefractionsFilter": "Refractions Filter"}, - {"RefractionsRaw": "Refractions Filter"}, - {"Shadows": "Shadows"}, - {"SpecularLighting": "Specular Lighting"}, - {"SSS": "Sub Surface Scatter"}, - {"SSSRaw": "Sub Surface Scatter Raw"}, - {"TotalDiffuseLightingRaw": "Total Diffuse Lighting Raw"}, - {"TotalTransLightingRaw": "Total Translucency Filter"}, - {"TransTint": "Translucency Filter"}, - {"TransGIRaw": "Translucency Lighting Raw"}, - {"VolumeFogEmission": "Volume Fog Emission"}, - {"VolumeFogTint": "Volume Fog Tint"}, - {"VolumeLighting": "Volume Lighting"}, - {"P": "World Position"} - ] - }, - { - "type": "label", - "label": "Add additional options - put attribute and value, like reflectionMaxTraceDepth" - }, - { - "type": "dict-modifiable", - "key": "additional_options", - "label": "Additional Renderer Options", - "use_label_wrap": true, - "object_type": { - "type": "text" - } - } - ] } ] } \ No newline at end of file From 365a6b3990a2c1480eac139cee340ff0580ff58f Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 25 Apr 2022 09:32:12 +0300 Subject: [PATCH 048/123] add menu item to OpenPype menu --- openpype/hosts/maya/api/menu.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/openpype/hosts/maya/api/menu.py b/openpype/hosts/maya/api/menu.py index 5f0fc39bf3..133877a63e 100644 --- a/openpype/hosts/maya/api/menu.py +++ b/openpype/hosts/maya/api/menu.py @@ -11,7 +11,7 @@ import avalon.api from openpype.api import BuildWorkfile from openpype.settings import get_project_settings from openpype.tools.utils import host_tools -from openpype.hosts.maya.api import lib +from openpype.hosts.maya.api import lib, lib_rendersettings from .lib import get_main_window, IS_HEADLESS from .commands import reset_frame_range @@ -99,6 +99,15 @@ def install(): cmds.menuItem(divider=True) + cmds.menuItem( + "Set Render Settings", + command=lambda *args: lib_rendersettings.set_default_renderer_settings( # noqa + parent=parent_widget + ) + ) + + cmds.menuItem(divider=True) + cmds.menuItem( "Work Files...", command=lambda *args: host_tools.show_workfiles( From a33a9057cd11706391da12dc38f031741459a811 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 25 Apr 2022 09:42:13 +0300 Subject: [PATCH 049/123] modify project settings schema defaults for maya --- .../defaults/project_settings/maya.json | 65 +++++++++---------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/openpype/settings/defaults/project_settings/maya.json b/openpype/settings/defaults/project_settings/maya.json index c0b85eb0eb..7dcefeff3f 100644 --- a/openpype/settings/defaults/project_settings/maya.json +++ b/openpype/settings/defaults/project_settings/maya.json @@ -30,6 +30,36 @@ } ] }, + "RenderSettings": { + "apply_render_settings": true, + "default_render_image_folder": "", + "aov_separator": "underscore", + "arnold_renderer": { + "image_prefix": "", + "image_format": "exr", + "multilayer_exr": true, + "tiled": true, + "aov_list": [], + "additional_options": {} + }, + "vray_renderer": { + "image_prefix": "", + "engine": "1", + "image_format": "png", + "aov_list": [], + "additional_options": {} + }, + "redshift_renderer": { + "image_prefix": "", + "primary_gi_engine": "0", + "secondary_gi_engine": "0", + "image_format": "iff", + "multilayer_exr": true, + "force_combine": true, + "aov_list": [], + "additional_options": {} + } + }, "create": { "CreateLook": { "enabled": true, @@ -42,40 +72,7 @@ "enabled": true, "defaults": [ "Main" - ], - "default_render_image_folder": "renders", - "aov_separator": "underscore", - "arnold_renderer": { - "image_prefix": "maya///{aov_separator}", - "image_format": "exr", - "multilayer_exr": false, - "tiled": true, - "aov_list": [ - "empty" - ], - "additional_options": {} - }, - "vray_renderer": { - "image_prefix": "maya///", - "engine": "1", - "image_format": "exr", - "aov_list": [ - "empty" - ], - "additional_options": {} - }, - "redshift_renderer": { - "image_prefix": "'maya///{aov_separator}", - "primary_gi_engine": "0", - "secondary_gi_engine": "0", - "image_format": "exr", - "multilayer_exr": false, - "force_combine": false, - "aov_list": [ - "empty" - ], - "additional_options": {} - } + ] }, "CreateUnrealStaticMesh": { "enabled": true, From 18693cf96f3830a7376109f3015eb47894bb764c Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 25 Apr 2022 12:00:26 +0300 Subject: [PATCH 050/123] fix function argument, add renderer --- openpype/hosts/maya/api/menu.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/openpype/hosts/maya/api/menu.py b/openpype/hosts/maya/api/menu.py index 133877a63e..4b79357f0b 100644 --- a/openpype/hosts/maya/api/menu.py +++ b/openpype/hosts/maya/api/menu.py @@ -45,6 +45,7 @@ def install(): parent="MayaWindow" ) + renderer = cmds.getAttr('defaultRenderGlobals.currentRenderer').lower() # Create context menu context_label = "{}, {}".format( avalon.api.Session["AVALON_ASSET"], @@ -101,9 +102,7 @@ def install(): cmds.menuItem( "Set Render Settings", - command=lambda *args: lib_rendersettings.set_default_renderer_settings( # noqa - parent=parent_widget - ) + command=lambda *args: lib_rendersettings.RenderSettings.set_default_renderer_settings(renderer) # noqa ) cmds.menuItem(divider=True) From d3d27576ec01a261f01eb5e2abd05ca6925dff33 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 25 Apr 2022 12:13:59 +0300 Subject: [PATCH 051/123] Fix Arnold function missing arguments. --- openpype/hosts/maya/api/lib_rendersettings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 5e0d40e6f9..cdd65de209 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -8,7 +8,7 @@ from avalon.api import Session from openpype.pipeline import CreatorError -class RenderSettings(object): +class RenderSettzings(object): _image_prefix_nodes = { 'mentalray': 'defaultRenderGlobals.imageFilePrefix', @@ -84,7 +84,7 @@ class RenderSettings(object): if renderer == "arnold": # set renderer settings for Arnold from project settings - self._set_Arnold_settings() + self._set_Arnold_settings(width, height) if renderer == "vray": self._set_vray_settings(aov_separator, width, height) From 09a941acd0cbfa5270d7c8f0b3f3680ae6acc72d Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 25 Apr 2022 12:18:19 +0300 Subject: [PATCH 052/123] Fix Redshift function missing arguments. --- openpype/hosts/maya/api/lib_rendersettings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index cdd65de209..4362511fc4 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -90,7 +90,7 @@ class RenderSettzings(object): self._set_vray_settings(aov_separator, width, height) if renderer == "redshift": - self._set_redshift_settings() + self._set_redshift_settings(width, height) def _set_Arnold_settings(self, width, height): """Sets settings for Arnold.""" From 6299b01ae6532272a0f18e743aa358fe995c1c12 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 25 Apr 2022 12:23:13 +0300 Subject: [PATCH 053/123] Fix accidental typo. --- openpype/hosts/maya/api/lib_rendersettings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 4362511fc4..33b138fa08 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -8,7 +8,7 @@ from avalon.api import Session from openpype.pipeline import CreatorError -class RenderSettzings(object): +class RenderSettings(object): _image_prefix_nodes = { 'mentalray': 'defaultRenderGlobals.imageFilePrefix', From 1e251ac064a74f3e0b4b8b3fddaf5a42213c6f88 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 25 Apr 2022 12:25:02 +0300 Subject: [PATCH 054/123] Remove trailing space. --- openpype/hosts/maya/api/menu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/api/menu.py b/openpype/hosts/maya/api/menu.py index 4b79357f0b..c1aea4da78 100644 --- a/openpype/hosts/maya/api/menu.py +++ b/openpype/hosts/maya/api/menu.py @@ -45,7 +45,7 @@ def install(): parent="MayaWindow" ) - renderer = cmds.getAttr('defaultRenderGlobals.currentRenderer').lower() + renderer = cmds.getAttr('defaultRenderGlobals.currentRenderer').lower() # Create context menu context_label = "{}, {}".format( avalon.api.Session["AVALON_ASSET"], From 7a63e52a3fa520aa67c6fb9c21a11671fcea4317 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Tue, 26 Apr 2022 00:12:29 +0300 Subject: [PATCH 055/123] Append Arnold render settings from project settings. --- openpype/hosts/maya/api/lib_rendersettings.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 33b138fa08..26e2455d86 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -81,10 +81,10 @@ class RenderSettings(object): asset = get_asset() width = asset["data"].get("resolutionWidth") height = asset["data"].get("resolutionHeight") - + arnold_render_presets = self._project_settings["maya"]["RenderSettings"]["arnold_renderer"] if renderer == "arnold": # set renderer settings for Arnold from project settings - self._set_Arnold_settings(width, height) + self._set_Arnold_settings(arnold_render_presets, width, height) if renderer == "vray": self._set_vray_settings(aov_separator, width, height) @@ -92,13 +92,12 @@ class RenderSettings(object): if renderer == "redshift": self._set_redshift_settings(width, height) - def _set_Arnold_settings(self, width, height): + def _set_Arnold_settings(self, settings, width, height): """Sets settings for Arnold.""" - img_ext = self.arnold_renderer.get("image_format") + img_ext = settings["image_format"] self._set_global_output_settings() - cmds.setAttr("defaultArnoldDriver.ai_translator", - img_ext, type="string") + cmds.setAttr("defaultArnoldDriver.ai_translator", img_ext, type="string") cmds.setAttr("defaultResolution.width", width) cmds.setAttr("defaultResolution.height", height) From 14a34836b710052ebc41744ec963ba8d062a03f3 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Tue, 26 Apr 2022 02:26:38 +0300 Subject: [PATCH 056/123] Add Maya window function call to initalize render objects. --- openpype/hosts/maya/api/lib_rendersettings.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 26e2455d86..1dcea16640 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -1,4 +1,4 @@ -from maya import cmds +from maya import cmds, mel from openpype.api import ( get_project_settings, @@ -94,12 +94,16 @@ class RenderSettings(object): def _set_Arnold_settings(self, settings, width, height): """Sets settings for Arnold.""" + mel.eval('unifiedRenderGlobalsWindow;') + if cmds.window("unifiedRenderGlobalsWindow", exists=True): + cmds.deleteUI("unifiedRenderGlobalsWindow") + + cmds.setAttr("defaultResolution.width", width) + cmds.setAttr("defaultResolution.height", height) img_ext = settings["image_format"] self._set_global_output_settings() cmds.setAttr("defaultArnoldDriver.ai_translator", img_ext, type="string") - cmds.setAttr("defaultResolution.width", width) - cmds.setAttr("defaultResolution.height", height) def _set_redshift_settings(self, width, height): """Sets settings for Redshift.""" From 79d770054125c6d585cdd70cf9eb03d5f5b08f39 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Tue, 26 Apr 2022 13:30:12 +0300 Subject: [PATCH 057/123] fix asset var name, add relevant comments --- openpype/hosts/maya/api/lib_rendersettings.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 1dcea16640..70ec1ebb47 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -78,10 +78,12 @@ class RenderSettings(object): prefix, type="string") - asset = get_asset() - width = asset["data"].get("resolutionWidth") - height = asset["data"].get("resolutionHeight") + asset_doc = get_asset() + # TODO: handle not having res values in the doc + width = asset_doc["data"].get("resolutionWidth") + height = asset_doc["data"].get("resolutionHeight")# TODO: don't camelcase arnold_render_presets = self._project_settings["maya"]["RenderSettings"]["arnold_renderer"] + if renderer == "arnold": # set renderer settings for Arnold from project settings self._set_Arnold_settings(arnold_render_presets, width, height) From fb424f672609b91cec693e2c13bdf224b9c4a998 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Tue, 26 Apr 2022 15:12:15 +0300 Subject: [PATCH 058/123] replace render settings workaround with function call --- openpype/hosts/maya/api/lib_rendersettings.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 70ec1ebb47..13317cf85e 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -1,4 +1,5 @@ -from maya import cmds, mel +from maya import cmds +from mtoa.core import createOptions from openpype.api import ( get_project_settings, @@ -96,11 +97,7 @@ class RenderSettings(object): def _set_Arnold_settings(self, settings, width, height): """Sets settings for Arnold.""" - mel.eval('unifiedRenderGlobalsWindow;') - - if cmds.window("unifiedRenderGlobalsWindow", exists=True): - cmds.deleteUI("unifiedRenderGlobalsWindow") - + createOptions() cmds.setAttr("defaultResolution.width", width) cmds.setAttr("defaultResolution.height", height) img_ext = settings["image_format"] From 6645be26ef175de388b36096127e6696e1028947 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 2 May 2022 13:34:49 +0300 Subject: [PATCH 059/123] minor style/import fixes --- openpype/hosts/maya/api/lib_renderproducts.py | 1 + openpype/hosts/maya/plugins/create/create_render.py | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/openpype/hosts/maya/api/lib_renderproducts.py b/openpype/hosts/maya/api/lib_renderproducts.py index f62432b2e9..1f38ef8904 100644 --- a/openpype/hosts/maya/api/lib_renderproducts.py +++ b/openpype/hosts/maya/api/lib_renderproducts.py @@ -81,6 +81,7 @@ IMAGE_PREFIXES = { RENDERMAN_IMAGE_DIR = "maya//" + def has_tokens(string, tokens): """Return whether any of tokens is in input string (case-insensitive)""" pattern = "({})".format("|".join(re.escape(token) for token in tokens)) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index 4e36f922d9..6b65911cf3 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -2,11 +2,9 @@ """Create ``Render`` instance in Maya.""" import json import os -import sys import appdirs import requests -import six from maya import cmds from maya.app.renderSetup.model import renderSetup @@ -21,7 +19,6 @@ from openpype.hosts.maya.api import ( lib_rendersettings, plugin ) -from openpype.modules import ModulesManager class CreateRender(plugin.Creator): From 2cdea369dc1849243fc926301ec4780a42774fee Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 2 May 2022 13:35:40 +0300 Subject: [PATCH 060/123] Remove avalon import. --- openpype/hosts/maya/plugins/create/create_render.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index 6b65911cf3..2bbaf1006d 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -9,7 +9,6 @@ import requests from maya import cmds from maya.app.renderSetup.model import renderSetup -from avalon.api import Session from openpype.api import ( get_system_settings, get_project_settings, From e0b0e30734b8c036fbec4f65c8c2b678be59d053 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 2 May 2022 13:54:09 +0300 Subject: [PATCH 061/123] replace avalon dependency with legacy_io --- openpype/hosts/maya/api/lib_rendersettings.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 13317cf85e..4e1c4f7bd2 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -5,7 +5,7 @@ from openpype.api import ( get_project_settings, get_asset) -from avalon.api import Session +from openpype.pipeline import legacy_io from openpype.pipeline import CreatorError @@ -50,7 +50,7 @@ class RenderSettings(object): renderer = 'renderman' if project_settings is None: - project_settings = get_project_settings(Session["AVALON_PROJECT"]) + project_settings = get_project_settings(legacy_io.Session["AVALON_PROJECT"]) render_settings = RenderSettings(project_settings) render_settings.set_default_renderer_settings(renderer) @@ -97,6 +97,7 @@ class RenderSettings(object): def _set_Arnold_settings(self, settings, width, height): """Sets settings for Arnold.""" + createOptions() cmds.setAttr("defaultResolution.width", width) cmds.setAttr("defaultResolution.height", height) From 302e493f617a9d027243a8ca661f99b482bbbb55 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 2 May 2022 13:54:39 +0300 Subject: [PATCH 062/123] Change import position. --- openpype/hosts/maya/api/lib_rendersettings.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 4e1c4f7bd2..5afcd94758 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -1,5 +1,4 @@ from maya import cmds -from mtoa.core import createOptions from openpype.api import ( get_project_settings, @@ -97,7 +96,7 @@ class RenderSettings(object): def _set_Arnold_settings(self, settings, width, height): """Sets settings for Arnold.""" - + from mtoa.core import createOptions createOptions() cmds.setAttr("defaultResolution.width", width) cmds.setAttr("defaultResolution.height", height) From 103cd8c18093bd4af8e2be23795107b6e87c910a Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 6 May 2022 12:40:18 +0300 Subject: [PATCH 063/123] Move settings getter function --- openpype/hosts/maya/api/lib_rendersettings.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 5afcd94758..7b2145b7ac 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -81,8 +81,7 @@ class RenderSettings(object): asset_doc = get_asset() # TODO: handle not having res values in the doc width = asset_doc["data"].get("resolutionWidth") - height = asset_doc["data"].get("resolutionHeight")# TODO: don't camelcase - arnold_render_presets = self._project_settings["maya"]["RenderSettings"]["arnold_renderer"] + height = asset_doc["data"].get("resolutionHeight") if renderer == "arnold": # set renderer settings for Arnold from project settings @@ -94,13 +93,16 @@ class RenderSettings(object): if renderer == "redshift": self._set_redshift_settings(width, height) - def _set_Arnold_settings(self, settings, width, height): + def _set_Arnold_settings(self, width, height): """Sets settings for Arnold.""" from mtoa.core import createOptions createOptions() + arnold_render_presets = self._project_settings["maya"]["RenderSettings"]["arnold_renderer"] # noqa + img_ext = arnold_render_presets["image_format"] + cmds.setAttr("defaultResolution.width", width) cmds.setAttr("defaultResolution.height", height) - img_ext = settings["image_format"] + self._set_global_output_settings() cmds.setAttr("defaultArnoldDriver.ai_translator", img_ext, type="string") From 2bb96a90a49114080dc1e4bb7ad978c4b5ecaa05 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 6 May 2022 13:55:53 +0300 Subject: [PATCH 064/123] Append aov handling --- openpype/hosts/maya/api/lib_rendersettings.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 7b2145b7ac..582bdc224a 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -96,9 +96,14 @@ class RenderSettings(object): def _set_Arnold_settings(self, width, height): """Sets settings for Arnold.""" from mtoa.core import createOptions + from mtoa.aovs import AOVInterface createOptions() arnold_render_presets = self._project_settings["maya"]["RenderSettings"]["arnold_renderer"] # noqa img_ext = arnold_render_presets["image_format"] + aovs = arnold_render_presets["aov_list"] + + for aov in aovs: + AOVInterface('defaultArnoldRenderOptions'.addAOV(aov)) cmds.setAttr("defaultResolution.width", width) cmds.setAttr("defaultResolution.height", height) From f6d442330de7585fb1ce76389249fb6c43b6d5c4 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 9 May 2022 12:48:25 +0300 Subject: [PATCH 065/123] Get renderer from within settings function --- openpype/hosts/maya/api/lib_rendersettings.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 582bdc224a..64e3d07a44 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -54,13 +54,15 @@ class RenderSettings(object): render_settings = RenderSettings(project_settings) render_settings.set_default_renderer_settings(renderer) - def set_default_renderer_settings(self, renderer): + @staticmethod + def set_default_renderer_settings(self): """Set basic settings based on renderer. Args: renderer (str): Renderer name. """ + renderer = cmds.getAttr('defaultRenderGlobals.currentRenderer').lower() # project_settings/maya/create/CreateRender/aov_separator try: aov_separator = self._aov_chars[( From ad6f562f80f1c916eae3226bae282e4c55eedacf Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 9 May 2022 13:30:40 +0300 Subject: [PATCH 066/123] Remove unused parameter --- openpype/hosts/maya/api/lib_rendersettings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 64e3d07a44..13be2a1e26 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -87,7 +87,7 @@ class RenderSettings(object): if renderer == "arnold": # set renderer settings for Arnold from project settings - self._set_Arnold_settings(arnold_render_presets, width, height) + self._set_Arnold_settings(width, height) if renderer == "vray": self._set_vray_settings(aov_separator, width, height) From e4324a11f7f11a5b76c48388b53b25c3d63d0efe Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 9 May 2022 13:34:11 +0300 Subject: [PATCH 067/123] Move get_asset() --- openpype/hosts/maya/api/lib_rendersettings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 13be2a1e26..73f03975bb 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -63,6 +63,7 @@ class RenderSettings(object): """ renderer = cmds.getAttr('defaultRenderGlobals.currentRenderer').lower() + asset_doc = get_asset() # project_settings/maya/create/CreateRender/aov_separator try: aov_separator = self._aov_chars[( @@ -80,7 +81,7 @@ class RenderSettings(object): prefix, type="string") - asset_doc = get_asset() + # TODO: handle not having res values in the doc width = asset_doc["data"].get("resolutionWidth") height = asset_doc["data"].get("resolutionHeight") From bf1daa4e906ef36afcbaf20b21578106b7e24f41 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 9 May 2022 13:34:28 +0300 Subject: [PATCH 068/123] style fix --- openpype/hosts/maya/api/lib_rendersettings.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 73f03975bb..3ac663e38d 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -81,7 +81,6 @@ class RenderSettings(object): prefix, type="string") - # TODO: handle not having res values in the doc width = asset_doc["data"].get("resolutionWidth") height = asset_doc["data"].get("resolutionHeight") From bb67065d39a092383ce1a277cb68f23d2302c225 Mon Sep 17 00:00:00 2001 From: Ondrej Samohel Date: Tue, 10 May 2022 12:14:15 +0200 Subject: [PATCH 069/123] few style changes --- openpype/hosts/maya/api/lib_rendersettings.py | 61 +++++++++++-------- openpype/hosts/maya/api/menu.py | 2 +- 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 3ac663e38d..03c70ee3d6 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -1,4 +1,8 @@ -from maya import cmds +# -*- coding: utf-8 -*- +"""Class for handling Render Settings.""" +from maya import cmds # noqa +import six +import sys from openpype.api import ( get_project_settings, @@ -36,8 +40,12 @@ class RenderSettings(object): def get_image_prefix_attr(cls, renderer): return cls._image_prefix_nodes[renderer] - def __init__(self, project_settings): + def __init__(self, project_settings=None): self._project_settings = project_settings + if not self._project_settings: + self._project_settings = get_project_settings( + legacy_io.Session["AVALON_PROJECT"] + ) @staticmethod def apply_defaults(renderer=None, project_settings=None): @@ -48,21 +56,15 @@ class RenderSettings(object): if renderer.startswith('renderman'): renderer = 'renderman' - if project_settings is None: - project_settings = get_project_settings(legacy_io.Session["AVALON_PROJECT"]) - render_settings = RenderSettings(project_settings) render_settings.set_default_renderer_settings(renderer) - @staticmethod - def set_default_renderer_settings(self): - """Set basic settings based on renderer. + def set_default_renderer_settings(self, renderer=None): + """Set basic settings based on renderer.""" + if not renderer: + renderer = cmds.getAttr( + 'defaultRenderGlobals.currentRenderer').lower() - Args: - renderer (str): Renderer name. - - """ - renderer = cmds.getAttr('defaultRenderGlobals.currentRenderer').lower() asset_doc = get_asset() # project_settings/maya/create/CreateRender/aov_separator try: @@ -87,7 +89,7 @@ class RenderSettings(object): if renderer == "arnold": # set renderer settings for Arnold from project settings - self._set_Arnold_settings(width, height) + self._set_arnold_settings(width, height) if renderer == "vray": self._set_vray_settings(aov_separator, width, height) @@ -95,28 +97,34 @@ class RenderSettings(object): if renderer == "redshift": self._set_redshift_settings(width, height) - def _set_Arnold_settings(self, width, height): + def _set_arnold_settings(self, width, height): """Sets settings for Arnold.""" - from mtoa.core import createOptions - from mtoa.aovs import AOVInterface + from mtoa.core import createOptions # noqa + from mtoa.aovs import AOVInterface # noqa createOptions() arnold_render_presets = self._project_settings["maya"]["RenderSettings"]["arnold_renderer"] # noqa img_ext = arnold_render_presets["image_format"] aovs = arnold_render_presets["aov_list"] for aov in aovs: - AOVInterface('defaultArnoldRenderOptions'.addAOV(aov)) + AOVInterface('defaultArnoldRenderOptions').addAOV(aov) cmds.setAttr("defaultResolution.width", width) cmds.setAttr("defaultResolution.height", height) self._set_global_output_settings() - cmds.setAttr("defaultArnoldDriver.ai_translator", img_ext, type="string") + cmds.setAttr( + "defaultArnoldDriver.ai_translator", img_ext, type="string") def _set_redshift_settings(self, width, height): """Sets settings for Redshift.""" - - img_ext = self.redshift_renderer.get("image_format") + redshift_render_presets = ( + self._project_settings + ["maya"] + ["RenderSettings"] + ["redshift_renderer"] + ) + img_ext = redshift_render_presets.get("image_format") self._set_global_output_settings() cmds.setAttr("redshiftOptions.imageFormat", img_ext) cmds.setAttr("defaultResolution.width", width) @@ -138,10 +146,13 @@ class RenderSettings(object): separators = [cmds.menuItem(i, query=True, label=True) for i in items] # noqa: E501 try: sep_idx = separators.index(aov_separator) - except ValueError: - raise CreatorError( - "AOV character {} not in {}".format( - aov_separator, separators)) + except ValueError as e: + six.reraise( + CreatorError, + CreatorError( + "AOV character {} not in {}".format( + aov_separator, separators)), + sys.exc_info()[2]) cmds.optionMenuGrp(MENU, edit=True, select=sep_idx + 1) diff --git a/openpype/hosts/maya/api/menu.py b/openpype/hosts/maya/api/menu.py index 3c43c192e3..c3ce8b0227 100644 --- a/openpype/hosts/maya/api/menu.py +++ b/openpype/hosts/maya/api/menu.py @@ -101,7 +101,7 @@ def install(): cmds.menuItem( "Set Render Settings", - command=lambda *args: lib_rendersettings.RenderSettings.set_default_renderer_settings(renderer) # noqa + command=lambda *args: lib_rendersettings.RenderSettings().set_default_renderer_settings() # noqa ) cmds.menuItem(divider=True) From ae0708b639a1981fbefc5331a2b24af50079470a Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Wed, 11 May 2022 12:28:45 +0300 Subject: [PATCH 070/123] Force resetting render settings --- openpype/hosts/maya/api/lib_rendersettings.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 03c70ee3d6..3946750add 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- """Class for handling Render Settings.""" from maya import cmds # noqa +import maya.mel as mel import six import sys @@ -103,9 +104,17 @@ class RenderSettings(object): from mtoa.aovs import AOVInterface # noqa createOptions() arnold_render_presets = self._project_settings["maya"]["RenderSettings"]["arnold_renderer"] # noqa + # Force resetting settings and AOV list to avoid having to deal with + # AOV checking logic, for now. + # This is a work around because the standard + # function to revert render settings does not reset AOVs list in MtoA + # Fetch current aovs in case there's any. + current_aovs = AOVInterface().getAOVs() + # Remove fetched AOVs + AOVInterface().removeAOVs(current_aovs) + mel.eval("unifiedRenderGlobalsRevertToDefault") img_ext = arnold_render_presets["image_format"] aovs = arnold_render_presets["aov_list"] - for aov in aovs: AOVInterface('defaultArnoldRenderOptions').addAOV(aov) From 6809d372b8b619a676beecce153f3cd14c273279 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Thu, 12 May 2022 00:15:18 +0300 Subject: [PATCH 071/123] Propagate further attributes. --- openpype/hosts/maya/api/lib_rendersettings.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 3946750add..18e5e132d0 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -114,7 +114,10 @@ class RenderSettings(object): AOVInterface().removeAOVs(current_aovs) mel.eval("unifiedRenderGlobalsRevertToDefault") img_ext = arnold_render_presets["image_format"] + img_prefix = arnold_render_presets["image_prefix"] aovs = arnold_render_presets["aov_list"] + img_tiled = arnold_render_presets["tiled"] + multi_exr = arnold_render_presets["multilayer_exr"] for aov in aovs: AOVInterface('defaultArnoldRenderOptions').addAOV(aov) @@ -122,9 +125,22 @@ class RenderSettings(object): cmds.setAttr("defaultResolution.height", height) self._set_global_output_settings() + + cmds.setAttr( + "defaultRenderGlobals.imageFilePrefix", img_prefix, type="string") + cmds.setAttr( "defaultArnoldDriver.ai_translator", img_ext, type="string") + cmds.setAttr( + "defaultArnoldDriver.exrTiled", img_tiled, type="boolean") + + cmds.setAttr( + "defaultArnoldDriver.mergeAOVs", multi_exr, type="boolean") + + for attr in additional_options.items(): + cmds.setAttr(attr, additional_options.get(attr, None)) + def _set_redshift_settings(self, width, height): """Sets settings for Redshift.""" redshift_render_presets = ( From b1d49692e0f4e3e00c71ed23d818885042d4d0b2 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Thu, 12 May 2022 00:39:23 +0300 Subject: [PATCH 072/123] Add variable for additional attributes --- openpype/hosts/maya/api/lib_rendersettings.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 18e5e132d0..3d229060be 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -118,6 +118,7 @@ class RenderSettings(object): aovs = arnold_render_presets["aov_list"] img_tiled = arnold_render_presets["tiled"] multi_exr = arnold_render_presets["multilayer_exr"] + additional_options = arnold_render_presets["additional_options"] for aov in aovs: AOVInterface('defaultArnoldRenderOptions').addAOV(aov) @@ -133,10 +134,10 @@ class RenderSettings(object): "defaultArnoldDriver.ai_translator", img_ext, type="string") cmds.setAttr( - "defaultArnoldDriver.exrTiled", img_tiled, type="boolean") + "defaultArnoldDriver.exrTiled", img_tiled) cmds.setAttr( - "defaultArnoldDriver.mergeAOVs", multi_exr, type="boolean") + "defaultArnoldDriver.mergeAOVs", multi_exr) for attr in additional_options.items(): cmds.setAttr(attr, additional_options.get(attr, None)) From e9426df72d37f65e053d6959ce91d2411e86e8a5 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Thu, 12 May 2022 11:16:07 +0300 Subject: [PATCH 073/123] Fix dictionary bug. --- openpype/hosts/maya/api/lib_rendersettings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 3d229060be..49d7d9fc72 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -139,7 +139,7 @@ class RenderSettings(object): cmds.setAttr( "defaultArnoldDriver.mergeAOVs", multi_exr) - for attr in additional_options.items(): + for attr in additional_options.keys(): cmds.setAttr(attr, additional_options.get(attr, None)) def _set_redshift_settings(self, width, height): From 4260f8a49ce3d63a0fc18741c6319f65e49122be Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Thu, 12 May 2022 11:29:36 +0300 Subject: [PATCH 074/123] Attr as list to workaround ftrack limitation --- openpype/hosts/maya/api/lib_rendersettings.py | 9 ++++++--- .../schemas/schema_maya_render_settings.json | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 49d7d9fc72..c6afbfa19c 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -138,9 +138,12 @@ class RenderSettings(object): cmds.setAttr( "defaultArnoldDriver.mergeAOVs", multi_exr) - - for attr in additional_options.keys(): - cmds.setAttr(attr, additional_options.get(attr, None)) + # Passes additional options in from the schema as a list + # but converts it to a dictionary because ftrack doesn't + # allow fullstops in custom attributes. + additional_options_dict = dict(additional_options) + for attr in additional_options_dict.keys(): + cmds.setAttr(attr, additional_options_dict.get(attr, None)) def _set_redshift_settings(self, width, height): """Sets settings for Redshift.""" diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json index 8a5730fbef..96b67dc66a 100644 --- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json @@ -134,6 +134,7 @@ }, { "type": "dict-modifiable", + "store_as_list": true, "key": "additional_options", "label": "Additional Renderer Options", "use_label_wrap": true, From 12a1e9e520641e1e3e700d77576c5d0d036f5879 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 13 May 2022 10:53:11 +0300 Subject: [PATCH 075/123] Handle additional attributes for MtoA --- openpype/hosts/maya/api/lib_rendersettings.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index c6afbfa19c..38f493a4a8 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -140,10 +140,17 @@ class RenderSettings(object): "defaultArnoldDriver.mergeAOVs", multi_exr) # Passes additional options in from the schema as a list # but converts it to a dictionary because ftrack doesn't - # allow fullstops in custom attributes. - additional_options_dict = dict(additional_options) - for attr in additional_options_dict.keys(): - cmds.setAttr(attr, additional_options_dict.get(attr, None)) + # allow fullstops in custom attributes. Then checks for + # type of MtoA attribute passed to adjust the `setAttr` + # command accordingly. + for item in additional_options: + attribute, value = item + if (cmds.setAttr(str(attribute), type=True)) == "long": + cmds.setAttr(str(attribute), int(value)) + elif (cmds.setAttr(str(attribute), type=True)) == "bool": + cmds.setAttr(str(attribute), int(value), type = "Boolean") # noqa + elif (cmds.setAttr(str(attribute), type=True)) == "string": + cmds.setAttr(str(attribute), str(value), type = "string") # noqa def _set_redshift_settings(self, width, height): """Sets settings for Redshift.""" From dc95b5ac0e06de4e8916ad5cd5e63ca30901e6c5 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 13 May 2022 12:20:27 +0300 Subject: [PATCH 076/123] Import missing library --- openpype/hosts/maya/plugins/create/create_render.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index 2bbaf1006d..334400bb23 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -19,6 +19,8 @@ from openpype.hosts.maya.api import ( plugin ) +from openpype.pipeline import legacy_io + class CreateRender(plugin.Creator): """Create *render* instance. From 201aa692bf9ac53d065522c51b1d780f3eec175d Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 13 May 2022 14:00:36 +0300 Subject: [PATCH 077/123] Fix missing deadline import/logic --- openpype/hosts/maya/plugins/create/create_render.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index 334400bb23..e858534912 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -18,7 +18,7 @@ from openpype.hosts.maya.api import ( lib_rendersettings, plugin ) - +from openpype.modules import ModulesManager from openpype.pipeline import legacy_io @@ -79,6 +79,8 @@ class CreateRender(plugin.Creator): self._project_settings = get_project_settings( legacy_io.Session["AVALON_PROJECT"]) + manager = ModulesManager() + self.deadline_module = manager.modules_by_name["deadline"] try: default_servers = deadline_settings["deadline_urls"] project_servers = ( @@ -234,7 +236,8 @@ class CreateRender(plugin.Creator): deadline_url = next(iter(self.deadline_servers.values())) # Uses function to get pool machines from the assigned deadline # url in settings - pool_names = self._get_deadline_pools(deadline_url) + pool_names = self.deadline_module.get_deadline_pools(deadline_url, + self.log) maya_submit_dl = self._project_settings.get( "deadline", {}).get( "publish", {}).get( From a06bfc1648d242c6c8167b28deb969174380b987 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 13 May 2022 14:02:26 +0300 Subject: [PATCH 078/123] Style fix --- openpype/hosts/maya/plugins/create/create_render.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index e858534912..c4a8e53a0b 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -237,7 +237,7 @@ class CreateRender(plugin.Creator): # Uses function to get pool machines from the assigned deadline # url in settings pool_names = self.deadline_module.get_deadline_pools(deadline_url, - self.log) + self.log) maya_submit_dl = self._project_settings.get( "deadline", {}).get( "publish", {}).get( From 3780b37b999f3a830fd74e9ca44f5d1d4adf4c1b Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 20 Jun 2022 10:32:25 +0300 Subject: [PATCH 079/123] Remove avalon-core. --- repos/avalon-core | 1 - 1 file changed, 1 deletion(-) delete mode 160000 repos/avalon-core diff --git a/repos/avalon-core b/repos/avalon-core deleted file mode 160000 index 2fa14cea6f..0000000000 --- a/repos/avalon-core +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2fa14cea6f6a9d86eec70bbb96860cbe4c75c8eb From 2a78532eadc976274ee49b09cb568a06ed44ea60 Mon Sep 17 00:00:00 2001 From: "Allan I. A" <76656700+Allan-I@users.noreply.github.com> Date: Mon, 20 Jun 2022 10:33:59 +0300 Subject: [PATCH 080/123] Update openpype/hosts/maya/plugins/publish/validate_render_single_camera.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ondřej Samohel <33513211+antirotor@users.noreply.github.com> --- .../maya/plugins/publish/validate_render_single_camera.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/publish/validate_render_single_camera.py b/openpype/hosts/maya/plugins/publish/validate_render_single_camera.py index 3f08e0cd62..1ca2ad42af 100644 --- a/openpype/hosts/maya/plugins/publish/validate_render_single_camera.py +++ b/openpype/hosts/maya/plugins/publish/validate_render_single_camera.py @@ -39,7 +39,9 @@ class ValidateRenderSingleCamera(pyblish.api.InstancePlugin): if renderer.startswith('renderman'): renderer = 'renderman' - attr = RenderSettings.get_image_prefix_attr(renderer) + file_prefix = cmds.getAttr( + RenderSettings.get_image_prefix_attr(renderer) + ) file_prefix = cmds.getAttr(attr) if len(cameras) > 1: From 7e1015004c77d01a7c77c87e00be637c7c6d01c5 Mon Sep 17 00:00:00 2001 From: macman Date: Mon, 20 Jun 2022 11:29:19 +0300 Subject: [PATCH 081/123] Remove unnecessary var statement. --- .../hosts/maya/plugins/publish/validate_render_single_camera.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/publish/validate_render_single_camera.py b/openpype/hosts/maya/plugins/publish/validate_render_single_camera.py index 1ca2ad42af..35b87fd0ab 100644 --- a/openpype/hosts/maya/plugins/publish/validate_render_single_camera.py +++ b/openpype/hosts/maya/plugins/publish/validate_render_single_camera.py @@ -42,7 +42,7 @@ class ValidateRenderSingleCamera(pyblish.api.InstancePlugin): file_prefix = cmds.getAttr( RenderSettings.get_image_prefix_attr(renderer) ) - file_prefix = cmds.getAttr(attr) + if len(cameras) > 1: if re.search(cls.R_CAMERA_TOKEN, file_prefix): From 9c4791b169e3f867fb23857d4215bec00a5a4ec7 Mon Sep 17 00:00:00 2001 From: "Allan I. A" <76656700+Allan-I@users.noreply.github.com> Date: Mon, 27 Jun 2022 11:41:56 +0300 Subject: [PATCH 082/123] Update openpype/settings/defaults/project_settings/maya.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ondřej Samohel <33513211+antirotor@users.noreply.github.com> --- openpype/settings/defaults/project_settings/maya.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/settings/defaults/project_settings/maya.json b/openpype/settings/defaults/project_settings/maya.json index 7dcefeff3f..ceac9ed814 100644 --- a/openpype/settings/defaults/project_settings/maya.json +++ b/openpype/settings/defaults/project_settings/maya.json @@ -35,7 +35,7 @@ "default_render_image_folder": "", "aov_separator": "underscore", "arnold_renderer": { - "image_prefix": "", + "image_prefix": "maya///_", "image_format": "exr", "multilayer_exr": true, "tiled": true, From f395e659d66f551822206e6fe202e3b7cf8485ee Mon Sep 17 00:00:00 2001 From: "Allan I. A" <76656700+Allan-I@users.noreply.github.com> Date: Mon, 27 Jun 2022 11:42:06 +0300 Subject: [PATCH 083/123] Update openpype/settings/defaults/project_settings/maya.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ondřej Samohel <33513211+antirotor@users.noreply.github.com> --- openpype/settings/defaults/project_settings/maya.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/settings/defaults/project_settings/maya.json b/openpype/settings/defaults/project_settings/maya.json index ceac9ed814..b76d0444f3 100644 --- a/openpype/settings/defaults/project_settings/maya.json +++ b/openpype/settings/defaults/project_settings/maya.json @@ -43,7 +43,7 @@ "additional_options": {} }, "vray_renderer": { - "image_prefix": "", + "image_prefix": "maya///", "engine": "1", "image_format": "png", "aov_list": [], From ecdade9ff325bbe14285487c2b03cd24af7df472 Mon Sep 17 00:00:00 2001 From: "Allan I. A" <76656700+Allan-I@users.noreply.github.com> Date: Mon, 27 Jun 2022 11:42:17 +0300 Subject: [PATCH 084/123] Update openpype/settings/defaults/project_settings/maya.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ondřej Samohel <33513211+antirotor@users.noreply.github.com> --- openpype/settings/defaults/project_settings/maya.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/settings/defaults/project_settings/maya.json b/openpype/settings/defaults/project_settings/maya.json index b76d0444f3..555c7c62a0 100644 --- a/openpype/settings/defaults/project_settings/maya.json +++ b/openpype/settings/defaults/project_settings/maya.json @@ -50,7 +50,7 @@ "additional_options": {} }, "redshift_renderer": { - "image_prefix": "", + "image_prefix": "maya///", "primary_gi_engine": "0", "secondary_gi_engine": "0", "image_format": "iff", From 2657ff27f186bdcf8098f8f7878947fc36bec1f5 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Tue, 26 Jul 2022 13:32:00 +0300 Subject: [PATCH 085/123] Replace deprecated functions --- openpype/hosts/maya/api/lib_rendersettings.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 38f493a4a8..6f41a5d169 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -7,11 +7,11 @@ import sys from openpype.api import ( get_project_settings, - get_asset) + ) from openpype.pipeline import legacy_io from openpype.pipeline import CreatorError - +from openpype.pipeline.context_tools import get_current_project_asset class RenderSettings(object): @@ -66,7 +66,7 @@ class RenderSettings(object): renderer = cmds.getAttr( 'defaultRenderGlobals.currentRenderer').lower() - asset_doc = get_asset() + asset_doc = get_current_project_asset() # project_settings/maya/create/CreateRender/aov_separator try: aov_separator = self._aov_chars[( From c7bf29d17cdb1c5ceea21dc3e104427290cf71a3 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Tue, 26 Jul 2022 13:33:17 +0300 Subject: [PATCH 086/123] Style fixes --- openpype/hosts/maya/api/lib_rendersettings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 6f41a5d169..0668c242f0 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -7,12 +7,13 @@ import sys from openpype.api import ( get_project_settings, - ) +) from openpype.pipeline import legacy_io from openpype.pipeline import CreatorError from openpype.pipeline.context_tools import get_current_project_asset + class RenderSettings(object): _image_prefix_nodes = { From a39eef07f4a91fe775d8c492fc0dbbf9502f4c2f Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Tue, 26 Jul 2022 13:52:52 +0300 Subject: [PATCH 087/123] Fix frame range reset. --- openpype/hosts/maya/api/lib_rendersettings.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 0668c242f0..ee61f954e0 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -7,11 +7,13 @@ import sys from openpype.api import ( get_project_settings, + ) from openpype.pipeline import legacy_io from openpype.pipeline import CreatorError from openpype.pipeline.context_tools import get_current_project_asset +from openpype.hosts.maya.api.commands import reset_frame_range class RenderSettings(object): @@ -152,6 +154,7 @@ class RenderSettings(object): cmds.setAttr(str(attribute), int(value), type = "Boolean") # noqa elif (cmds.setAttr(str(attribute), type=True)) == "string": cmds.setAttr(str(attribute), str(value), type = "string") # noqa + reset_frame_range() def _set_redshift_settings(self, width, height): """Sets settings for Redshift.""" From 6e77634c67f39ce22d06068bc5110c2cae46686f Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Tue, 26 Jul 2022 14:05:57 +0300 Subject: [PATCH 088/123] Fix attribute type check bug. --- openpype/hosts/maya/api/lib_rendersettings.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index ee61f954e0..c3bccf0add 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -148,11 +148,11 @@ class RenderSettings(object): # command accordingly. for item in additional_options: attribute, value = item - if (cmds.setAttr(str(attribute), type=True)) == "long": + if (cmds.getAttr(str(attribute), type=True)) == "long": cmds.setAttr(str(attribute), int(value)) - elif (cmds.setAttr(str(attribute), type=True)) == "bool": + elif (cmds.getAttr(str(attribute), type=True)) == "bool": cmds.setAttr(str(attribute), int(value), type = "Boolean") # noqa - elif (cmds.setAttr(str(attribute), type=True)) == "string": + elif (cmds.getAttr(str(attribute), type=True)) == "string": cmds.setAttr(str(attribute), str(value), type = "string") # noqa reset_frame_range() From 5e9799ee1649c5686fd2987b54331c6b1ea14b57 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Tue, 26 Jul 2022 20:04:08 +0800 Subject: [PATCH 089/123] Enable write color sets on animation publish automatically --- openpype/hosts/maya/plugins/create/create_animation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/create/create_animation.py b/openpype/hosts/maya/plugins/create/create_animation.py index 5cd1f7090a..ef6608054d 100644 --- a/openpype/hosts/maya/plugins/create/create_animation.py +++ b/openpype/hosts/maya/plugins/create/create_animation.py @@ -22,7 +22,7 @@ class CreateAnimation(plugin.Creator): self.data[key] = value # Write vertex colors with the geometry. - self.data["writeColorSets"] = False + self.data["writeColorSets"] = True self.data["writeFaceSets"] = False # Include only renderable visible shapes. From a26fd8394c71f0f01552f20987ac6618747d1572 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Tue, 26 Jul 2022 17:32:26 +0300 Subject: [PATCH 090/123] Propagate render settings key to grey out apply button. --- openpype/hosts/maya/api/menu.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/openpype/hosts/maya/api/menu.py b/openpype/hosts/maya/api/menu.py index c3ce8b0227..7d2d0dc3f5 100644 --- a/openpype/hosts/maya/api/menu.py +++ b/openpype/hosts/maya/api/menu.py @@ -6,7 +6,7 @@ from Qt import QtWidgets, QtGui import maya.utils import maya.cmds as cmds -from openpype.api import BuildWorkfile +from openpype.api import BuildWorkfile, get_current_project_settings from openpype.settings import get_project_settings from openpype.pipeline import legacy_io from openpype.tools.utils import host_tools @@ -98,12 +98,18 @@ def install(): ) cmds.menuItem(divider=True) - - cmds.menuItem( - "Set Render Settings", - command=lambda *args: lib_rendersettings.RenderSettings().set_default_renderer_settings() # noqa - ) - + # project_settings/maya/RenderSettings/apply_render_settings + render_settings_flag = get_current_project_settings()["maya"]["RenderSettings"]["apply_render_settings"] # noqa + if render_settings_flag: + cmds.menuItem( + "Set Render Settings", + command=lambda *args: lib_rendersettings.RenderSettings().set_default_renderer_settings(), # noqa + enable=True) + else: + cmds.menuItem( + "Set Render Settings", + command=lambda *args: lib_rendersettings.RenderSettings().set_default_renderer_settings(), # noqa + enable=False) cmds.menuItem(divider=True) cmds.menuItem( From 58309c3d3b970ea5f55a08e6b1b1c092b3d6413a Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Tue, 26 Jul 2022 17:38:58 +0300 Subject: [PATCH 091/123] Remove Mental Ray related code. --- openpype/hosts/maya/api/lib_rendersettings.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index c3bccf0add..768f9156c3 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -19,7 +19,6 @@ from openpype.hosts.maya.api.commands import reset_frame_range class RenderSettings(object): _image_prefix_nodes = { - 'mentalray': 'defaultRenderGlobals.imageFilePrefix', 'vray': 'vraySettings.fileNamePrefix', 'arnold': 'defaultRenderGlobals.imageFilePrefix', 'renderman': 'defaultRenderGlobals.imageFilePrefix', @@ -27,7 +26,6 @@ class RenderSettings(object): } _image_prefixes = { - 'mentalray': 'maya///{aov_separator}', # noqa 'vray': 'maya///', 'arnold': 'maya///{aov_separator}', # noqa 'renderman': 'maya///{aov_separator}', From 54bb85b2043bab1b9b1a0b5d8236d2c694c9a66f Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Tue, 26 Jul 2022 17:47:58 +0300 Subject: [PATCH 092/123] Remove unnecessary comment. --- openpype/hosts/maya/api/menu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/api/menu.py b/openpype/hosts/maya/api/menu.py index 7d2d0dc3f5..ed546ba7a8 100644 --- a/openpype/hosts/maya/api/menu.py +++ b/openpype/hosts/maya/api/menu.py @@ -98,7 +98,7 @@ def install(): ) cmds.menuItem(divider=True) - # project_settings/maya/RenderSettings/apply_render_settings + render_settings_flag = get_current_project_settings()["maya"]["RenderSettings"]["apply_render_settings"] # noqa if render_settings_flag: cmds.menuItem( From 8d7b9af7a52209fc706838abc83109724d5e4741 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Tue, 26 Jul 2022 18:00:13 +0300 Subject: [PATCH 093/123] Grab image prefixes from settings. --- openpype/hosts/maya/api/lib_rendersettings.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 768f9156c3..e5acdc2139 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -7,7 +7,7 @@ import sys from openpype.api import ( get_project_settings, - + get_current_project_settings ) from openpype.pipeline import legacy_io @@ -26,10 +26,10 @@ class RenderSettings(object): } _image_prefixes = { - 'vray': 'maya///', - 'arnold': 'maya///{aov_separator}', # noqa + 'vray': get_current_project_settings()["maya"]["RenderSettings"]["vray_renderer"]["image_prefix"], # noqa + 'arnold': get_current_project_settings()["maya"]["RenderSettings"]["arnold_renderer"]["image_prefix"], # noqa 'renderman': 'maya///{aov_separator}', - 'redshift': 'maya///{aov_separator}' # noqa + 'redshift': get_current_project_settings()["maya"]["RenderSettings"]["redshift_renderer"]["image_prefix"] # noqa } _aov_chars = { From c44ec02d5e1ff3a370fa03d3057f53663f791e3d Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Tue, 26 Jul 2022 23:36:17 +0800 Subject: [PATCH 094/123] update the setting which allows switching on/off write color sets in animation publish --- .../maya/plugins/create/create_animation.py | 3 +- .../defaults/project_settings/maya.json | 2 ++ .../schemas/schema_maya_create.json | 29 ++++++++++++++++--- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_animation.py b/openpype/hosts/maya/plugins/create/create_animation.py index ef6608054d..b7f473acef 100644 --- a/openpype/hosts/maya/plugins/create/create_animation.py +++ b/openpype/hosts/maya/plugins/create/create_animation.py @@ -11,6 +11,7 @@ class CreateAnimation(plugin.Creator): label = "Animation" family = "animation" icon = "male" + write_color_sets = False def __init__(self, *args, **kwargs): super(CreateAnimation, self).__init__(*args, **kwargs) @@ -22,7 +23,7 @@ class CreateAnimation(plugin.Creator): self.data[key] = value # Write vertex colors with the geometry. - self.data["writeColorSets"] = True + self.data["writeColorSets"] = self.write_color_sets self.data["writeFaceSets"] = False # Include only renderable visible shapes. diff --git a/openpype/settings/defaults/project_settings/maya.json b/openpype/settings/defaults/project_settings/maya.json index c96acbff6d..70bedf55d8 100644 --- a/openpype/settings/defaults/project_settings/maya.json +++ b/openpype/settings/defaults/project_settings/maya.json @@ -90,9 +90,11 @@ }, "CreateAnimation": { "enabled": true, + "write_color_sets": false, "defaults": [ "Main" ] + }, "CreateAss": { "enabled": true, diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create.json index 09287a8b50..9000b0246f 100644 --- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create.json +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create.json @@ -143,6 +143,31 @@ } ] }, + { + "type": "dict", + "collapsible": true, + "key": "CreateAnimation", + "label": "Create Animation", + "checkbox_key": "enabled", + "children": [ + { + "type": "boolean", + "key": "enabled", + "label": "Enabled" + }, + { + "type": "boolean", + "key": "write_color_sets", + "label": "Write Color Sets" + }, + { + "type": "list", + "key": "defaults", + "label": "Default Subsets", + "object_type": "text" + } + ] + }, { "type": "schema_template", "name": "template_create_plugin", @@ -159,10 +184,6 @@ "key": "CreateMultiverseUsdOver", "label": "Create Multiverse USD Override" }, - { - "key": "CreateAnimation", - "label": "Create Animation" - }, { "key": "CreateAss", "label": "Create Ass" From c53b7bba7784aff067cfa4cfdeffe35be146180c Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Tue, 26 Jul 2022 21:09:54 +0300 Subject: [PATCH 095/123] Remove unnecessary unused function. --- openpype/hosts/maya/api/lib_rendersettings.py | 12 ------------ openpype/hosts/maya/plugins/create/create_render.py | 2 -- 2 files changed, 14 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index e5acdc2139..8c09175614 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -49,18 +49,6 @@ class RenderSettings(object): legacy_io.Session["AVALON_PROJECT"] ) - @staticmethod - def apply_defaults(renderer=None, project_settings=None): - if renderer is None: - renderer = cmds.getAttr( - 'defaultRenderGlobals.currentRenderer').lower() - # handle various renderman names - if renderer.startswith('renderman'): - renderer = 'renderman' - - render_settings = RenderSettings(project_settings) - render_settings.set_default_renderer_settings(renderer) - def set_default_renderer_settings(self, renderer=None): """Set basic settings based on renderer.""" if not renderer: diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index b73f550fa2..d4ad488b32 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -164,8 +164,6 @@ class CreateRender(plugin.Creator): collection = render_layer.createCollection("defaultCollection") collection.getSelector().setPattern('*') - self.log.info("Applying default render settings..") - lib_rendersettings.RenderSettings.apply_defaults() return self.instance def _deadline_webservice_changed(self): From b0571153785b1bf6626738e8bf4f29c54c74c38d Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 27 Jul 2022 20:01:36 +0800 Subject: [PATCH 096/123] add write-color-sets option in point cache --- .../maya/plugins/create/create_pointcache.py | 5 +++- .../defaults/project_settings/maya.json | 1 + .../schemas/schema_maya_create.json | 30 ++++++++++++++++--- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_pointcache.py b/openpype/hosts/maya/plugins/create/create_pointcache.py index e876015adb..0d71f2995d 100644 --- a/openpype/hosts/maya/plugins/create/create_pointcache.py +++ b/openpype/hosts/maya/plugins/create/create_pointcache.py @@ -12,13 +12,16 @@ class CreatePointCache(plugin.Creator): family = "pointcache" icon = "gears" + write_color_sets = False + + def __init__(self, *args, **kwargs): super(CreatePointCache, self).__init__(*args, **kwargs) # Add animation data self.data.update(lib.collect_animation_data()) - self.data["writeColorSets"] = False # Vertex colors with the geometry. + self.data["writeColorSets"] = self.write_color_sets # Vertex colors with the geometry. self.data["writeFaceSets"] = False # Vertex colors with the geometry. self.data["renderableOnly"] = False # Only renderable visible shapes self.data["visibleOnly"] = False # only nodes that are visible diff --git a/openpype/settings/defaults/project_settings/maya.json b/openpype/settings/defaults/project_settings/maya.json index 70bedf55d8..d8b107b709 100644 --- a/openpype/settings/defaults/project_settings/maya.json +++ b/openpype/settings/defaults/project_settings/maya.json @@ -136,6 +136,7 @@ }, "CreatePointCache": { "enabled": true, + "write_color_sets": false, "defaults": [ "Main" ] diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create.json index 9000b0246f..e0684597f5 100644 --- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create.json +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create.json @@ -168,6 +168,32 @@ } ] }, + { + "type": "dict", + "collapsible": true, + "key": "CreatePointCache", + "label": "Create Cache", + "checkbox_key": "enabled", + "children": [ + { + "type": "boolean", + "key": "enabled", + "label": "Enabled" + }, + { + "type": "boolean", + "key": "write_color_sets", + "label": "Write Color Sets" + }, + { + "type": "list", + "key": "defaults", + "label": "Default Subsets", + "object_type": "text" + } + ] + }, + { "type": "schema_template", "name": "template_create_plugin", @@ -208,10 +234,6 @@ "key": "CreateModel", "label": "Create Model" }, - { - "key": "CreatePointCache", - "label": "Create Cache" - }, { "key": "CreateRenderSetup", "label": "Create Render Setup" From 968151f3433ceed9fdf7ad9c793543ca493c26d8 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 27 Jul 2022 21:56:36 +0800 Subject: [PATCH 097/123] fix the name of Point Cache in the Project Setting --- openpype/hosts/maya/plugins/create/create_animation.py | 3 ++- openpype/hosts/maya/plugins/create/create_pointcache.py | 8 ++++---- .../projects_schema/schemas/schema_maya_create.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_animation.py b/openpype/hosts/maya/plugins/create/create_animation.py index b7f473acef..7fc9c1e63e 100644 --- a/openpype/hosts/maya/plugins/create/create_animation.py +++ b/openpype/hosts/maya/plugins/create/create_animation.py @@ -11,7 +11,8 @@ class CreateAnimation(plugin.Creator): label = "Animation" family = "animation" icon = "male" - write_color_sets = False + + write_color_sets = False def __init__(self, *args, **kwargs): super(CreateAnimation, self).__init__(*args, **kwargs) diff --git a/openpype/hosts/maya/plugins/create/create_pointcache.py b/openpype/hosts/maya/plugins/create/create_pointcache.py index 0d71f2995d..0da781dfa0 100644 --- a/openpype/hosts/maya/plugins/create/create_pointcache.py +++ b/openpype/hosts/maya/plugins/create/create_pointcache.py @@ -11,9 +11,8 @@ class CreatePointCache(plugin.Creator): label = "Point Cache" family = "pointcache" icon = "gears" - - write_color_sets = False - + + write_color_sets = False def __init__(self, *args, **kwargs): super(CreatePointCache, self).__init__(*args, **kwargs) @@ -21,7 +20,8 @@ class CreatePointCache(plugin.Creator): # Add animation data self.data.update(lib.collect_animation_data()) - self.data["writeColorSets"] = self.write_color_sets # Vertex colors with the geometry. + # Vertex colors with the geometry. + self.data["writeColorSets"] = self.write_color_sets self.data["writeFaceSets"] = False # Vertex colors with the geometry. self.data["renderableOnly"] = False # Only renderable visible shapes self.data["visibleOnly"] = False # only nodes that are visible diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create.json index e0684597f5..2e4d8edef1 100644 --- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create.json +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_create.json @@ -172,7 +172,7 @@ "type": "dict", "collapsible": true, "key": "CreatePointCache", - "label": "Create Cache", + "label": "Create Point Cache", "checkbox_key": "enabled", "children": [ { From 6568e9cc605a39264077d6158baa76bf50d454f9 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 27 Jul 2022 22:03:41 +0800 Subject: [PATCH 098/123] fix the name of Point Cache in Settings --- openpype/hosts/maya/plugins/create/create_animation.py | 2 +- openpype/hosts/maya/plugins/create/create_pointcache.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_animation.py b/openpype/hosts/maya/plugins/create/create_animation.py index 7fc9c1e63e..31d4f968d1 100644 --- a/openpype/hosts/maya/plugins/create/create_animation.py +++ b/openpype/hosts/maya/plugins/create/create_animation.py @@ -11,7 +11,7 @@ class CreateAnimation(plugin.Creator): label = "Animation" family = "animation" icon = "male" - + write_color_sets = False def __init__(self, *args, **kwargs): diff --git a/openpype/hosts/maya/plugins/create/create_pointcache.py b/openpype/hosts/maya/plugins/create/create_pointcache.py index 0da781dfa0..1c83a9c20d 100644 --- a/openpype/hosts/maya/plugins/create/create_pointcache.py +++ b/openpype/hosts/maya/plugins/create/create_pointcache.py @@ -21,7 +21,7 @@ class CreatePointCache(plugin.Creator): self.data.update(lib.collect_animation_data()) # Vertex colors with the geometry. - self.data["writeColorSets"] = self.write_color_sets + self.data["writeColorSets"] = self.write_color_sets self.data["writeFaceSets"] = False # Vertex colors with the geometry. self.data["renderableOnly"] = False # Only renderable visible shapes self.data["visibleOnly"] = False # only nodes that are visible From 71a927d06ff6f6f407169aaffa2f79edb9b74199 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 27 Jul 2022 22:08:04 +0800 Subject: [PATCH 099/123] add write color sets to Settings and rename Create Cache to Create Point Cache in Settings --- openpype/hosts/maya/plugins/create/create_animation.py | 1 - openpype/hosts/maya/plugins/create/create_pointcache.py | 1 - 2 files changed, 2 deletions(-) diff --git a/openpype/hosts/maya/plugins/create/create_animation.py b/openpype/hosts/maya/plugins/create/create_animation.py index 31d4f968d1..e47d4e5b5a 100644 --- a/openpype/hosts/maya/plugins/create/create_animation.py +++ b/openpype/hosts/maya/plugins/create/create_animation.py @@ -11,7 +11,6 @@ class CreateAnimation(plugin.Creator): label = "Animation" family = "animation" icon = "male" - write_color_sets = False def __init__(self, *args, **kwargs): diff --git a/openpype/hosts/maya/plugins/create/create_pointcache.py b/openpype/hosts/maya/plugins/create/create_pointcache.py index 1c83a9c20d..5516445de8 100644 --- a/openpype/hosts/maya/plugins/create/create_pointcache.py +++ b/openpype/hosts/maya/plugins/create/create_pointcache.py @@ -11,7 +11,6 @@ class CreatePointCache(plugin.Creator): label = "Point Cache" family = "pointcache" icon = "gears" - write_color_sets = False def __init__(self, *args, **kwargs): From 4379dc019e4069ca44240aec565c1d136879f1a8 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 27 Jul 2022 18:05:32 +0200 Subject: [PATCH 100/123] OP-3283 - implemented proper usage of {layer} in subset template for legacy creator {layer} placeholder could be used in project_settings/global/tools/creator/subset_name_profiles to drive lower/upper cases when layer is used in subset name (eg. when multiple subsets are created at once). Warning {layer} means keep layer name as it is, not lowercasing! --- .../plugins/create/create_legacy_image.py | 49 ++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/openpype/hosts/photoshop/plugins/create/create_legacy_image.py b/openpype/hosts/photoshop/plugins/create/create_legacy_image.py index 9736471a26..142cddfd52 100644 --- a/openpype/hosts/photoshop/plugins/create/create_legacy_image.py +++ b/openpype/hosts/photoshop/plugins/create/create_legacy_image.py @@ -1,6 +1,11 @@ from Qt import QtWidgets from openpype.pipeline import create from openpype.hosts.photoshop import api as photoshop +from openpype.pipeline import legacy_io +from openpype.client import get_asset_by_name +from openpype.settings import get_project_settings +from openpype.lib import prepare_template_data +from openpype.lib.profiles_filtering import filter_profiles class CreateImage(create.LegacyCreator): @@ -82,7 +87,18 @@ class CreateImage(create.LegacyCreator): subset_name = creator_subset_name if len(groups) > 1: - subset_name += group.name.title().replace(" ", "") + subset_template = self._get_subset_template(self.family) + if not subset_template or 'layer' not in subset_template.lower(): + subset_name += group.name.title().replace(" ", "") + else: + fill_pairs = { + "variant": self.data["variant"], + "family": self.family, + "task": legacy_io.Session["AVALON_TASK"], + "layer": group.name + } + + subset_name = subset_template.format(**prepare_template_data(fill_pairs)) if group.long_name: for directory in group.long_name[::-1]: @@ -98,3 +114,34 @@ class CreateImage(create.LegacyCreator): # reusing existing group, need to rename afterwards if not create_group: stub.rename_layer(group.id, stub.PUBLISH_ICON + group.name) + + @classmethod + def get_dynamic_data( + cls, variant, task_name, asset_id, project_name, host_name + ): + return {"layer": ""} + + def _get_subset_template(self, family): + project_name = legacy_io.Session["AVALON_PROJECT"] + asset_name = legacy_io.Session["AVALON_ASSET"] + task_name = legacy_io.Session["AVALON_TASK"] + + asset_doc = get_asset_by_name( + project_name, asset_name, fields=["data.tasks"] + ) + asset_tasks = asset_doc.get("data", {}).get("tasks") or {} + task_info = asset_tasks.get(task_name) or {} + task_type = task_info.get("type") + + tools_settings = get_project_settings(project_name)["global"]["tools"] + profiles = tools_settings["creator"]["subset_name_profiles"] + filtering_criteria = { + "families": family, + "hosts": "photoshop", + "tasks": task_name, + "task_types": task_type + } + + matching_profile = filter_profiles(profiles, filtering_criteria) + if matching_profile: + return matching_profile["template"] From 8c95aab796ec3cc284851b2d1c3170ead24a22b7 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 28 Jul 2022 12:41:49 +0200 Subject: [PATCH 101/123] OP-3283 - extracted logic to plugin to reuse --- openpype/hosts/photoshop/api/plugin.py | 53 +++++++++++++++++++ .../plugins/create/create_legacy_image.py | 50 +++-------------- 2 files changed, 61 insertions(+), 42 deletions(-) diff --git a/openpype/hosts/photoshop/api/plugin.py b/openpype/hosts/photoshop/api/plugin.py index c80e6bbd06..ecbfbf91e3 100644 --- a/openpype/hosts/photoshop/api/plugin.py +++ b/openpype/hosts/photoshop/api/plugin.py @@ -2,6 +2,11 @@ import re from openpype.pipeline import LoaderPlugin from .launch_logic import stub +from openpype.pipeline import legacy_io +from openpype.client import get_asset_by_name +from openpype.settings import get_project_settings +from openpype.lib import prepare_template_data +from openpype.lib.profiles_filtering import filter_profiles def get_unique_layer_name(layers, asset_name, subset_name): @@ -33,3 +38,51 @@ class PhotoshopLoader(LoaderPlugin): @staticmethod def get_stub(): return stub() + + +def get_subset_template(family): + """Get subset template name from Settings""" + project_name = legacy_io.Session["AVALON_PROJECT"] + asset_name = legacy_io.Session["AVALON_ASSET"] + task_name = legacy_io.Session["AVALON_TASK"] + + asset_doc = get_asset_by_name( + project_name, asset_name, fields=["data.tasks"] + ) + asset_tasks = asset_doc.get("data", {}).get("tasks") or {} + task_info = asset_tasks.get(task_name) or {} + task_type = task_info.get("type") + + tools_settings = get_project_settings(project_name)["global"]["tools"] + profiles = tools_settings["creator"]["subset_name_profiles"] + filtering_criteria = { + "families": family, + "hosts": "photoshop", + "tasks": task_name, + "task_types": task_type + } + + matching_profile = filter_profiles(profiles, filtering_criteria) + if matching_profile: + return matching_profile["template"] + + +def get_subset_name_for_multiple(subset_name, subset_template, group, + family, variant): + """Update subset name with layer information to differentiate multiple + + subset_template might contain specific way how to format layer name + ({layer},{Layer} or {LAYER}). If subset_template doesn't contain placeholder + at all, fall back to original solution. + """ + if not subset_template or 'layer' not in subset_template.lower(): + subset_name += group.name.title().replace(" ", "") + else: + fill_pairs = { + "family": family, + "variant": variant, + "task": legacy_io.Session["AVALON_TASK"], + "layer": group.name + } + + return subset_template.format(**prepare_template_data(fill_pairs)) diff --git a/openpype/hosts/photoshop/plugins/create/create_legacy_image.py b/openpype/hosts/photoshop/plugins/create/create_legacy_image.py index 142cddfd52..6d0587c20c 100644 --- a/openpype/hosts/photoshop/plugins/create/create_legacy_image.py +++ b/openpype/hosts/photoshop/plugins/create/create_legacy_image.py @@ -1,11 +1,8 @@ from Qt import QtWidgets from openpype.pipeline import create from openpype.hosts.photoshop import api as photoshop -from openpype.pipeline import legacy_io -from openpype.client import get_asset_by_name -from openpype.settings import get_project_settings -from openpype.lib import prepare_template_data -from openpype.lib.profiles_filtering import filter_profiles + +from openpype.hosts.photoshop.api.plugin import get_subset_template, get_subset_name_for_multiple class CreateImage(create.LegacyCreator): @@ -87,18 +84,12 @@ class CreateImage(create.LegacyCreator): subset_name = creator_subset_name if len(groups) > 1: - subset_template = self._get_subset_template(self.family) - if not subset_template or 'layer' not in subset_template.lower(): - subset_name += group.name.title().replace(" ", "") - else: - fill_pairs = { - "variant": self.data["variant"], - "family": self.family, - "task": legacy_io.Session["AVALON_TASK"], - "layer": group.name - } - - subset_name = subset_template.format(**prepare_template_data(fill_pairs)) + subset_template = get_subset_template(self.family) + subset_name = get_subset_name_for_multiple(subset_name, + subset_template, + group, + self.family, + self.data["variant"]) if group.long_name: for directory in group.long_name[::-1]: @@ -120,28 +111,3 @@ class CreateImage(create.LegacyCreator): cls, variant, task_name, asset_id, project_name, host_name ): return {"layer": ""} - - def _get_subset_template(self, family): - project_name = legacy_io.Session["AVALON_PROJECT"] - asset_name = legacy_io.Session["AVALON_ASSET"] - task_name = legacy_io.Session["AVALON_TASK"] - - asset_doc = get_asset_by_name( - project_name, asset_name, fields=["data.tasks"] - ) - asset_tasks = asset_doc.get("data", {}).get("tasks") or {} - task_info = asset_tasks.get(task_name) or {} - task_type = task_info.get("type") - - tools_settings = get_project_settings(project_name)["global"]["tools"] - profiles = tools_settings["creator"]["subset_name_profiles"] - filtering_criteria = { - "families": family, - "hosts": "photoshop", - "tasks": task_name, - "task_types": task_type - } - - matching_profile = filter_profiles(profiles, filtering_criteria) - if matching_profile: - return matching_profile["template"] From 87cf386a54917adacfd91542cd3613ac0fe4babc Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 28 Jul 2022 12:52:22 +0200 Subject: [PATCH 102/123] OP-3283 - implemented for new creator --- .../photoshop/plugins/create/create_image.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/openpype/hosts/photoshop/plugins/create/create_image.py b/openpype/hosts/photoshop/plugins/create/create_image.py index f15068b031..ebb268dc93 100644 --- a/openpype/hosts/photoshop/plugins/create/create_image.py +++ b/openpype/hosts/photoshop/plugins/create/create_image.py @@ -5,6 +5,10 @@ from openpype.pipeline import ( CreatedInstance, legacy_io ) +from openpype.hosts.photoshop.api.plugin import ( + get_subset_template, + get_subset_name_for_multiple +) class ImageCreator(Creator): @@ -68,7 +72,12 @@ class ImageCreator(Creator): if creating_multiple_groups: # concatenate with layer name to differentiate subsets - subset_name += group.name.title().replace(" ", "") + subset_template = get_subset_template(self.family) + subset_name = get_subset_name_for_multiple(subset_name, + subset_template, + group, + self.family, + data["variant"]) if group.long_name: for directory in group.long_name[::-1]: @@ -143,3 +152,9 @@ class ImageCreator(Creator): def _clean_highlights(self, stub, item): return item.replace(stub.PUBLISH_ICON, '').replace(stub.LOADED_ICON, '') + @classmethod + def get_dynamic_data( + cls, variant, task_name, asset_id, project_name, host_name + ): + """Called by UI, empty value for layer must be provided.""" + return {"layer": ""} From a03f2b6a1a6ee24692e25710d55fd0af11eecb96 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 28 Jul 2022 12:53:20 +0200 Subject: [PATCH 103/123] OP-3283 - fixed imports --- .../hosts/photoshop/plugins/create/create_legacy_image.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/openpype/hosts/photoshop/plugins/create/create_legacy_image.py b/openpype/hosts/photoshop/plugins/create/create_legacy_image.py index 6d0587c20c..d1a54a407e 100644 --- a/openpype/hosts/photoshop/plugins/create/create_legacy_image.py +++ b/openpype/hosts/photoshop/plugins/create/create_legacy_image.py @@ -2,7 +2,10 @@ from Qt import QtWidgets from openpype.pipeline import create from openpype.hosts.photoshop import api as photoshop -from openpype.hosts.photoshop.api.plugin import get_subset_template, get_subset_name_for_multiple +from openpype.hosts.photoshop.api.plugin import ( + get_subset_template, + get_subset_name_for_multiple +) class CreateImage(create.LegacyCreator): From 037c5a13cddc3e9426ebfe2c46ec6abc82eb559f Mon Sep 17 00:00:00 2001 From: kaamaurice Date: Thu, 28 Jul 2022 18:46:47 +0200 Subject: [PATCH 104/123] bugfix blender ops for workfiles dialog --- openpype/hosts/blender/api/ops.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/openpype/hosts/blender/api/ops.py b/openpype/hosts/blender/api/ops.py index c1b5add518..4f8410da74 100644 --- a/openpype/hosts/blender/api/ops.py +++ b/openpype/hosts/blender/api/ops.py @@ -220,12 +220,9 @@ class LaunchQtApp(bpy.types.Operator): self._app.store_window(self.bl_idname, window) self._window = window - if not isinstance( - self._window, - (QtWidgets.QMainWindow, QtWidgets.QDialog, ModuleType) - ): + if not isinstance(self._window, (QtWidgets.QWidget, ModuleType)): raise AttributeError( - "`window` should be a `QDialog or module`. Got: {}".format( + "`window` should be a `QWidget or module`. Got: {}".format( str(type(window)) ) ) @@ -249,9 +246,9 @@ class LaunchQtApp(bpy.types.Operator): self._window.setWindowFlags(on_top_flags) self._window.show() - if on_top_flags != origin_flags: - self._window.setWindowFlags(origin_flags) - self._window.show() + # if on_top_flags != origin_flags: + # self._window.setWindowFlags(origin_flags) + # self._window.show() return {'FINISHED'} From ad4aeb0071e7ee92a592e7de53fb24a230a13bc8 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Fri, 29 Jul 2022 10:38:01 +0200 Subject: [PATCH 105/123] use query functions on remaining places --- openpype/hooks/pre_global_host_data.py | 8 +++----- .../hosts/fusion/scripts/fusion_switch_shot.py | 8 -------- openpype/hosts/testhost/api/pipeline.py | 8 ++++---- .../testhost/plugins/create/auto_creator.py | 13 ++++--------- openpype/pipeline/create/context.py | 14 +++++--------- openpype/pipeline/thumbnail.py | 10 +++------- openpype/scripts/fusion_switch_shot.py | 18 ++++++------------ 7 files changed, 25 insertions(+), 54 deletions(-) diff --git a/openpype/hooks/pre_global_host_data.py b/openpype/hooks/pre_global_host_data.py index 6577e37cbe..8a178915fb 100644 --- a/openpype/hooks/pre_global_host_data.py +++ b/openpype/hooks/pre_global_host_data.py @@ -1,3 +1,4 @@ +from openpype.client import get_project, get_asset_by_name from openpype.lib import ( PreLaunchHook, EnvironmentPrepData, @@ -69,7 +70,7 @@ class GlobalHostDataHook(PreLaunchHook): self.data["dbcon"] = dbcon # Project document - project_doc = dbcon.find_one({"type": "project"}) + project_doc = get_project(project_name) self.data["project_doc"] = project_doc asset_name = self.data.get("asset_name") @@ -79,8 +80,5 @@ class GlobalHostDataHook(PreLaunchHook): ) return - asset_doc = dbcon.find_one({ - "type": "asset", - "name": asset_name - }) + asset_doc = get_asset_by_name(project_name, asset_name) self.data["asset_doc"] = asset_doc diff --git a/openpype/hosts/fusion/scripts/fusion_switch_shot.py b/openpype/hosts/fusion/scripts/fusion_switch_shot.py index 52a157c56e..87ff8e2ffe 100644 --- a/openpype/hosts/fusion/scripts/fusion_switch_shot.py +++ b/openpype/hosts/fusion/scripts/fusion_switch_shot.py @@ -3,9 +3,7 @@ import re import sys import logging -# Pipeline imports from openpype.client import ( - get_project, get_asset_by_name, get_versions, ) @@ -21,9 +19,6 @@ from openpype.lib.avalon_context import get_workdir_from_session log = logging.getLogger("Update Slap Comp") -self = sys.modules[__name__] -self._project = None - def _format_version_folder(folder): """Format a version folder based on the filepath @@ -212,9 +207,6 @@ def switch(asset_name, filepath=None, new=True): asset = get_asset_by_name(project_name, asset_name) assert asset, "Could not find '%s' in the database" % asset_name - # Get current project - self._project = get_project(project_name) - # Go to comp if not filepath: current_comp = api.get_current_comp() diff --git a/openpype/hosts/testhost/api/pipeline.py b/openpype/hosts/testhost/api/pipeline.py index 285fe8f8d6..1e05f336fb 100644 --- a/openpype/hosts/testhost/api/pipeline.py +++ b/openpype/hosts/testhost/api/pipeline.py @@ -1,6 +1,6 @@ import os import json -from openpype.pipeline import legacy_io +from openpype.client import get_asset_by_name class HostContext: @@ -17,10 +17,10 @@ class HostContext: if not asset_name: return project_name - asset_doc = legacy_io.find_one( - {"type": "asset", "name": asset_name}, - {"data.parents": 1} + asset_doc = get_asset_by_name( + project_name, asset_name, fields=["data.parents"] ) + parents = asset_doc.get("data", {}).get("parents") or [] hierarchy = [project_name] diff --git a/openpype/hosts/testhost/plugins/create/auto_creator.py b/openpype/hosts/testhost/plugins/create/auto_creator.py index 06b95375b1..8d59fc3242 100644 --- a/openpype/hosts/testhost/plugins/create/auto_creator.py +++ b/openpype/hosts/testhost/plugins/create/auto_creator.py @@ -1,10 +1,11 @@ from openpype.lib import NumberDef -from openpype.hosts.testhost.api import pipeline +from openpype.client import get_asset_by_name from openpype.pipeline import ( legacy_io, AutoCreator, CreatedInstance, ) +from openpype.hosts.testhost.api import pipeline class MyAutoCreator(AutoCreator): @@ -44,10 +45,7 @@ class MyAutoCreator(AutoCreator): host_name = legacy_io.Session["AVALON_APP"] if existing_instance is None: - asset_doc = legacy_io.find_one({ - "type": "asset", - "name": asset_name - }) + asset_doc = get_asset_by_name(project_name, asset_name) subset_name = self.get_subset_name( variant, task_name, asset_doc, project_name, host_name ) @@ -69,10 +67,7 @@ class MyAutoCreator(AutoCreator): existing_instance["asset"] != asset_name or existing_instance["task"] != task_name ): - asset_doc = legacy_io.find_one({ - "type": "asset", - "name": asset_name - }) + asset_doc = get_asset_by_name(project_name, asset_name) subset_name = self.get_subset_name( variant, task_name, asset_doc, project_name, host_name ) diff --git a/openpype/pipeline/create/context.py b/openpype/pipeline/create/context.py index 9b55c3b21e..eaaed39357 100644 --- a/openpype/pipeline/create/context.py +++ b/openpype/pipeline/create/context.py @@ -6,6 +6,7 @@ import inspect from uuid import uuid4 from contextlib import contextmanager +from openpype.client import get_assets from openpype.host import INewPublisher from openpype.pipeline import legacy_io from openpype.pipeline.mongodb import ( @@ -1082,15 +1083,10 @@ class CreateContext: for asset_name in task_names_by_asset_name.keys() if asset_name is not None ] - asset_docs = list(self.dbcon.find( - { - "type": "asset", - "name": {"$in": asset_names} - }, - { - "name": True, - "data.tasks": True - } + asset_docs = list(get_assets( + self.project_name, + asset_names=asset_names, + fields=["name", "data.tasks"] )) task_names_by_asset_name = {} diff --git a/openpype/pipeline/thumbnail.py b/openpype/pipeline/thumbnail.py index ec97b36954..eb383b16d9 100644 --- a/openpype/pipeline/thumbnail.py +++ b/openpype/pipeline/thumbnail.py @@ -2,6 +2,7 @@ import os import copy import logging +from openpype.client import get_project from . import legacy_io from .plugin_discover import ( discover, @@ -85,13 +86,8 @@ class TemplateResolver(ThumbnailResolver): self.log.debug("Thumbnail entity does not have set template") return - project = self.dbcon.find_one( - {"type": "project"}, - { - "name": True, - "data.code": True - } - ) + project_name = self.dbcon.active_project() + project = get_project(project_name, fields=["name", "data.code"]) template_data = copy.deepcopy( thumbnail_entity["data"].get("template_data") or {} diff --git a/openpype/scripts/fusion_switch_shot.py b/openpype/scripts/fusion_switch_shot.py index 245fc665f0..b5d3290e3a 100644 --- a/openpype/scripts/fusion_switch_shot.py +++ b/openpype/scripts/fusion_switch_shot.py @@ -3,6 +3,8 @@ import re import sys import logging +from openpype.client import get_project, get_asset_by_name, get_versions + # Pipeline imports from openpype.hosts.fusion import api import openpype.hosts.fusion.api.lib as fusion_lib @@ -19,9 +21,6 @@ from openpype.lib.avalon_context import get_workdir_from_session log = logging.getLogger("Update Slap Comp") -self = sys.modules[__name__] -self._project = None - def _format_version_folder(folder): """Format a version folder based on the filepath @@ -131,8 +130,8 @@ def update_frame_range(comp, representations): """ version_ids = [r["parent"] for r in representations] - versions = legacy_io.find({"type": "version", "_id": {"$in": version_ids}}) - versions = list(versions) + project_name = legacy_io.active_project() + versions = list(get_versions(project_name, version_ids=version_ids)) start = min(v["data"]["frameStart"] for v in versions) end = max(v["data"]["frameEnd"] for v in versions) @@ -162,15 +161,10 @@ def switch(asset_name, filepath=None, new=True): # Assert asset name exists # It is better to do this here then to wait till switch_shot does it - asset = legacy_io.find_one({"type": "asset", "name": asset_name}) + project_name = legacy_io.active_project() + asset = get_asset_by_name(project_name, asset_name) assert asset, "Could not find '%s' in the database" % asset_name - # Get current project - self._project = legacy_io.find_one({ - "type": "project", - "name": legacy_io.Session["AVALON_PROJECT"] - }) - # Go to comp if not filepath: current_comp = api.get_current_comp() From 0f97387032f5698c2142752a2945383aaf18036b Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Fri, 29 Jul 2022 11:17:00 +0200 Subject: [PATCH 106/123] remove unused import --- openpype/scripts/fusion_switch_shot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/scripts/fusion_switch_shot.py b/openpype/scripts/fusion_switch_shot.py index b5d3290e3a..15f189e7cb 100644 --- a/openpype/scripts/fusion_switch_shot.py +++ b/openpype/scripts/fusion_switch_shot.py @@ -3,7 +3,7 @@ import re import sys import logging -from openpype.client import get_project, get_asset_by_name, get_versions +from openpype.client import get_asset_by_name, get_versions # Pipeline imports from openpype.hosts.fusion import api From de8668dc351ff77794da22427145fdbc6fc4b679 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 29 Jul 2022 12:13:43 +0200 Subject: [PATCH 107/123] OP-3283 - fix not create separate from multiple selected --- .../photoshop/plugins/create/create_image.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/openpype/hosts/photoshop/plugins/create/create_image.py b/openpype/hosts/photoshop/plugins/create/create_image.py index ebb268dc93..5688fe376e 100644 --- a/openpype/hosts/photoshop/plugins/create/create_image.py +++ b/openpype/hosts/photoshop/plugins/create/create_image.py @@ -42,17 +42,17 @@ class ImageCreator(Creator): top_level_selected_items = stub.get_selected_layers() if pre_create_data.get("use_selection"): only_single_item_selected = len(top_level_selected_items) == 1 - for selected_item in top_level_selected_items: - if ( - only_single_item_selected or - pre_create_data.get("create_multiple")): + if ( + only_single_item_selected or + pre_create_data.get("create_multiple")): + for selected_item in top_level_selected_items: if selected_item.group: groups_to_create.append(selected_item) else: top_layers_to_wrap.append(selected_item) - else: - group = stub.group_selected_layers(subset_name_from_ui) - groups_to_create.append(group) + else: + group = stub.group_selected_layers(subset_name_from_ui) + groups_to_create.append(group) if not groups_to_create and not top_layers_to_wrap: group = stub.create_group(subset_name_from_ui) @@ -156,5 +156,4 @@ class ImageCreator(Creator): def get_dynamic_data( cls, variant, task_name, asset_id, project_name, host_name ): - """Called by UI, empty value for layer must be provided.""" - return {"layer": ""} + return {"layer": ""} \ No newline at end of file From 831884232cf1c51a76c25470986ac3b01bc44841 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 29 Jul 2022 13:03:00 +0200 Subject: [PATCH 108/123] OP-3283 - fix without select and multiple If creator was configured to not use selection and not create multiple, it failed before. (It should create one wrapping group, eg. instance, around all. Locked background layer cannot be present!) --- openpype/hosts/photoshop/plugins/create/create_image.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/openpype/hosts/photoshop/plugins/create/create_image.py b/openpype/hosts/photoshop/plugins/create/create_image.py index 5688fe376e..2b6e5e6448 100644 --- a/openpype/hosts/photoshop/plugins/create/create_image.py +++ b/openpype/hosts/photoshop/plugins/create/create_image.py @@ -53,6 +53,13 @@ class ImageCreator(Creator): else: group = stub.group_selected_layers(subset_name_from_ui) groups_to_create.append(group) + else: + stub.select_layers(stub.get_layers()) + try: + group = stub.group_selected_layers(subset_name_from_ui) + except: + raise ValueError("Cannot group locked Bakcground layer!") + groups_to_create.append(group) if not groups_to_create and not top_layers_to_wrap: group = stub.create_group(subset_name_from_ui) From 90962d673511c60df44e34e746753208fc359a1c Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 29 Jul 2022 14:41:28 +0200 Subject: [PATCH 109/123] OP-3283 - refactored logic Easier solution found without reinventing logic. --- openpype/hosts/photoshop/api/plugin.py | 53 ------------------- .../photoshop/plugins/create/create_image.py | 25 ++++----- .../plugins/create/create_legacy_image.py | 24 ++++----- 3 files changed, 20 insertions(+), 82 deletions(-) diff --git a/openpype/hosts/photoshop/api/plugin.py b/openpype/hosts/photoshop/api/plugin.py index ecbfbf91e3..c80e6bbd06 100644 --- a/openpype/hosts/photoshop/api/plugin.py +++ b/openpype/hosts/photoshop/api/plugin.py @@ -2,11 +2,6 @@ import re from openpype.pipeline import LoaderPlugin from .launch_logic import stub -from openpype.pipeline import legacy_io -from openpype.client import get_asset_by_name -from openpype.settings import get_project_settings -from openpype.lib import prepare_template_data -from openpype.lib.profiles_filtering import filter_profiles def get_unique_layer_name(layers, asset_name, subset_name): @@ -38,51 +33,3 @@ class PhotoshopLoader(LoaderPlugin): @staticmethod def get_stub(): return stub() - - -def get_subset_template(family): - """Get subset template name from Settings""" - project_name = legacy_io.Session["AVALON_PROJECT"] - asset_name = legacy_io.Session["AVALON_ASSET"] - task_name = legacy_io.Session["AVALON_TASK"] - - asset_doc = get_asset_by_name( - project_name, asset_name, fields=["data.tasks"] - ) - asset_tasks = asset_doc.get("data", {}).get("tasks") or {} - task_info = asset_tasks.get(task_name) or {} - task_type = task_info.get("type") - - tools_settings = get_project_settings(project_name)["global"]["tools"] - profiles = tools_settings["creator"]["subset_name_profiles"] - filtering_criteria = { - "families": family, - "hosts": "photoshop", - "tasks": task_name, - "task_types": task_type - } - - matching_profile = filter_profiles(profiles, filtering_criteria) - if matching_profile: - return matching_profile["template"] - - -def get_subset_name_for_multiple(subset_name, subset_template, group, - family, variant): - """Update subset name with layer information to differentiate multiple - - subset_template might contain specific way how to format layer name - ({layer},{Layer} or {LAYER}). If subset_template doesn't contain placeholder - at all, fall back to original solution. - """ - if not subset_template or 'layer' not in subset_template.lower(): - subset_name += group.name.title().replace(" ", "") - else: - fill_pairs = { - "family": family, - "variant": variant, - "task": legacy_io.Session["AVALON_TASK"], - "layer": group.name - } - - return subset_template.format(**prepare_template_data(fill_pairs)) diff --git a/openpype/hosts/photoshop/plugins/create/create_image.py b/openpype/hosts/photoshop/plugins/create/create_image.py index 2b6e5e6448..44a74de650 100644 --- a/openpype/hosts/photoshop/plugins/create/create_image.py +++ b/openpype/hosts/photoshop/plugins/create/create_image.py @@ -5,10 +5,7 @@ from openpype.pipeline import ( CreatedInstance, legacy_io ) -from openpype.hosts.photoshop.api.plugin import ( - get_subset_template, - get_subset_name_for_multiple -) +from openpype.lib import prepare_template_data class ImageCreator(Creator): @@ -71,6 +68,7 @@ class ImageCreator(Creator): group = stub.group_selected_layers(layer.name) groups_to_create.append(group) + layer_name = '' creating_multiple_groups = len(groups_to_create) > 1 for group in groups_to_create: subset_name = subset_name_from_ui # reset to name from creator UI @@ -78,13 +76,12 @@ class ImageCreator(Creator): created_group_name = self._clean_highlights(stub, group.name) if creating_multiple_groups: - # concatenate with layer name to differentiate subsets - subset_template = get_subset_template(self.family) - subset_name = get_subset_name_for_multiple(subset_name, - subset_template, - group, - self.family, - data["variant"]) + layer_name = group.name + if "{layer}" not in subset_name.lower(): + subset_name += "{Layer}" + + layer_fill = prepare_template_data({"layer": layer_name}) + subset_name = subset_name.format(**layer_fill) if group.long_name: for directory in group.long_name[::-1]: @@ -160,7 +157,5 @@ class ImageCreator(Creator): return item.replace(stub.PUBLISH_ICON, '').replace(stub.LOADED_ICON, '') @classmethod - def get_dynamic_data( - cls, variant, task_name, asset_id, project_name, host_name - ): - return {"layer": ""} \ No newline at end of file + def get_dynamic_data(cls, *args, **kwargs): + return {"layer": "{layer}"} diff --git a/openpype/hosts/photoshop/plugins/create/create_legacy_image.py b/openpype/hosts/photoshop/plugins/create/create_legacy_image.py index d1a54a407e..e465c30abd 100644 --- a/openpype/hosts/photoshop/plugins/create/create_legacy_image.py +++ b/openpype/hosts/photoshop/plugins/create/create_legacy_image.py @@ -2,10 +2,7 @@ from Qt import QtWidgets from openpype.pipeline import create from openpype.hosts.photoshop import api as photoshop -from openpype.hosts.photoshop.api.plugin import ( - get_subset_template, - get_subset_name_for_multiple -) +from openpype.lib import prepare_template_data class CreateImage(create.LegacyCreator): @@ -80,6 +77,7 @@ class CreateImage(create.LegacyCreator): groups.append(group) creator_subset_name = self.data["subset"] + layer_name = '' for group in groups: long_names = [] group.name = group.name.replace(stub.PUBLISH_ICON, ''). \ @@ -87,12 +85,12 @@ class CreateImage(create.LegacyCreator): subset_name = creator_subset_name if len(groups) > 1: - subset_template = get_subset_template(self.family) - subset_name = get_subset_name_for_multiple(subset_name, - subset_template, - group, - self.family, - self.data["variant"]) + layer_name = group.name + if "{layer}" not in subset_name.lower(): + subset_name += "{Layer}" + + layer_fill = prepare_template_data({"layer": layer_name}) + subset_name = subset_name.format(**layer_fill) if group.long_name: for directory in group.long_name[::-1]: @@ -110,7 +108,5 @@ class CreateImage(create.LegacyCreator): stub.rename_layer(group.id, stub.PUBLISH_ICON + group.name) @classmethod - def get_dynamic_data( - cls, variant, task_name, asset_id, project_name, host_name - ): - return {"layer": ""} + def get_dynamic_data(cls, *args, **kwargs): + return {"layer": "{layer}"} From 4ac9ed6886ee455640e93c31fac510270ce571bd Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 29 Jul 2022 16:24:16 +0200 Subject: [PATCH 110/123] OP-3283 - fix invalid characters in subset name Removal of invalid characters must be done in Create phase to persist. --- openpype/hosts/photoshop/plugins/create/create_image.py | 9 ++++++++- .../photoshop/plugins/create/create_legacy_image.py | 9 ++++++++- .../hosts/photoshop/plugins/publish/validate_naming.py | 8 ++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/openpype/hosts/photoshop/plugins/create/create_image.py b/openpype/hosts/photoshop/plugins/create/create_image.py index 44a74de650..2cfbfa8778 100644 --- a/openpype/hosts/photoshop/plugins/create/create_image.py +++ b/openpype/hosts/photoshop/plugins/create/create_image.py @@ -1,3 +1,5 @@ +import re + from openpype.hosts.photoshop import api from openpype.lib import BoolDef from openpype.pipeline import ( @@ -6,6 +8,7 @@ from openpype.pipeline import ( legacy_io ) from openpype.lib import prepare_template_data +from openpype.pipeline.create import SUBSET_NAME_ALLOWED_SYMBOLS class ImageCreator(Creator): @@ -76,7 +79,11 @@ class ImageCreator(Creator): created_group_name = self._clean_highlights(stub, group.name) if creating_multiple_groups: - layer_name = group.name + layer_name = re.sub( + "[^{}]+".format(SUBSET_NAME_ALLOWED_SYMBOLS), + "", + group.name + ) if "{layer}" not in subset_name.lower(): subset_name += "{Layer}" diff --git a/openpype/hosts/photoshop/plugins/create/create_legacy_image.py b/openpype/hosts/photoshop/plugins/create/create_legacy_image.py index e465c30abd..2792a775e0 100644 --- a/openpype/hosts/photoshop/plugins/create/create_legacy_image.py +++ b/openpype/hosts/photoshop/plugins/create/create_legacy_image.py @@ -1,8 +1,11 @@ +import re + from Qt import QtWidgets from openpype.pipeline import create from openpype.hosts.photoshop import api as photoshop from openpype.lib import prepare_template_data +from openpype.pipeline.create import SUBSET_NAME_ALLOWED_SYMBOLS class CreateImage(create.LegacyCreator): @@ -85,7 +88,11 @@ class CreateImage(create.LegacyCreator): subset_name = creator_subset_name if len(groups) > 1: - layer_name = group.name + layer_name = re.sub( + "[^{}]+".format(SUBSET_NAME_ALLOWED_SYMBOLS), + "", + group.name + ) if "{layer}" not in subset_name.lower(): subset_name += "{Layer}" diff --git a/openpype/hosts/photoshop/plugins/publish/validate_naming.py b/openpype/hosts/photoshop/plugins/publish/validate_naming.py index b53f4e8198..8106d6ff16 100644 --- a/openpype/hosts/photoshop/plugins/publish/validate_naming.py +++ b/openpype/hosts/photoshop/plugins/publish/validate_naming.py @@ -4,6 +4,7 @@ import pyblish.api import openpype.api from openpype.pipeline import PublishXmlValidationError from openpype.hosts.photoshop import api as photoshop +from openpype.pipeline.create import SUBSET_NAME_ALLOWED_SYMBOLS class ValidateNamingRepair(pyblish.api.Action): @@ -50,6 +51,13 @@ class ValidateNamingRepair(pyblish.api.Action): subset_name = re.sub(invalid_chars, replace_char, instance.data["subset"]) + # format from Tool Creator + subset_name = re.sub( + "[^{}]+".format(SUBSET_NAME_ALLOWED_SYMBOLS), + "", + subset_name + ) + layer_meta["subset"] = subset_name stub.imprint(instance_id, layer_meta) From d63d0cfb6f40ba7a0cc5b6a0cb3cc8d3057da6ba Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 29 Jul 2022 17:56:39 +0300 Subject: [PATCH 111/123] Remove incorrect code. This reverts commit a26fd8394c71f0f01552f20987ac6618747d1572. --- openpype/hosts/maya/api/menu.py | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/openpype/hosts/maya/api/menu.py b/openpype/hosts/maya/api/menu.py index ed546ba7a8..c3ce8b0227 100644 --- a/openpype/hosts/maya/api/menu.py +++ b/openpype/hosts/maya/api/menu.py @@ -6,7 +6,7 @@ from Qt import QtWidgets, QtGui import maya.utils import maya.cmds as cmds -from openpype.api import BuildWorkfile, get_current_project_settings +from openpype.api import BuildWorkfile from openpype.settings import get_project_settings from openpype.pipeline import legacy_io from openpype.tools.utils import host_tools @@ -99,17 +99,11 @@ def install(): cmds.menuItem(divider=True) - render_settings_flag = get_current_project_settings()["maya"]["RenderSettings"]["apply_render_settings"] # noqa - if render_settings_flag: - cmds.menuItem( - "Set Render Settings", - command=lambda *args: lib_rendersettings.RenderSettings().set_default_renderer_settings(), # noqa - enable=True) - else: - cmds.menuItem( - "Set Render Settings", - command=lambda *args: lib_rendersettings.RenderSettings().set_default_renderer_settings(), # noqa - enable=False) + cmds.menuItem( + "Set Render Settings", + command=lambda *args: lib_rendersettings.RenderSettings().set_default_renderer_settings() # noqa + ) + cmds.menuItem(divider=True) cmds.menuItem( From 7d23558ac038be8e951682f0f945b6c58a8717b0 Mon Sep 17 00:00:00 2001 From: Felix David Date: Fri, 29 Jul 2022 18:27:52 +0200 Subject: [PATCH 112/123] Kitsu|Fix: Collect entities error cause of Python2 Fix #3552 --- .../modules/kitsu/plugins/publish/collect_kitsu_entities.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/modules/kitsu/plugins/publish/collect_kitsu_entities.py b/openpype/modules/kitsu/plugins/publish/collect_kitsu_entities.py index d28ded06c7..d2a6f3f303 100644 --- a/openpype/modules/kitsu/plugins/publish/collect_kitsu_entities.py +++ b/openpype/modules/kitsu/plugins/publish/collect_kitsu_entities.py @@ -39,10 +39,10 @@ class CollectKitsuEntities(pyblish.api.ContextPlugin): kitsu_entity = gazu.asset.get_asset(zou_asset_data["id"]) if not kitsu_entity: - raise AssertionError(f"{entity_type} not found in kitsu!") + raise AssertionError("{} not found in kitsu!".format(entity_type)) context.data["kitsu_entity"] = kitsu_entity - self.log.debug(f"Collect kitsu {entity_type}: {kitsu_entity}") + self.log.debug("Collect kitsu {}: {}".format(entity_type, kitsu_entity)) if zou_task_data: kitsu_task = gazu.task.get_task(zou_task_data["id"]) From 49af7d9d2dad8c8deec3226cbb50c4a8ecd38694 Mon Sep 17 00:00:00 2001 From: Felix David Date: Fri, 29 Jul 2022 18:47:32 +0200 Subject: [PATCH 113/123] black line length --- .../modules/kitsu/plugins/publish/collect_kitsu_entities.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openpype/modules/kitsu/plugins/publish/collect_kitsu_entities.py b/openpype/modules/kitsu/plugins/publish/collect_kitsu_entities.py index d2a6f3f303..c9e78b59eb 100644 --- a/openpype/modules/kitsu/plugins/publish/collect_kitsu_entities.py +++ b/openpype/modules/kitsu/plugins/publish/collect_kitsu_entities.py @@ -42,7 +42,9 @@ class CollectKitsuEntities(pyblish.api.ContextPlugin): raise AssertionError("{} not found in kitsu!".format(entity_type)) context.data["kitsu_entity"] = kitsu_entity - self.log.debug("Collect kitsu {}: {}".format(entity_type, kitsu_entity)) + self.log.debug( + "Collect kitsu {}: {}".format(entity_type, kitsu_entity) + ) if zou_task_data: kitsu_task = gazu.task.get_task(zou_task_data["id"]) From f9f53fe19c68302dc90362c668bb5bededf93e36 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Fri, 29 Jul 2022 19:08:15 +0200 Subject: [PATCH 114/123] add missing method which was resolved as part of HiddenCreator --- openpype/hosts/traypublisher/api/plugin.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/openpype/hosts/traypublisher/api/plugin.py b/openpype/hosts/traypublisher/api/plugin.py index a0c42a55b1..a3eead51c8 100644 --- a/openpype/hosts/traypublisher/api/plugin.py +++ b/openpype/hosts/traypublisher/api/plugin.py @@ -92,6 +92,21 @@ class TrayPublishCreator(Creator): for instance in instances: self._remove_instance_from_context(instance) + def _store_new_instance(self, new_instance): + """Tray publisher specific method to store instance. + + Instance is stored into "workfile" of traypublisher and also add it + to CreateContext. + + Args: + new_instance (CreatedInstance): Instance that should be stored. + """ + + # Host implementation of storing metadata about instance + HostContext.add_instance(new_instance.data_to_store()) + # Add instance to current context + self._add_instance_to_context(new_instance) + class SettingsCreator(TrayPublishCreator): create_allow_context_change = True From c0de0d5b89654f38a95f779af7b7e450bf58a5ae Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Fri, 29 Jul 2022 19:08:46 +0200 Subject: [PATCH 115/123] use '_store_new_instance' in editorial creators --- .../plugins/create/create_editorial.py | 38 ++++--------------- 1 file changed, 8 insertions(+), 30 deletions(-) diff --git a/openpype/hosts/traypublisher/plugins/create/create_editorial.py b/openpype/hosts/traypublisher/plugins/create/create_editorial.py index 3bc8f89556..7ca68f39e8 100644 --- a/openpype/hosts/traypublisher/plugins/create/create_editorial.py +++ b/openpype/hosts/traypublisher/plugins/create/create_editorial.py @@ -75,20 +75,13 @@ class EditorialClipInstanceCreatorBase(HiddenTrayPublishCreator): self.log.info(f"instance_data: {instance_data}") subset_name = instance_data["subset"] - return self._create_instance(subset_name, instance_data) - - def _create_instance(self, subset_name, data): - # Create new instance - new_instance = CreatedInstance(self.family, subset_name, data, self) + new_instance = CreatedInstance( + self.family, subset_name, instance_data, self + ) self.log.info(f"instance_data: {pformat(new_instance.data)}") - # Host implementation of storing metadata about instance - HostContext.add_instance(new_instance.data_to_store()) - # Add instance to current context - self._add_instance_to_context(new_instance) - - return new_instance + self._store_new_instance(new_instance) def get_instance_attr_defs(self): return [ @@ -299,8 +292,10 @@ or updating already created. Publishing will create OTIO file. "editorialSourcePath": media_path, "otioTimeline": otio.adapters.write_to_string(otio_timeline) }) - - self._create_instance(self.family, subset_name, data) + new_instance = CreatedInstance( + self.family, subset_name, data, self + ) + self._store_new_instance(new_instance) def _create_otio_timeline(self, sequence_path, fps): """Creating otio timeline from sequence path @@ -820,23 +815,6 @@ or updating already created. Publishing will create OTIO file. "Please check names in the input sequence files." ) - def _create_instance(self, family, subset_name, instance_data): - """ CreatedInstance object creator - - Args: - family (str): family name - subset_name (str): subset name - instance_data (dict): instance data - """ - # Create new instance - new_instance = CreatedInstance( - family, subset_name, instance_data, self - ) - # Host implementation of storing metadata about instance - HostContext.add_instance(new_instance.data_to_store()) - # Add instance to current context - self._add_instance_to_context(new_instance) - def get_pre_create_attr_defs(self): """ Creating pre-create attributes at creator plugin. From 441f2269d4a3db6a5b8cbb5023d386eb1fee143d Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Fri, 29 Jul 2022 19:10:13 +0200 Subject: [PATCH 116/123] removed unused import --- openpype/hosts/traypublisher/plugins/create/create_editorial.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/openpype/hosts/traypublisher/plugins/create/create_editorial.py b/openpype/hosts/traypublisher/plugins/create/create_editorial.py index 7ca68f39e8..e9bca79b31 100644 --- a/openpype/hosts/traypublisher/plugins/create/create_editorial.py +++ b/openpype/hosts/traypublisher/plugins/create/create_editorial.py @@ -29,8 +29,6 @@ from openpype.lib import ( UILabelDef ) -from openpype.hosts.traypublisher.api.pipeline import HostContext - CLIP_ATTR_DEFS = [ EnumDef( From a11ef9f346b1b410ae99483dad3bb53cd187b084 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 29 Jul 2022 20:20:20 +0300 Subject: [PATCH 117/123] Append frame reset feature, handle prefix key properly --- openpype/hosts/maya/api/lib_rendersettings.py | 18 +++++++++++++----- .../defaults/project_settings/maya.json | 3 ++- .../schemas/schema_maya_render_settings.json | 7 ++++++- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 8c09175614..7eae5bbbbf 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -66,12 +66,20 @@ class RenderSettings(object): )] except KeyError: aov_separator = "_" + reset_frame = self._project_settings["maya"]["RenderSettings"]["reset_current_frame"] # noqa - prefix = self._image_prefixes[renderer] - prefix = prefix.replace("{aov_separator}", aov_separator) - cmds.setAttr(self._image_prefix_nodes[renderer], - prefix, - type="string") + if reset_frame: + start_frame = cmds.getAttr("defaultRenderGlobals.startFrame") + cmds.currentTime(start_frame, edit=True) + + if renderer in self._image_prefix_nodes: + prefix = self._image_prefixes[renderer] + prefix = prefix.replace("{aov_separator}", aov_separator) + cmds.setAttr(self._image_prefix_nodes[renderer], + prefix, + type="string") + else: + print("{0} isn't a supported renderer to autoset settings.".format(renderer)) # TODO: handle not having res values in the doc width = asset_doc["data"].get("resolutionWidth") diff --git a/openpype/settings/defaults/project_settings/maya.json b/openpype/settings/defaults/project_settings/maya.json index 6e50f13418..5f11072b12 100644 --- a/openpype/settings/defaults/project_settings/maya.json +++ b/openpype/settings/defaults/project_settings/maya.json @@ -35,6 +35,7 @@ "apply_render_settings": true, "default_render_image_folder": "", "aov_separator": "underscore", + "reset_current_frame": false, "arnold_renderer": { "image_prefix": "maya///_", "image_format": "exr", @@ -973,4 +974,4 @@ "ValidateNoAnimation": false } } -} \ No newline at end of file +} diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json index 96b67dc66a..9b6b6f1eed 100644 --- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json @@ -26,6 +26,11 @@ {"dot": ". (dot)"} ] }, + { + "key": "reset_current_frame", + "label": "Reset Current Frame", + "type": "boolean" + }, { "type": "dict", "collapsible": true, @@ -408,4 +413,4 @@ ] } ] -} \ No newline at end of file +} From 9967cd0d0aec49122b24ed7a6b388c832e845ca4 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 29 Jul 2022 20:20:43 +0300 Subject: [PATCH 118/123] Append settings propagation to render instance creator. --- openpype/hosts/maya/plugins/create/create_render.py | 3 ++- vendor/configs/OpenColorIO-Configs | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) create mode 160000 vendor/configs/OpenColorIO-Configs diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index d4ad488b32..395984aee0 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -87,7 +87,8 @@ class CreateRender(plugin.Creator): return self._project_settings = get_project_settings( legacy_io.Session["AVALON_PROJECT"]) - + if self._project_settings["maya"]["RenderSettings"]["apply_render_settings"]: + lib_rendersettings.RenderSettings().set_default_renderer_settings() manager = ModulesManager() self.deadline_module = manager.modules_by_name["deadline"] try: diff --git a/vendor/configs/OpenColorIO-Configs b/vendor/configs/OpenColorIO-Configs new file mode 160000 index 0000000000..0bb079c08b --- /dev/null +++ b/vendor/configs/OpenColorIO-Configs @@ -0,0 +1 @@ +Subproject commit 0bb079c08be410030669cbf5f19ff869b88af953 From 1f126977fa52d55c9874ae87f3f2b7494ae8eeb2 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 29 Jul 2022 21:07:29 +0300 Subject: [PATCH 119/123] Style fixes. --- openpype/hosts/maya/api/lib_rendersettings.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 7eae5bbbbf..6154e1ab89 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -76,10 +76,9 @@ class RenderSettings(object): prefix = self._image_prefixes[renderer] prefix = prefix.replace("{aov_separator}", aov_separator) cmds.setAttr(self._image_prefix_nodes[renderer], - prefix, - type="string") + prefix, type="string") # noqa else: - print("{0} isn't a supported renderer to autoset settings.".format(renderer)) + print("{0} isn't a supported renderer to autoset settings.".format(renderer)) # noqa # TODO: handle not having res values in the doc width = asset_doc["data"].get("resolutionWidth") From 487830fbbbedb783375fd9c9eee58e4c4cfb2841 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Fri, 29 Jul 2022 21:08:11 +0300 Subject: [PATCH 120/123] Style fix --- openpype/hosts/maya/plugins/create/create_render.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/hosts/maya/plugins/create/create_render.py b/openpype/hosts/maya/plugins/create/create_render.py index 395984aee0..fbe670b1ea 100644 --- a/openpype/hosts/maya/plugins/create/create_render.py +++ b/openpype/hosts/maya/plugins/create/create_render.py @@ -87,7 +87,7 @@ class CreateRender(plugin.Creator): return self._project_settings = get_project_settings( legacy_io.Session["AVALON_PROJECT"]) - if self._project_settings["maya"]["RenderSettings"]["apply_render_settings"]: + if self._project_settings["maya"]["RenderSettings"]["apply_render_settings"]: # noqa lib_rendersettings.RenderSettings().set_default_renderer_settings() manager = ModulesManager() self.deadline_module = manager.modules_by_name["deadline"] From a29766385b07ef09837d611b4583583177a57da4 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Mon, 1 Aug 2022 12:52:22 +0200 Subject: [PATCH 121/123] return created instance --- openpype/hosts/traypublisher/plugins/create/create_editorial.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openpype/hosts/traypublisher/plugins/create/create_editorial.py b/openpype/hosts/traypublisher/plugins/create/create_editorial.py index e9bca79b31..28a115629e 100644 --- a/openpype/hosts/traypublisher/plugins/create/create_editorial.py +++ b/openpype/hosts/traypublisher/plugins/create/create_editorial.py @@ -81,6 +81,8 @@ class EditorialClipInstanceCreatorBase(HiddenTrayPublishCreator): self._store_new_instance(new_instance) + return new_instance + def get_instance_attr_defs(self): return [ BoolDef( From 498ee1d85066ca40659b73196f58886682b1e186 Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 1 Aug 2022 15:15:50 +0300 Subject: [PATCH 122/123] Fix schema to store as lists --- .../projects_schema/schemas/schema_maya_render_settings.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json index 9b6b6f1eed..af197604f8 100644 --- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_render_settings.json @@ -275,6 +275,7 @@ }, { "type": "dict-modifiable", + "store_as_list": true, "key": "additional_options", "label": "Additional Renderer Options", "use_label_wrap": true, @@ -403,6 +404,7 @@ }, { "type": "dict-modifiable", + "store_as_list": true, "key": "additional_options", "label": "Additional Renderer Options", "use_label_wrap": true, From 84a6c144c72928d252e04d3c378eef2926e3fdfa Mon Sep 17 00:00:00 2001 From: Allan Ihsan Date: Mon, 1 Aug 2022 15:16:50 +0300 Subject: [PATCH 123/123] Handle additional attributes --- openpype/hosts/maya/api/lib_rendersettings.py | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/openpype/hosts/maya/api/lib_rendersettings.py b/openpype/hosts/maya/api/lib_rendersettings.py index 6154e1ab89..9aea55a03b 100644 --- a/openpype/hosts/maya/api/lib_rendersettings.py +++ b/openpype/hosts/maya/api/lib_rendersettings.py @@ -139,6 +139,7 @@ class RenderSettings(object): # allow fullstops in custom attributes. Then checks for # type of MtoA attribute passed to adjust the `setAttr` # command accordingly. + self._additional_attribs_setter(additional_options) for item in additional_options: attribute, value = item if (cmds.getAttr(str(attribute), type=True)) == "long": @@ -157,18 +158,28 @@ class RenderSettings(object): ["RenderSettings"] ["redshift_renderer"] ) - img_ext = redshift_render_presets.get("image_format") + additional_options = redshift_render_presets["additional_options"] + ext = redshift_render_presets["image_format"] + img_exts = ["iff", "exr", "tif", "png", "tga", "jpg"] + img_ext = img_exts.index(ext) + self._set_global_output_settings() cmds.setAttr("redshiftOptions.imageFormat", img_ext) cmds.setAttr("defaultResolution.width", width) cmds.setAttr("defaultResolution.height", height) + self._additional_attribs_setter(additional_options) def _set_vray_settings(self, aov_separator, width, height): # type: (str, int, int) -> None """Sets important settings for Vray.""" settings = cmds.ls(type="VRaySettingsNode") node = settings[0] if settings else cmds.createNode("VRaySettingsNode") - + vray_render_presets = ( + self._project_settings + ["maya"] + ["RenderSettings"] + ["vray_renderer"] + ) # Set aov separator # First we need to explicitly set the UI items in Render Settings # because that is also what V-Ray updates to when that Render Settings @@ -207,6 +218,10 @@ class RenderSettings(object): cmds.setAttr("{}.width".format(node), width) cmds.setAttr("{}.height".format(node), height) + additional_options = vray_render_presets["additional_options"] + + self._additional_attribs_setter(additional_options) + @staticmethod def _set_global_output_settings(): # enable animation @@ -214,3 +229,14 @@ class RenderSettings(object): cmds.setAttr("defaultRenderGlobals.animation", 1) cmds.setAttr("defaultRenderGlobals.putFrameBeforeExt", 1) cmds.setAttr("defaultRenderGlobals.extensionPadding", 4) + + def _additional_attribs_setter(self, additional_attribs): + print(additional_attribs) + for item in additional_attribs: + attribute, value = item + if (cmds.getAttr(str(attribute), type=True)) == "long": + cmds.setAttr(str(attribute), int(value)) + elif (cmds.getAttr(str(attribute), type=True)) == "bool": + cmds.setAttr(str(attribute), int(value)) # noqa + elif (cmds.getAttr(str(attribute), type=True)) == "string": + cmds.setAttr(str(attribute), str(value), type = "string") # noqa