Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import maya.cmds as cmds
- def maya2rs(*Args):
- selList = cmds.ls(sl=1)
- mtlSelList = []
- for sel in selList:
- cmds.select(cl=1)
- if cmds.objectType(sel)=="transform":
- cmds.select(sel)
- cmds.hyperShade(smn=1)
- for selMtl in cmds.ls(sl=1):
- if selMtl not in mtlSelList:
- mtlSelList.append(selMtl)
- else:
- mtlSelList.append(sel)
- mtlMayaList = []
- createdMtls = []
- deletedMtls = []
- duplicateMtls = []
- skippedMtls = []
- reusedMtls = []
- for mtlSel in mtlSelList:
- if cmds.objectType(mtlSel) in ["phong", "blinn", "lambert"]:
- mtlMayaList.append(mtlSel)
- for mtlMaya in mtlMayaList:
- if (mtlMaya not in ["lambert1","shaderGlow1", "particleCloud1"]) and (cmds.listConnections(mtlMaya + ".color", d=1)) and ("VP_" not in mtlMaya):
- inputFile = cmds.listConnections(mtlMaya + ".color", d=1)[0]
- pathFile = cmds.getAttr(inputFile + ".fileTextureName")
- texDiffuse = (pathFile.split("/")[-1].split("\\")[-1].split(".")[0]).lower()
- mtl = texDiffuse + "_Mtl"
- if "_Mtl" in mtl:
- spriteMtl = mtl.replace("_Mtl", "_SpriteMtl")
- else:
- spriteMtl = mtl + "_SpriteMtl"
- remapSpec = "remapSpec_" + texDiffuse
- remapGloss = "remapGloss_" + texDiffuse
- remapMetal01 = "remapMetal01_" + texDiffuse
- remapMetal02 = "remapMetal02_" + texDiffuse
- remapList = [remapSpec, remapGloss, remapMetal01]
- if cmds.objExists(mtl)==False:
- cmds.shadingNode("RedshiftMaterial",n=mtl,asShader=1)
- createdMtls.append(mtl)
- for remap in remapList:
- cmds.shadingNode("remapHsv",n=remap,asUtility=1)
- cmds.connectAttr(inputFile + ".outColor", remap + ".color")
- cmds.shadingNode("remapHsv",n=remapMetal02,asUtility=1)
- cmds.connectAttr(remapMetal01 + ".outColor.outColorR", remapMetal02 + ".color.colorR")
- cmds.connectAttr(remapMetal01 + ".outColor.outColorR", remapMetal02 + ".color.colorG")
- cmds.connectAttr(remapMetal01 + ".outColor.outColorR", remapMetal02 + ".color.colorB")
- cmds.connectAttr(remapSpec + ".outColor", mtl + ".refl_color")
- cmds.connectAttr(remapGloss + ".outColor.outColorR", mtl + ".refl_roughness")
- cmds.connectAttr(remapMetal02 + ".outColor.outColorR", mtl + ".refl_metalness")
- cmds.connectAttr(inputFile + ".outColor", mtl + ".diffuse_color")
- cmds.setAttr(mtl + ".refl_weight", 0)
- cmds.setAttr(mtl + ".refl_samples", 128)
- cmds.setAttr(mtl + ".refl_ior", 1.4)
- else:
- if cmds.objExists(spriteMtl)!=True:
- print mtl + " already exists. Reusing it."
- duplicateMtls.append(mtlMaya)
- reusedMtls.append(mtl)
- if cmds.objExists(spriteMtl):
- cmds.select(mtlMaya)
- cmds.hyperShade(mtlMaya, objects="")
- cmds.hyperShade(assign=spriteMtl)
- print "Found Sprite " + spriteMtl + ". Reusing it."
- reusedMtls.append(spriteMtl)
- else:
- cmds.select(mtlMaya)
- cmds.hyperShade(mtlMaya, objects="")
- cmds.hyperShade(assign=mtl)
- cmds.delete(mtlMaya)
- deletedMtls.append(mtlMaya)
- elif "VP_" in mtlMaya:
- print "Skipping " + mtlMaya + " as it's a display material."
- skippedMtls.append(mtlMaya)
- elif (cmds.listConnections(mtlMaya + ".color", d=1)!=True) and (mtlMaya not in ["lambert1","shaderGlow1", "particleCloud1"]):
- print "Skipping " + mtlMaya + ". Couldn't find textures on it."
- skippedMtls.append(mtlMaya)
- elif mtlMaya in ["lambert1","shaderGlow1", "particleCloud1"]:
- print "Skipping " + mtlMaya + ". It's a Maya default shader."
- skippedMtls.append(mtlMaya)
- else:
- print "Skipping " + mtlMaya + ". Script is not set up for this shader type."
- skippedMtls.append(mtlMaya)
- cmds.select(cl=1)
- print "/"*40
- print "// All done!"
- print "// Created " + str(len(createdMtls)) + (" materials: " if len(createdMtls)>1 or len(createdMtls)==0 else " material: ") + str([x.encode('ascii') for x in createdMtls]).replace("[","").replace("]","")
- print "// Reused " + str(len(reusedMtls)) + (" materials: " if len(reusedMtls)>1 or len(reusedMtls)==0 else " material: ") + str([x.encode('ascii') for x in reusedMtls]).replace("[","").replace("]","")
- print "// Deleted " + str(len(deletedMtls)) + (" materials: " if len(deletedMtls)>1 or len(deletedMtls)==0 else " material: ") + str([x.encode('ascii') for x in deletedMtls]).replace("[","").replace("]","")
- print "// Skipped " + str(len(skippedMtls)) + (" materials: " if len(skippedMtls)>1 or len(skippedMtls)==0 else " material: ") + str([x.encode('ascii') for x in skippedMtls]).replace("[","").replace("]","")
- print "// " + str(len(duplicateMtls)) + (" duplicates " if len(duplicateMtls)>=1 or len(duplicateMtls)==0 else " duplicate ") + "found: " + str([x.encode('ascii') for x in duplicateMtls]).replace("[","").replace("]","")
- print "/"*40
- #####
- def alphaToSprite(*Args):
- selList = cmds.ls(sl=1)
- mtlSelList = []
- for sel in selList:
- cmds.select(cl=1)
- if cmds.objectType(sel)=="transform":
- cmds.select(sel)
- cmds.hyperShade(smn=1)
- for selMtl in cmds.ls(sl=1):
- if selMtl not in mtlSelList:
- mtlSelList.append(selMtl)
- else:
- mtlSelList.append(sel)
- createdMtls = []
- skippedMtls = []
- warningList = []
- mtlValidList = []
- for mtlSel in mtlSelList:
- if cmds.objectType(mtlSel) in ["RedshiftArchitectural", "RedshiftMaterial"]:
- if "_Mtl" in mtlSel:
- spriteMtl = mtlSel.replace("_Mtl", "_SpriteMtl")
- else:
- spriteMtl = mtlSel + "_SpriteMtl"
- if cmds.objExists(spriteMtl)==False:
- mtlValidList.append(mtlSel)
- else:
- print "Skipping " + mtlSel + ". Selection must be either rsArchitectural or rsMaterial shader."
- skippedMtls.append(mtlSel)
- else:
- print "Skipping " + mtlSel + ". Selection must be either rsArchitectural or rsMaterial shader."
- skippedMtls.append(mtlSel)
- for mtlValid in mtlValidList:
- if cmds.objectType(mtlValid) == "RedshiftMaterial":
- diffInput = ".diffuse_color"
- else:
- diffInput = "..diffuse"
- inputFile = cmds.listConnections(mtlValid + diffInput, d=1)[0]
- pathFile = cmds.getAttr(inputFile + ".fileTextureName")
- if "_Mtl" in mtlValid:
- spriteMtl = mtlValid.replace("_Mtl", "_SpriteMtl")
- else:
- spriteMtl = mtlValid + "_SpriteMtl"
- vpMtl = "VP_" + mtlValid
- cmds.shadingNode("RedshiftSprite", asShader=1, n=spriteMtl)
- createdMtls.append(spriteMtl)
- cmds.connectAttr(mtlValid + ".outColor", spriteMtl + ".input")
- cmds.setAttr(spriteMtl + ".tex0", pathFile, type="string")
- if cmds.getAttr(inputFile + ".fileHasAlpha"):
- cmds.setAttr(spriteMtl + ".mode", 1)
- else:
- cmds.setAttr(spriteMtl + ".mode", 0)
- warningList.append(mtlValid)
- cmds.select(mtlValid)
- cmds.hyperShade(objects="")
- cmds.hyperShade(assign=spriteMtl)
- spriteSG = cmds.listConnections(spriteMtl + ".outColor")[0]
- if cmds.objExists(vpMtl):
- print vpMtl + " found. Reusing."
- else:
- cmds.shadingNode("lambert", asShader=1, n=vpMtl)
- cmds.connectAttr(inputFile + ".outColor", vpMtl + ".color")
- cmds.connectAttr(inputFile + ".outTransparency", vpMtl + ".transparency")
- cmds.connectAttr(spriteMtl + ".outColor", spriteSG + ".rsSurfaceShader")
- cmds.connectAttr(vpMtl + ".outColor", spriteSG + ".surfaceShader", f=1)
- cmds.select(cl=1)
- print "/"*40
- print "// All done!"
- print "// Created " + str(len(createdMtls)) + (" materials: " if len(createdMtls)>1 or len(createdMtls)==0 else " material: ") + str([x.encode('ascii') for x in createdMtls]).replace("[","").replace("]","")
- print "// Skipped " + str(len(skippedMtls)) + (" materials: " if len(skippedMtls)>1 or len(skippedMtls)==0 else " material: ") + str([x.encode('ascii') for x in skippedMtls]).replace("[","").replace("]","")
- if warningList:
- print "// Warning! The following SpriteMtl's maps don't have an alpha channel: " + str([x.encode('ascii') for x in warningList]).replace("[","").replace("]","")
- print "/"*40
- #####
- def alphaToSpecStuff(*Args):
- selList = cmds.ls(sl=1)
- mtlSelList = []
- for sel in selList:
- cmds.select(cl=1)
- if cmds.objectType(sel)=="transform":
- cmds.select(sel)
- cmds.hyperShade(smn=1)
- for selMtl in cmds.ls(sl=1):
- if selMtl not in mtlSelList:
- mtlSelList.append(selMtl)
- else:
- mtlSelList.append(sel)
- mtlValidList = []
- createdMtls = []
- skippedMtls = []
- print mtlSelList
- for mtlSel in mtlSelList:
- if cmds.objectType(mtlSel) == "RedshiftMaterial":
- mtlValidList.append(mtlSel)
- elif cmds.objectType(mtlSel) == "RedshiftSprite":
- spriteInput= cmds.listConnections(mtlSel + ".input", d=1)[0]
- if spriteInput and cmds.objectType(spriteInput) == "RedshiftMaterial":
- mtlValidList.append(spriteInput)
- else:
- print mtlSel + " is a SpriteMtl, but had no valid input. Skipping."
- skippedMtls.append(mtlSel)
- else:
- skippedMtls.append(mtlSel)
- for mtl in mtlValidList:
- inputFile = cmds.listConnections(mtl + ".diffuse_color", d=1)[0]
- pathFile = cmds.getAttr(inputFile + ".fileTextureName")
- texDiffuse = (pathFile.split("/")[-1].split("\\")[-1].split(".")[0]).lower()
- if (cmds.objectType(mtl)=="RedshiftMaterial") and (cmds.objExists("remapSpec_" + texDiffuse)) and (cmds.getAttr(inputFile+".fileHasAlpha")):
- inputFile = cmds.listConnections(mtl + ".diffuse_color", d=1)[0]
- pathFile = cmds.getAttr(inputFile + ".fileTextureName")
- texDiffuse = (pathFile.split("/")[-1].split("\\")[-1].split(".")[0]).lower()
- remapSpec = "remapSpec_" + texDiffuse
- remapGloss = "remapGloss_" + texDiffuse
- remapMetal01 = "remapMetal01_" + texDiffuse
- for remap in [remapSpec, remapGloss, remapMetal01]:
- try:
- cmds.disconnectAttr(inputFile + ".outColor", remap + ".color")
- cmds.connectAttr(inputFile + ".outAlpha", remap + ".color.colorR", f=1)
- cmds.connectAttr(inputFile + ".outAlpha", remap + ".color.colorG", f=1)
- cmds.connectAttr(inputFile + ".outAlpha", remap + ".color.colorB", f=1)
- if mtl not in createdMtls:
- createdMtls.append(mtl)
- except:
- if mtl not in skippedMtls:
- skippedMtls.append(mtl)
- elif cmds.getAttr((cmds.listConnections(mtl + ".diffuse_color", d=1)[0])+".fileHasAlpha")==False:
- print (cmds.listConnections(mtl + ".diffuse_color", d=1)[0]) + " doesn't have an alpha channel. Skipping."
- skippedMtls.append(mtl)
- cmds.select(cl=1)
- print "/"*40
- print "// All done!"
- print "// Processed " + str(len(createdMtls)) + (" materials: " if len(createdMtls)>1 or len(createdMtls)==0 else " material: ") + str([x.encode('ascii') for x in createdMtls]).replace("[","").replace("]","")
- print "// Skipped " + str(len(skippedMtls)) + (" materials: " if len(skippedMtls)>1 or len(createdMtls)==0 else " material: ") + str([x.encode('ascii') for x in skippedMtls]).replace("[","").replace("]","")
- print "/"*40
- #####
- def alphaToTransp(*Args):
- selList = cmds.ls(sl=1)
- mtlSelList = []
- for sel in selList:
- cmds.select(cl=1)
- if cmds.objectType(sel)=="transform":
- cmds.select(sel)
- cmds.hyperShade(smn=1)
- for selMtl in cmds.ls(sl=1):
- if selMtl not in mtlSelList:
- mtlSelList.append(selMtl)
- else:
- mtlSelList.append(sel)
- mtlValidList = []
- createdMtls = []
- skippedMtls = []
- for mtlSel in mtlSelList:
- if cmds.objectType(mtlSel) == "RedshiftMaterial":
- mtlValidList.append(mtlSel)
- elif cmds.objectType(mtlSel) == "RedshiftSprite":
- spriteInput= cmds.listConnections(mtlSel + ".input", d=1)[0]
- if spriteInput and cmds.objectType(spriteInput) == "RedshiftMaterial":
- mtlValidList.append(spriteInput)
- else:
- print mtlSel + " is a SpriteMtl, but had no valid input. Skipping."
- skippedMtls.append(mtlSel)
- else:
- skippedMtls.append(mtlSel)
- for mtl in mtlValidList:
- inputFile = cmds.listConnections(mtl + ".diffuse_color", d=1)[0]
- pathFile = cmds.getAttr(inputFile + ".fileTextureName")
- texDiffuse = (pathFile.split("/")[-1].split("\\")[-1].split(".")[0]).lower()
- vpMtl = "VP_" + mtl
- if (cmds.getAttr(inputFile+".fileHasAlpha") and not (cmds.listConnections(mtl + ".opacity_color", d=1))):
- cmds.connectAttr(inputFile + ".outTransparency", mtl + ".opacity_color")
- createdMtls.append(mtl)
- elif cmds.listConnections(mtl + ".opacity_color", d=1):
- print "Transparency already applied. Skipping."
- skippedMtls.append(mtl)
- elif cmds.getAttr(inputFile+".fileHasAlpha")!=True:
- print "No Alpha found. Skipping."
- skippedMtls.append(mtl)
- if cmds.objExists(vpMtl)!=True:
- mtlSG = cmds.listConnections(mtl + ".outColor")[0]
- cmds.shadingNode("lambert", asShader=1, n=vpMtl)
- cmds.connectAttr(inputFile + ".outColor", vpMtl + ".color")
- cmds.connectAttr(inputFile + ".outTransparency", vpMtl + ".transparency")
- cmds.connectAttr(mtl + ".outColor", mtlSG + ".rsSurfaceShader")
- cmds.connectAttr(vpMtl + ".outColor", mtlSG + ".surfaceShader", f=1)
- cmds.select(cl=1)
- print "/"*40
- print "// All done!"
- print "// Processed " + str(len(createdMtls)) + (" materials: " if len(createdMtls)>1 or len(createdMtls)==0 else " material: ") + str([x.encode('ascii') for x in createdMtls]).replace("[","").replace("]","")
- print "// Skipped " + str(len(skippedMtls)) + (" materials: " if len(skippedMtls)>1 or len(createdMtls)==0 else " material: ") + str([x.encode('ascii') for x in skippedMtls]).replace("[","").replace("]","")
- print "/"*40
- #####
- def DrawUI():
- windowID = "maya2rs"
- if cmds.window(windowID, exists=True):
- cmds.deleteUI(windowID)
- cmds.window(windowID, mnb=0, mxb=0, t="Maya to Redshift")
- cmds.window(windowID, e=1, wh=(215,20), rtf=1, s=0)
- cmds.columnLayout()
- cmds.separator(h=4, style="none")
- cmds.rowColumnLayout(nc=5,cw=[(1,5),(2,100),(3,5),(4,100),(5,5)])
- cmds.separator(h=5, style="none")
- cmds.button(l="maya2rs", c=maya2rs)
- cmds.separator(h=5, style="none")
- cmds.button(l="alphaToSprite", c=alphaToSprite)
- cmds.separator(h=5, style="none")
- cmds.setParent(top=1)
- cmds.separator(h=4, style="none")
- cmds.rowColumnLayout(nc=5,cw=[(1,5),(2,100),(3,5),(4,100),(5,5)])
- cmds.separator(h=5, style="none")
- cmds.button(l="alphaToSpecStuff", c=alphaToSpecStuff)
- cmds.separator(h=5, style="none")
- cmds.button(l="alphaToTransp", c=alphaToTransp)
- cmds.separator(h=5, style="none")
- cmds.separator(h=5, style="none")
- cmds.showWindow()
- DrawUI()
Advertisement
Add Comment
Please, Sign In to add comment