def process(self, instance): import os from maya import cmds from pyblish_starter import api dirname = api.format_staging_dir( root=instance.context.data["workspaceDir"], name=instance.data["name"]) try: os.makedirs(dirname) except OSError: pass filename = "source.ma" path = os.path.join(dirname, filename) # Perform extraction self.log.info("Performing extraction..") cmds.file(path, force=True, typ="mayaAscii", exportAll=True, preserveReferences=False, constructionHistory=True) # Store reference for integration if "files" not in instance.data: instance.data["files"] = list() instance.data["files"].append(filename) instance.data["stagingDir"] = dirname self.log.info("Extracted {instance} to {path}".format(**locals()))
def process(self, instance): import os from maya import cmds from mindbender import api from pyblish_maya import maintained_selection dirname = api.format_staging_dir( root=instance.context.data["workspaceDir"], time=instance.context.data["time"], name=instance.data["name"]) try: os.makedirs(dirname) except OSError: pass filename = "{name}.ma".format(**instance.data) path = os.path.join(dirname, filename) # Perform extraction self.log.info("Performing extraction..") with maintained_selection(): self.log.info("Extracting %s" % str(list(instance))) cmds.select(instance, noExpand=True) cmds.file( path, force=True, typ="mayaAscii", exportSelected=True, preserveReferences=False, # Shader assignment is the responsibility of # riggers, for animators, and lookdev, for rendering. shader=False, # Construction history inherited from collection # This enables a selective export of nodes relevant # to this particular plug-in. constructionHistory=False) # Store reference for integration if "files" not in instance.data: instance.data["files"] = list() instance.data["files"].append(filename) instance.data["stagingDir"] = dirname self.log.info("Extracted {instance} to {path}".format(**locals()))
def process(self, instance): import os from maya import cmds from mindbender import api, maya self.log.debug("Loading plug-in..") cmds.loadPlugin("AbcExport.mll", quiet=True) self.log.info("Extracting animation..") dirname = api.format_staging_dir( root=instance.context.data["workspaceDir"], time=instance.context.data["time"], name=instance.data["name"]) try: os.makedirs(dirname) except OSError: pass filename = "{name}.abc".format(**instance.data) maya.export_alembic( nodes=instance, file=os.path.join(dirname, filename).replace("\\", "/"), frame_range=(instance.data["startFrame"], instance.data["endFrame"]), # Include UVs write_uv=True, # Include Visibility write_visibility=True, # Include all attributes prefixed with this attribute_prefix="mb") # Store reference for integration if "files" not in instance.data: instance.data["files"] = list() instance.data["files"].append(filename) instance.data["stagingDir"] = dirname self.log.info("Extracted {instance} to {dirname}".format(**locals()))
def process(self, instance): import os from maya import cmds from pyblish_starter import api, maya self.log.debug("Loading plug-in..") cmds.loadPlugin("AbcExport.mll", quiet=True) self.log.info("Extracting animation..") dirname = api.format_staging_dir( root=instance.context.data["workspaceDir"], name=instance.data["name"]) try: os.makedirs(dirname) except OSError: pass filename = "{name}.abc".format(**instance.data) maya.export_alembic(nodes=instance, file=os.path.join(dirname, filename).replace("\\", "/"), frame_range=(cmds.playbackOptions(query=True, ast=True), cmds.playbackOptions(query=True, aet=True)), uv_write=True) # Store reference for integration if "files" not in instance.data: instance.data["files"] = list() instance.data["files"].append(filename) instance.data["stagingDir"] = dirname self.log.info("Extracted {instance} to {dirname}".format(**locals()))
def process(self, instance): import os import contextlib from mindbender import api from pyblish_maya import maintained_selection from maya import cmds @contextlib.contextmanager def sliced_connections(): connections = list() try: # Slice connection from A -/> B for input_ in cmds.sets("in_SET", query=True): shape = cmds.listRelatives(input_, shapes=True)[0] dst = shape + ".inMesh" for src in cmds.listConnections(dst, plugs=True): pair = src, dst cmds.disconnectAttr(*pair) connections.append(pair) yield finally: # Restore connection for src, dst in connections: cmds.connectAttr(src, dst, force=True) dirname = api.format_staging_dir( root=instance.context.data["workspaceDir"], time=instance.context.data["time"], name=instance.data["name"]) try: os.makedirs(dirname) except OSError: pass self.log.info("Extracting lookdev..") filename = "{name}.ma".format(**instance.data) path = os.path.join(dirname, filename) with contextlib.nested(sliced_connections(), maintained_selection()): # Export cmds.select(instance, noExpand=True) cmds.file( path, force=True, type="mayaAscii", exportSelected=True, preserveReferences=False, constructionHistory=True, ) # Store reference for integration if "files" not in instance.data: instance.data["files"] = list() instance.data["files"].append(filename) instance.data["stagingDir"] = dirname self.log.info("Extracted {instance} to {path}".format(**locals()))
def process(self, instance): import os import json from mindbender import api from mindbender.maya import lib from pyblish_maya import maintained_selection from maya import cmds dirname = api.format_staging_dir( root=instance.context.data["workspaceDir"], time=instance.context.data["time"], name=instance.data["name"]) try: os.makedirs(dirname) except OSError: pass filename = "{name}.json".format(**instance.data) path = os.path.join(dirname, filename) self.log.info("Serialising shaders..") relationships = lib.serialise_shaders(instance) self.log.info("Extracting serialisation..") with open(path, "w") as f: json.dump( relationships, f, # This makes the output human-readable, # by padding lines to look visually pleasing. indent=4 ) # Store reference for integration if "files" not in instance.data: instance.data["files"] = list() instance.data["files"].append(filename) # Write individual shaders # TODO(marcus): How about exporting 1 scene, and # maintaining a reference to the shader node name, # as opposed to the file? self.log.info("Extracting shaders..") filename = "{name}.ma".format(**instance.data) path = os.path.join(dirname, filename) with maintained_selection(): cmds.select(relationships.keys(), replace=True, noExpand=True) cmds.file(path, force=True, options="v=0;", type="mayaAscii", preserveReferences=False, exportSelected=True, constructionHistory=False) instance.data["files"].append(filename) instance.data["stagingDir"] = dirname self.log.info("Extracted {instance} to {path}".format(**locals()))