From 819664cf0561956a729accc531f81dc8b20bbf67 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 19 Jun 2024 22:26:02 +0800 Subject: [PATCH 1/6] add option to stripe shader assignment --- .../maya/client/ayon_maya/plugins/create/create_setdress.py | 3 +++ .../client/ayon_maya/plugins/publish/extract_maya_scene_raw.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/server_addon/maya/client/ayon_maya/plugins/create/create_setdress.py b/server_addon/maya/client/ayon_maya/plugins/create/create_setdress.py index 12532e0724..98d6de867f 100644 --- a/server_addon/maya/client/ayon_maya/plugins/create/create_setdress.py +++ b/server_addon/maya/client/ayon_maya/plugins/create/create_setdress.py @@ -15,5 +15,8 @@ class CreateSetDress(plugin.MayaCreator): return [ BoolDef("exactSetMembersOnly", label="Exact Set Members Only", + default=True), + BoolDef("shader", + label="Include shader", default=True) ] diff --git a/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py b/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py index 6e66353c7a..f0d0c70ae4 100644 --- a/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py +++ b/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py @@ -96,7 +96,7 @@ class ExtractMayaSceneRaw(plugin.MayaExtractorPlugin, AYONPyblishPluginMixin): "preserve_references" ], constructionHistory=True, - shader=True, + shader=True if instance.data.get("shader", False) else False, constraints=True, expressions=True) From 4265c92ceaaa0c0d3d60dd9123a5e792467f1439 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 19 Jun 2024 22:27:15 +0800 Subject: [PATCH 2/6] make sure shader is always true if it is not in the instance.data --- .../client/ayon_maya/plugins/publish/extract_maya_scene_raw.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py b/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py index f0d0c70ae4..fde48afb8f 100644 --- a/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py +++ b/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py @@ -96,7 +96,7 @@ class ExtractMayaSceneRaw(plugin.MayaExtractorPlugin, AYONPyblishPluginMixin): "preserve_references" ], constructionHistory=True, - shader=True if instance.data.get("shader", False) else False, + shader=True if instance.data.get("shader", True) else False, constraints=True, expressions=True) From 8336a0ff1843c14beffe3ff405aa31591f8be8cd Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Fri, 21 Jun 2024 21:42:41 +0800 Subject: [PATCH 3/6] add the setdress setting into ayon setting --- .../ayon_maya/plugins/create/create_setdress.py | 6 ++++-- server_addon/maya/client/ayon_maya/version.py | 2 +- server_addon/maya/package.py | 2 +- server_addon/maya/server/settings/creators.py | 14 ++++++++++++-- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/server_addon/maya/client/ayon_maya/plugins/create/create_setdress.py b/server_addon/maya/client/ayon_maya/plugins/create/create_setdress.py index 98d6de867f..6e1c4e1c4f 100644 --- a/server_addon/maya/client/ayon_maya/plugins/create/create_setdress.py +++ b/server_addon/maya/client/ayon_maya/plugins/create/create_setdress.py @@ -9,14 +9,16 @@ class CreateSetDress(plugin.MayaCreator): label = "Set Dress" product_type = "setdress" icon = "cubes" + exactSetMembersOnly = True + shader = True default_variants = ["Main", "Anim"] def get_instance_attr_defs(self): return [ BoolDef("exactSetMembersOnly", label="Exact Set Members Only", - default=True), + default=self.exactSetMembersOnly), BoolDef("shader", label="Include shader", - default=True) + default=self.shader) ] diff --git a/server_addon/maya/client/ayon_maya/version.py b/server_addon/maya/client/ayon_maya/version.py index 37f9026945..df66e3f399 100644 --- a/server_addon/maya/client/ayon_maya/version.py +++ b/server_addon/maya/client/ayon_maya/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'maya' version.""" -__version__ = "0.2.4" +__version__ = "0.2.5" diff --git a/server_addon/maya/package.py b/server_addon/maya/package.py index 17614ed9c1..3dd863a1b3 100644 --- a/server_addon/maya/package.py +++ b/server_addon/maya/package.py @@ -1,6 +1,6 @@ name = "maya" title = "Maya" -version = "0.2.4" +version = "0.2.5" client_dir = "ayon_maya" ayon_required_addons = { diff --git a/server_addon/maya/server/settings/creators.py b/server_addon/maya/server/settings/creators.py index 5f3b850a1f..ede33b6eec 100644 --- a/server_addon/maya/server/settings/creators.py +++ b/server_addon/maya/server/settings/creators.py @@ -124,6 +124,14 @@ class CreateVrayProxyModel(BaseSettingsModel): default_factory=list, title="Default Products") +class CreateSetDressModel(BaseSettingsModel): + enabled: bool = SettingsField(True) + exactSetMembersOnly: bool = SettingsField(title="Exact Set Members Only") + shader: bool = SettingsField(title="Include shader") + default_variants: list[str] = SettingsField( + default_factory=list, title="Default Products") + + class CreateMultishotLayout(BasicCreatorModel): shotParent: str = SettingsField(title="Shot Parent Folder") groupLoadedAssets: bool = SettingsField(title="Group Loaded Assets") @@ -217,8 +225,8 @@ class CreatorsModel(BaseSettingsModel): default_factory=BasicCreatorModel, title="Create Rig" ) - CreateSetDress: BasicCreatorModel = SettingsField( - default_factory=BasicCreatorModel, + CreateSetDress: CreateSetDressModel = SettingsField( + default_factory=CreateSetDressModel, title="Create Set Dress" ) CreateVrayProxy: CreateVrayProxyModel = SettingsField( @@ -396,6 +404,8 @@ DEFAULT_CREATORS_SETTINGS = { }, "CreateSetDress": { "enabled": True, + "exactSetMembersOnly": True, + "shader": True, "default_variants": [ "Main", "Anim" From f6c7d508d9fe62976f3027bad9311f374b2e1874 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Fri, 21 Jun 2024 21:49:11 +0800 Subject: [PATCH 4/6] add the setdress setting into ayon setting --- .../client/ayon_maya/plugins/publish/extract_maya_scene_raw.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py b/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py index fde48afb8f..2052abe648 100644 --- a/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py +++ b/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py @@ -96,7 +96,7 @@ class ExtractMayaSceneRaw(plugin.MayaExtractorPlugin, AYONPyblishPluginMixin): "preserve_references" ], constructionHistory=True, - shader=True if instance.data.get("shader", True) else False, + shader=instance.data.get("shader", True), constraints=True, expressions=True) From 89eb86a140a8195b45bce495244d7cfd21ebc5f6 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Fri, 21 Jun 2024 22:34:41 +0800 Subject: [PATCH 5/6] add support to assign default shaders to the published setdress --- .../plugins/publish/extract_maya_scene_raw.py | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py b/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py index 2052abe648..7253dc38c2 100644 --- a/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py +++ b/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py @@ -5,7 +5,7 @@ import os from ayon_core.lib import BoolDef from ayon_core.pipeline import AVALON_CONTAINER_ID, AYON_CONTAINER_ID from ayon_core.pipeline.publish import AYONPyblishPluginMixin -from ayon_maya.api.lib import maintained_selection +from ayon_maya.api.lib import maintained_selection, shader from ayon_maya.api import plugin from maya import cmds @@ -88,17 +88,30 @@ class ExtractMayaSceneRaw(plugin.MayaExtractorPlugin, AYONPyblishPluginMixin): ) with maintained_selection(): cmds.select(selection, noExpand=True) - cmds.file(path, - force=True, - typ="mayaAscii" if self.scene_type == "ma" else "mayaBinary", # noqa: E501 - exportSelected=True, - preserveReferences=attribute_values[ - "preserve_references" - ], - constructionHistory=True, - shader=instance.data.get("shader", True), - constraints=True, - expressions=True) + if instance.data.get("shader", True): + with shader(selection, shadingEngine="initialShadingGroup"): + cmds.file(path, + force=True, + typ="mayaAscii" if self.scene_type == "ma" else "mayaBinary", # noqa: E501 + exportSelected=True, + preserveReferences=attribute_values[ + "preserve_references" + ], + constructionHistory=True, + shader=instance.data.get("shader", True), + expressions=True) + else: + cmds.file(path, + force=True, + typ="mayaAscii" if self.scene_type == "ma" else "mayaBinary", # noqa: E501 + exportSelected=True, + preserveReferences=attribute_values[ + "preserve_references" + ], + constructionHistory=True, + shader=True, + constraints=True, + expressions=True) if "representations" not in instance.data: instance.data["representations"] = [] From 9b02eed4c6c4620f3b1c08944c0e41f4b8e0fe89 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Fri, 21 Jun 2024 23:08:30 +0800 Subject: [PATCH 6/6] add exit stack contextlib for default shader assignment for meshes in the published scene --- .../plugins/publish/extract_maya_scene_raw.py | 29 +++++++------------ 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py b/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py index 7253dc38c2..047b7f6e6c 100644 --- a/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py +++ b/server_addon/maya/client/ayon_maya/plugins/publish/extract_maya_scene_raw.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Extract data as Maya scene (raw).""" import os - +import contextlib from ayon_core.lib import BoolDef from ayon_core.pipeline import AVALON_CONTAINER_ID, AYON_CONTAINER_ID from ayon_core.pipeline.publish import AYONPyblishPluginMixin @@ -88,28 +88,19 @@ class ExtractMayaSceneRaw(plugin.MayaExtractorPlugin, AYONPyblishPluginMixin): ) with maintained_selection(): cmds.select(selection, noExpand=True) - if instance.data.get("shader", True): - with shader(selection, shadingEngine="initialShadingGroup"): - cmds.file(path, - force=True, - typ="mayaAscii" if self.scene_type == "ma" else "mayaBinary", # noqa: E501 - exportSelected=True, - preserveReferences=attribute_values[ - "preserve_references" - ], - constructionHistory=True, - shader=instance.data.get("shader", True), - expressions=True) - else: + with contextlib.ExitStack() as stack: + if not instance.data.get("shader", True): + # Fix bug where export without shader may import the geometry 'green' + # due to the lack of any shader on import. + stack.enter_context(shader(selection, shadingEngine="initialShadingGroup")) + cmds.file(path, force=True, - typ="mayaAscii" if self.scene_type == "ma" else "mayaBinary", # noqa: E501 + typ="mayaAscii" if self.scene_type == "ma" else "mayaBinary", exportSelected=True, - preserveReferences=attribute_values[ - "preserve_references" - ], + preserveReferences=attribute_values["preserve_references"], constructionHistory=True, - shader=True, + shader=instance.data.get("shader", True), constraints=True, expressions=True)