Guest User

Untitled

a guest
Feb 23rd, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.18 KB | None | 0 0
  1. import maya.cmds as cmds
  2.  
  3. def maya2rs(*Args):
  4. selList = cmds.ls(sl=1)
  5. mtlSelList = []
  6.  
  7. for sel in selList:
  8. cmds.select(cl=1)
  9. if cmds.objectType(sel)=="transform":
  10. cmds.select(sel)
  11. cmds.hyperShade(smn=1)
  12. for selMtl in cmds.ls(sl=1):
  13. if selMtl not in mtlSelList:
  14. mtlSelList.append(selMtl)
  15. else:
  16. mtlSelList.append(sel)
  17. mtlMayaList = []
  18. createdMtls = []
  19. deletedMtls = []
  20. duplicateMtls = []
  21. skippedMtls = []
  22. reusedMtls = []
  23.  
  24. for mtlSel in mtlSelList:
  25. if cmds.objectType(mtlSel) in ["phong", "blinn", "lambert"]:
  26. mtlMayaList.append(mtlSel)
  27.  
  28. for mtlMaya in mtlMayaList:
  29. if (mtlMaya not in ["lambert1","shaderGlow1", "particleCloud1"]) and (cmds.listConnections(mtlMaya + ".color", d=1)) and ("VP_" not in mtlMaya):
  30. inputFile = cmds.listConnections(mtlMaya + ".color", d=1)[0]
  31. pathFile = cmds.getAttr(inputFile + ".fileTextureName")
  32. texDiffuse = (pathFile.split("/")[-1].split("\\")[-1].split(".")[0]).lower()
  33. mtl = texDiffuse + "_Mtl"
  34. if "_Mtl" in mtl:
  35. spriteMtl = mtl.replace("_Mtl", "_SpriteMtl")
  36. else:
  37. spriteMtl = mtl + "_SpriteMtl"
  38. remapSpec = "remapSpec_" + texDiffuse
  39. remapGloss = "remapGloss_" + texDiffuse
  40. remapMetal01 = "remapMetal01_" + texDiffuse
  41. remapMetal02 = "remapMetal02_" + texDiffuse
  42. remapList = [remapSpec, remapGloss, remapMetal01]
  43. if cmds.objExists(mtl)==False:
  44. cmds.shadingNode("RedshiftMaterial",n=mtl,asShader=1)
  45. createdMtls.append(mtl)
  46. for remap in remapList:
  47. cmds.shadingNode("remapHsv",n=remap,asUtility=1)
  48. cmds.connectAttr(inputFile + ".outColor", remap + ".color")
  49. cmds.shadingNode("remapHsv",n=remapMetal02,asUtility=1)
  50. cmds.connectAttr(remapMetal01 + ".outColor.outColorR", remapMetal02 + ".color.colorR")
  51. cmds.connectAttr(remapMetal01 + ".outColor.outColorR", remapMetal02 + ".color.colorG")
  52. cmds.connectAttr(remapMetal01 + ".outColor.outColorR", remapMetal02 + ".color.colorB")
  53. cmds.connectAttr(remapSpec + ".outColor", mtl + ".refl_color")
  54. cmds.connectAttr(remapGloss + ".outColor.outColorR", mtl + ".refl_roughness")
  55. cmds.connectAttr(remapMetal02 + ".outColor.outColorR", mtl + ".refl_metalness")
  56. cmds.connectAttr(inputFile + ".outColor", mtl + ".diffuse_color")
  57. cmds.setAttr(mtl + ".refl_weight", 0)
  58. cmds.setAttr(mtl + ".refl_samples", 128)
  59. cmds.setAttr(mtl + ".refl_ior", 1.4)
  60. else:
  61. if cmds.objExists(spriteMtl)!=True:
  62. print mtl + " already exists. Reusing it."
  63. duplicateMtls.append(mtlMaya)
  64. reusedMtls.append(mtl)
  65.  
  66.  
  67. if cmds.objExists(spriteMtl):
  68. cmds.select(mtlMaya)
  69. cmds.hyperShade(mtlMaya, objects="")
  70. cmds.hyperShade(assign=spriteMtl)
  71. print "Found Sprite " + spriteMtl + ". Reusing it."
  72. reusedMtls.append(spriteMtl)
  73. else:
  74. cmds.select(mtlMaya)
  75. cmds.hyperShade(mtlMaya, objects="")
  76. cmds.hyperShade(assign=mtl)
  77. cmds.delete(mtlMaya)
  78. deletedMtls.append(mtlMaya)
  79. elif "VP_" in mtlMaya:
  80. print "Skipping " + mtlMaya + " as it's a display material."
  81. skippedMtls.append(mtlMaya)
  82. elif (cmds.listConnections(mtlMaya + ".color", d=1)!=True) and (mtlMaya not in ["lambert1","shaderGlow1", "particleCloud1"]):
  83. print "Skipping " + mtlMaya + ". Couldn't find textures on it."
  84. skippedMtls.append(mtlMaya)
  85. elif mtlMaya in ["lambert1","shaderGlow1", "particleCloud1"]:
  86. print "Skipping " + mtlMaya + ". It's a Maya default shader."
  87. skippedMtls.append(mtlMaya)
  88. else:
  89. print "Skipping " + mtlMaya + ". Script is not set up for this shader type."
  90. skippedMtls.append(mtlMaya)
  91. cmds.select(cl=1)
  92. print "/"*40
  93. print "// All done!"
  94. 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("]","")
  95. 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("]","")
  96. 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("]","")
  97. 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("]","")
  98. 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("]","")
  99. print "/"*40
  100.  
  101. #####
  102.  
  103. def alphaToSprite(*Args):
  104.  
  105. selList = cmds.ls(sl=1)
  106. mtlSelList = []
  107.  
  108. for sel in selList:
  109. cmds.select(cl=1)
  110. if cmds.objectType(sel)=="transform":
  111. cmds.select(sel)
  112. cmds.hyperShade(smn=1)
  113. for selMtl in cmds.ls(sl=1):
  114. if selMtl not in mtlSelList:
  115. mtlSelList.append(selMtl)
  116. else:
  117. mtlSelList.append(sel)
  118. createdMtls = []
  119. skippedMtls = []
  120. warningList = []
  121. mtlValidList = []
  122.  
  123. for mtlSel in mtlSelList:
  124. if cmds.objectType(mtlSel) in ["RedshiftArchitectural", "RedshiftMaterial"]:
  125. if "_Mtl" in mtlSel:
  126. spriteMtl = mtlSel.replace("_Mtl", "_SpriteMtl")
  127. else:
  128. spriteMtl = mtlSel + "_SpriteMtl"
  129. if cmds.objExists(spriteMtl)==False:
  130. mtlValidList.append(mtlSel)
  131. else:
  132. print "Skipping " + mtlSel + ". Selection must be either rsArchitectural or rsMaterial shader."
  133. skippedMtls.append(mtlSel)
  134. else:
  135. print "Skipping " + mtlSel + ". Selection must be either rsArchitectural or rsMaterial shader."
  136. skippedMtls.append(mtlSel)
  137.  
  138. for mtlValid in mtlValidList:
  139. if cmds.objectType(mtlValid) == "RedshiftMaterial":
  140. diffInput = ".diffuse_color"
  141. else:
  142. diffInput = "..diffuse"
  143. inputFile = cmds.listConnections(mtlValid + diffInput, d=1)[0]
  144. pathFile = cmds.getAttr(inputFile + ".fileTextureName")
  145. if "_Mtl" in mtlValid:
  146. spriteMtl = mtlValid.replace("_Mtl", "_SpriteMtl")
  147. else:
  148. spriteMtl = mtlValid + "_SpriteMtl"
  149. vpMtl = "VP_" + mtlValid
  150. cmds.shadingNode("RedshiftSprite", asShader=1, n=spriteMtl)
  151. createdMtls.append(spriteMtl)
  152. cmds.connectAttr(mtlValid + ".outColor", spriteMtl + ".input")
  153. cmds.setAttr(spriteMtl + ".tex0", pathFile, type="string")
  154. if cmds.getAttr(inputFile + ".fileHasAlpha"):
  155. cmds.setAttr(spriteMtl + ".mode", 1)
  156. else:
  157. cmds.setAttr(spriteMtl + ".mode", 0)
  158. warningList.append(mtlValid)
  159. cmds.select(mtlValid)
  160. cmds.hyperShade(objects="")
  161. cmds.hyperShade(assign=spriteMtl)
  162. spriteSG = cmds.listConnections(spriteMtl + ".outColor")[0]
  163. if cmds.objExists(vpMtl):
  164. print vpMtl + " found. Reusing."
  165. else:
  166. cmds.shadingNode("lambert", asShader=1, n=vpMtl)
  167. cmds.connectAttr(inputFile + ".outColor", vpMtl + ".color")
  168. cmds.connectAttr(inputFile + ".outTransparency", vpMtl + ".transparency")
  169. cmds.connectAttr(spriteMtl + ".outColor", spriteSG + ".rsSurfaceShader")
  170. cmds.connectAttr(vpMtl + ".outColor", spriteSG + ".surfaceShader", f=1)
  171.  
  172. cmds.select(cl=1)
  173. print "/"*40
  174. print "// All done!"
  175. 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("]","")
  176. 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("]","")
  177. if warningList:
  178. print "// Warning! The following SpriteMtl's maps don't have an alpha channel: " + str([x.encode('ascii') for x in warningList]).replace("[","").replace("]","")
  179. print "/"*40
  180.  
  181. #####
  182.  
  183.  
  184. def alphaToSpecStuff(*Args):
  185. selList = cmds.ls(sl=1)
  186. mtlSelList = []
  187.  
  188. for sel in selList:
  189. cmds.select(cl=1)
  190. if cmds.objectType(sel)=="transform":
  191. cmds.select(sel)
  192. cmds.hyperShade(smn=1)
  193. for selMtl in cmds.ls(sl=1):
  194. if selMtl not in mtlSelList:
  195. mtlSelList.append(selMtl)
  196. else:
  197. mtlSelList.append(sel)
  198. mtlValidList = []
  199. createdMtls = []
  200. skippedMtls = []
  201. print mtlSelList
  202.  
  203. for mtlSel in mtlSelList:
  204. if cmds.objectType(mtlSel) == "RedshiftMaterial":
  205. mtlValidList.append(mtlSel)
  206. elif cmds.objectType(mtlSel) == "RedshiftSprite":
  207. spriteInput= cmds.listConnections(mtlSel + ".input", d=1)[0]
  208. if spriteInput and cmds.objectType(spriteInput) == "RedshiftMaterial":
  209. mtlValidList.append(spriteInput)
  210. else:
  211. print mtlSel + " is a SpriteMtl, but had no valid input. Skipping."
  212. skippedMtls.append(mtlSel)
  213. else:
  214. skippedMtls.append(mtlSel)
  215.  
  216.  
  217.  
  218.  
  219. for mtl in mtlValidList:
  220. inputFile = cmds.listConnections(mtl + ".diffuse_color", d=1)[0]
  221. pathFile = cmds.getAttr(inputFile + ".fileTextureName")
  222. texDiffuse = (pathFile.split("/")[-1].split("\\")[-1].split(".")[0]).lower()
  223. if (cmds.objectType(mtl)=="RedshiftMaterial") and (cmds.objExists("remapSpec_" + texDiffuse)) and (cmds.getAttr(inputFile+".fileHasAlpha")):
  224. inputFile = cmds.listConnections(mtl + ".diffuse_color", d=1)[0]
  225. pathFile = cmds.getAttr(inputFile + ".fileTextureName")
  226. texDiffuse = (pathFile.split("/")[-1].split("\\")[-1].split(".")[0]).lower()
  227. remapSpec = "remapSpec_" + texDiffuse
  228. remapGloss = "remapGloss_" + texDiffuse
  229. remapMetal01 = "remapMetal01_" + texDiffuse
  230. for remap in [remapSpec, remapGloss, remapMetal01]:
  231. try:
  232. cmds.disconnectAttr(inputFile + ".outColor", remap + ".color")
  233. cmds.connectAttr(inputFile + ".outAlpha", remap + ".color.colorR", f=1)
  234. cmds.connectAttr(inputFile + ".outAlpha", remap + ".color.colorG", f=1)
  235. cmds.connectAttr(inputFile + ".outAlpha", remap + ".color.colorB", f=1)
  236. if mtl not in createdMtls:
  237. createdMtls.append(mtl)
  238. except:
  239. if mtl not in skippedMtls:
  240. skippedMtls.append(mtl)
  241. elif cmds.getAttr((cmds.listConnections(mtl + ".diffuse_color", d=1)[0])+".fileHasAlpha")==False:
  242. print (cmds.listConnections(mtl + ".diffuse_color", d=1)[0]) + " doesn't have an alpha channel. Skipping."
  243. skippedMtls.append(mtl)
  244. cmds.select(cl=1)
  245. print "/"*40
  246. print "// All done!"
  247. 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("]","")
  248. 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("]","")
  249. print "/"*40
  250.  
  251. #####
  252.  
  253.  
  254. def alphaToTransp(*Args):
  255. selList = cmds.ls(sl=1)
  256. mtlSelList = []
  257.  
  258. for sel in selList:
  259. cmds.select(cl=1)
  260. if cmds.objectType(sel)=="transform":
  261. cmds.select(sel)
  262. cmds.hyperShade(smn=1)
  263. for selMtl in cmds.ls(sl=1):
  264. if selMtl not in mtlSelList:
  265. mtlSelList.append(selMtl)
  266. else:
  267. mtlSelList.append(sel)
  268. mtlValidList = []
  269. createdMtls = []
  270. skippedMtls = []
  271.  
  272. for mtlSel in mtlSelList:
  273. if cmds.objectType(mtlSel) == "RedshiftMaterial":
  274. mtlValidList.append(mtlSel)
  275. elif cmds.objectType(mtlSel) == "RedshiftSprite":
  276. spriteInput= cmds.listConnections(mtlSel + ".input", d=1)[0]
  277. if spriteInput and cmds.objectType(spriteInput) == "RedshiftMaterial":
  278. mtlValidList.append(spriteInput)
  279. else:
  280. print mtlSel + " is a SpriteMtl, but had no valid input. Skipping."
  281. skippedMtls.append(mtlSel)
  282. else:
  283. skippedMtls.append(mtlSel)
  284. for mtl in mtlValidList:
  285. inputFile = cmds.listConnections(mtl + ".diffuse_color", d=1)[0]
  286. pathFile = cmds.getAttr(inputFile + ".fileTextureName")
  287. texDiffuse = (pathFile.split("/")[-1].split("\\")[-1].split(".")[0]).lower()
  288. vpMtl = "VP_" + mtl
  289. if (cmds.getAttr(inputFile+".fileHasAlpha") and not (cmds.listConnections(mtl + ".opacity_color", d=1))):
  290. cmds.connectAttr(inputFile + ".outTransparency", mtl + ".opacity_color")
  291. createdMtls.append(mtl)
  292. elif cmds.listConnections(mtl + ".opacity_color", d=1):
  293. print "Transparency already applied. Skipping."
  294. skippedMtls.append(mtl)
  295. elif cmds.getAttr(inputFile+".fileHasAlpha")!=True:
  296. print "No Alpha found. Skipping."
  297. skippedMtls.append(mtl)
  298. if cmds.objExists(vpMtl)!=True:
  299. mtlSG = cmds.listConnections(mtl + ".outColor")[0]
  300. cmds.shadingNode("lambert", asShader=1, n=vpMtl)
  301. cmds.connectAttr(inputFile + ".outColor", vpMtl + ".color")
  302. cmds.connectAttr(inputFile + ".outTransparency", vpMtl + ".transparency")
  303. cmds.connectAttr(mtl + ".outColor", mtlSG + ".rsSurfaceShader")
  304. cmds.connectAttr(vpMtl + ".outColor", mtlSG + ".surfaceShader", f=1)
  305. cmds.select(cl=1)
  306. print "/"*40
  307. print "// All done!"
  308. 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("]","")
  309. 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("]","")
  310. print "/"*40
  311.  
  312.  
  313. #####
  314.  
  315. def DrawUI():
  316. windowID = "maya2rs"
  317. if cmds.window(windowID, exists=True):
  318. cmds.deleteUI(windowID)
  319. cmds.window(windowID, mnb=0, mxb=0, t="Maya to Redshift")
  320. cmds.window(windowID, e=1, wh=(215,20), rtf=1, s=0)
  321. cmds.columnLayout()
  322. cmds.separator(h=4, style="none")
  323. cmds.rowColumnLayout(nc=5,cw=[(1,5),(2,100),(3,5),(4,100),(5,5)])
  324. cmds.separator(h=5, style="none")
  325. cmds.button(l="maya2rs", c=maya2rs)
  326. cmds.separator(h=5, style="none")
  327. cmds.button(l="alphaToSprite", c=alphaToSprite)
  328. cmds.separator(h=5, style="none")
  329. cmds.setParent(top=1)
  330. cmds.separator(h=4, style="none")
  331. cmds.rowColumnLayout(nc=5,cw=[(1,5),(2,100),(3,5),(4,100),(5,5)])
  332. cmds.separator(h=5, style="none")
  333. cmds.button(l="alphaToSpecStuff", c=alphaToSpecStuff)
  334. cmds.separator(h=5, style="none")
  335. cmds.button(l="alphaToTransp", c=alphaToTransp)
  336. cmds.separator(h=5, style="none")
  337. cmds.separator(h=5, style="none")
  338. cmds.showWindow()
  339. DrawUI()
Advertisement
Add Comment
Please, Sign In to add comment