diff --git a/colorbleed/filetypes.py b/colorbleed/filetypes.py new file mode 100644 index 0000000000..fbefeff9be --- /dev/null +++ b/colorbleed/filetypes.py @@ -0,0 +1,2 @@ +accepted_images_types = [".png", ".jpg", ".tga", ".tiff"] +ignored_images_types = [".pds"] diff --git a/colorbleed/plugins/maya/create/colorbleed_texture.py b/colorbleed/plugins/maya/create/colorbleed_texture.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/colorbleed/plugins/maya/publish/_debug.py b/colorbleed/plugins/maya/publish/_debug.py index 7919b1fda1..ef40126be1 100644 --- a/colorbleed/plugins/maya/publish/_debug.py +++ b/colorbleed/plugins/maya/publish/_debug.py @@ -13,7 +13,3 @@ class DebugPlugin(pyblish.api.InstancePlugin): self.log("\n\n----------------------") self.log("Instance") pprint.pprint(instance) - - self.log("\n\n----------------------") - self.log("Instance.data") - pprint.pprint(instance.data) diff --git a/colorbleed/plugins/maya/publish/collect_look_textures.py b/colorbleed/plugins/maya/publish/collect_textures.py similarity index 94% rename from colorbleed/plugins/maya/publish/collect_look_textures.py rename to colorbleed/plugins/maya/publish/collect_textures.py index a6636b24a2..a55e274da0 100644 --- a/colorbleed/plugins/maya/publish/collect_look_textures.py +++ b/colorbleed/plugins/maya/publish/collect_textures.py @@ -2,7 +2,7 @@ from maya import cmds import pyblish.api -import cb.utils.maya.shaders as shader +import cb.utils.maya.shaders as shaders TAGS = ["maya", "attribute", "look"] TAGS_LOOKUP = set(TAGS) @@ -74,7 +74,7 @@ class CollectLookTextures(pyblish.api.InstancePlugin): order = pyblish.api.CollectorOrder + 0.498 label = 'Textures' - families = ["colorbleed.look"] + families = ["colorbleed.texture"] actions = [SelectTextureNodesAction] def process(self, instance): @@ -134,19 +134,20 @@ class CollectLookTextures(pyblish.api.InstancePlugin): # paths as the computed patterns source = computed_source.replace("\\", "/") - files = shader.get_file_node_files(node) + files = shaders.get_file_node_files(node) if not files: self.log.error("File node does not have a texture set: " "{0}".format(node)) return # Define the resource + # todo: find a way to generate the destination for the publisher resource = {"tags": TAGS[:], "node": node, "attribute": attribute, "source": source, # required for resources "files": files, # required for resources - "subfolder": "textures" # optional for resources + "subfolder": "textures", # optional for resources } return resource diff --git a/colorbleed/plugins/maya/publish/extract_textures.py b/colorbleed/plugins/maya/publish/extract_textures.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/colorbleed/plugins/publish/pre_integrate.py b/colorbleed/plugins/publish/pre_integrate.py new file mode 100644 index 0000000000..cb5eaa0656 --- /dev/null +++ b/colorbleed/plugins/publish/pre_integrate.py @@ -0,0 +1,68 @@ +import os +import logging +import shutil + +import maya.cmds as cmds + +import pyblish.api + +log = logging.getLogger(__name__) + + +class PostIntegrateAsset(pyblish.api.InstancePlugin): + """Resolve any dependency issies + + This plug-in resolves any paths which, if not updated might break + the published file. + + The order of families is important, when working with lookdev you want to + first publish the texture, update the texture paths in the nodes and then + publish the shading network. Same goes for file dependent assets. + """ + + label = "Post Intergrate Asset" + order = pyblish.api.IntegratorOrder + 0.1 + families = ["colorbleed.lookdev", "colorbleed.texture"] + + def process(self, instance): + + # get needed variables + version_folder = instance.data["versionFolder"] + family = instance.data["family"] + resources = instance.data("resources", []) + + self.log.info("Running post process for {}".format(instance.name)) + + if family == "colorbleed.texture": + texture_folder = os.path.join(version_folder, "textures") + self.remap_resource_nodes(resources, folder=texture_folder) + + elif family == "colorbleed.lookdev": + self.remap_resource_nodes(resources) + + # self.log.info("Removing temporary files and folders ...") + # if passed: + # stagingdir = instance.data["stagingDir"] + # shutil.rmtree(stagingdir) + + def remap_resource_nodes(self, resources, folder=None): + + self.log.info("Updating resource nodes ...") + for resource in resources: + source = resource["source"] + if folder: + fname = os.path.basename(source) + fpath = os.path.join(folder, fname) + else: + fpath = source + + node_attr = resource["attribute"] + print("UPDATING {} -> {}".format(node_attr, fpath)) + cmds.setAttr(node_attr, fpath, type="string") + + self.log.info("Saving file ...") + + cmds.file(save=True, type="mayaAscii") + + def remap_yeti_resource_nodes(self, node,): + pass