Guest User

Untitled

a guest
Sep 5th, 2017
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.77 KB | None | 0 0
  1. import maya.cmds as cmds
  2.  
  3.  
  4. def DrawUI():
  5. windowID = "rsAO_Pass"
  6. if cmds.window(windowID, exists=True):
  7. cmds.deleteUI(windowID)
  8. cmds.window(windowID, mnb=0, mxb=0, t="rsAO Pass")
  9. cmds.window(windowID, e=1, wh=(180,20), rtf=1, s=0)
  10. cmds.columnLayout()
  11. cmds.text("Select objects and hit Apply!\nUndo needs no selection." ,w=170, h=50)
  12. cmds.rowColumnLayout(nc=3, cw= [(1,80),(2,20) ,(3,80)])
  13. cmds.button(l="Apply", w=70, c=applyAO)
  14. cmds.separator(h=10, style="none")
  15. cmds.button(l="Undo", w=70, c=undoAO)
  16. cmds.separator(h=10, style="none")
  17. cmds.showWindow()
  18.  
  19. def applyAO(*Args):
  20. selList = cmds.ls(sl=1)
  21. if cmds.objExists("set_AO"):
  22. for sel in selList:
  23. cmds.sets(sel, add="set_AO")
  24. else:
  25. cmds.sets(selList, n="set_AO")
  26. sgList = []
  27.  
  28.  
  29. def rsMaterialAO(mtl, mtlAO):
  30. cmds.duplicate(mtl, n=mtlAO, rr=1, ic=1)
  31. # break connections
  32. for attr in [".diffuse_weight", ".refl_weight", ".ms_amount", ".coat_weight", ".emission_weight"]:
  33. if cmds.listConnections(mtlAO + attr):
  34. cmds.disconnectAttr((cmds.listConnections(mtlAO + attr, p=1)[0]), mtlAO + attr)
  35. cmds.setAttr(mtlAO + attr, 0)
  36. else:
  37. cmds.setAttr(mtlAO + attr, 0)
  38. cmds.connectAttr("rsAO_texture.outColor", mtlAO + ".emission_color", f=1)
  39. cmds.setAttr(mtlAO + ".emission_weight", 1)
  40. cmds.setAttr(mtlAO + ".refl_fresnel_mode", 3)
  41.  
  42. def rsArch(mtl, mtlAO):
  43. cmds.duplicate(mtl, n=mtlAO, rr=1, ic=1)
  44. for attr in [".diffuse_weight", ".reflectivity", ".refl_base", ".incandescent_scale"]:
  45. if cmds.listConnections(mtlAO + attr):
  46. cmds.disconnectAttr((cmds.listConnections(mtlAO + attr, p=1)[0]), mtlAO + attr)
  47. cmds.setAttr(mtlAO + attr, 0)
  48. else:
  49. cmds.setAttr(mtlAO + attr, 0)
  50. cmds.connectAttr("rsAO_texture.outColor", mtlAO + ".additional_color", f=1)
  51. cmds.setAttr(mtlAO + ".incandescent_scale", 1)
  52.  
  53. def rsCarPaint(mtl, mtlAO):
  54. cmds.shadingNode("RedshiftMaterial", asShader=1, n=mtlAO)
  55. cmds.setAttr(mtlAO + ".diffuse_weight", 0)
  56. cmds.setAttr(mtlAO + ".refl_weight", 0)
  57. if cmds.listConnections(mtl + ".bump_input"):
  58. normalMap = cmds.listConnections(mtl + ".bump_input", p=1)[0]
  59. print "normalMap found: " + str(normalMap)
  60. cmds.connectAttr(normalMap, mtlAO + ".bump_input")
  61.  
  62. cmds.setAttr(mtlAO + ".emission_weight", 1)
  63.  
  64. def rsBlend(mtl, mtlAO, sg, sgConnection):
  65. cmds.duplicate(mtl, n=mtlAO, rr=1, ic=1)
  66. mtlBase = cmds.listConnections(mtlAO + ".baseColor")[0]
  67. mtlType = cmds.objectType(mtlBase)
  68. if ("_AO" in mtlBase) or (cmds.objExists(mtlBase + "_AO" )):
  69. print mtlBase + " is already an AO-Material! Skipping."
  70. else:
  71. print mtlBase + " has not been created yet."
  72. createAO(mtlBase, mtlType, sg, sgConnection, sgIgnore=1)
  73. #createAO(mtlBase, mtlType, sg, sgConnection)
  74. mtlBaseAO = mtlBase + "_AO"
  75. cmds.connectAttr(mtlBaseAO + ".outColor", mtlAO + ".baseColor", f=1)
  76. for count in range(1,6):
  77. if cmds.listConnections(mtl + ".layerColor" + str(count)) and (cmds.getAttr(mtl + ".additiveMode" + str(count)) ==0):
  78. print str(mtl) + ".layerColor" + str(count) + " has a material and is not additive"
  79. mtlLayer = cmds.listConnections(mtl + ".layerColor" + str(count))[0]
  80. mltLayerAO = mtlLayer + "_AO"
  81. mtlType = cmds.objectType(mtlLayer)
  82. if ("_AO" in mtlLayer) or (cmds.objExists(mtlLayer + "_AO")):
  83. print mtlLayer + " is already an AO-Material! Skipping."
  84. else:
  85. print mtlLayer + " has not been created yet."
  86. createAO(mtlLayer, mtlType, sg, sgConnection, sgIgnore=1)
  87. #createAO(mtlLayer, mtlType, sg, sgConnection, sgIgnore=1)
  88. cmds.connectAttr(mltLayerAO + ".outColor", mtlAO + ".layerColor" + str(count), f=1)
  89. elif cmds.listConnections(mtl + ".layerColor" + str(count)) and (cmds.getAttr(mtl + ".additiveMode" + str(count)) ==1):
  90. print str(mtl) + ".layerColor" + str(count) + " has a material but is additive. Breaking connection and ignoring!"
  91. cmds.disconnectAttr(cmds.listConnections(mtl + ".layerColor" + str(count),p=1)[0], mtlAO + ".layerColor" + str(count))
  92.  
  93. def rsSprite(mtl, mtlAO, sg, sgConnection):
  94. cmds.duplicate(mtl, n=mtlAO, rr=1, ic=1)
  95. mtlBase = cmds.listConnections(mtlAO + ".input")[0]
  96. mtlType = cmds.objectType(mtlBase)
  97. #createAO(mtlBase, mtlType, sg, sgConnection, sgIgnore=1)
  98. if ("_AO" in mtlBase) or (cmds.objExists(mtlBase + "_AO" )):
  99. print mtlBase + " is already an AO-Material! Skipping."
  100. else:
  101. print mtlBase + " has not been created yet."
  102. createAO(mtlBase, mtlType, sg, sgConnection, sgIgnore=1)
  103. mtlBaseAO = mtlBase + "_AO"
  104. cmds.connectAttr(mtlBaseAO + ".outColor", mtlAO + ".input", f=1)
  105.  
  106. def createAO(mtl, mtlType, sg, sgConnection, sgIgnore=0):
  107. print "_"*20
  108. print "starting 'createAO'"
  109. print "mtl is " + mtl
  110. print "mtlType is " + mtlType
  111. print "sg is " + sg
  112. print "sgConnection is " + sgConnection
  113. print "_"*20
  114. mtlAO = mtl + "_AO"
  115. if cmds.objExists("rsAO_texture") != True:
  116. cmds.shadingNode("RedshiftAmbientOcclusion", au=1, n="rsAO_texture")
  117. cmds.setAttr("rsAO_texture.numSamples", 256)
  118. cmds.setAttr("rsAO_texture.spread", 0.75)
  119. cmds.setAttr("rsAO_texture.fallOff", 20)
  120. cmds.setAttr("rsAO_texture.maxDistance", 40)
  121.  
  122. # do shader specific stuff
  123. if mtlType == "RedshiftMaterial":
  124. print "mtl is rsMtl"
  125. rsMaterialAO(mtl, mtlAO)
  126. elif mtlType == "RedshiftArchitectural":
  127. rsArch(mtl, mtlAO)
  128. print "mtl is rsArch"
  129. elif mtlType == "RedshiftCarPaint":
  130. print "mtl is rsCarPaint"
  131. rsCarPaint(mtl, mtlAO)
  132. elif mtlType == "RedshiftMaterialBlender":
  133. rsBlend(mtl, mtlAO, sg, sgConnection)
  134. print "mtl is rsBlend"
  135. elif mtlType == "RedshiftSkin":
  136. print "mtl is rsSkin"
  137. elif mtlType == "RedshiftSprite":
  138. rsSprite(mtl, mtlAO, sg, sgConnection)
  139. print "mtl is rsSprite"
  140. elif mtlType == "RedshiftSubSurfaceScatter":
  141. print "mtl is rsSSS"
  142. elif mtlType == "RedshiftMatteShadowCatcher":
  143. print "mtl is rsMatte"
  144. if sgIgnore != True:
  145. cmds.connectAttr(mtlAO + ".outColor", sg + sgConnection, f=1)
  146.  
  147. #start of scripts
  148. #get all materials without duplicates
  149. for sel in selList:
  150. selShape = cmds.listRelatives(sel, typ="shape")[0]
  151. selSGTemp = cmds.listConnections(selShape, t="shadingEngine")
  152. for selSG in selSGTemp:
  153. if selSG not in sgList:
  154. sgList.append(selSG)
  155.  
  156. for sg in sgList:
  157. try:
  158. mtl = cmds.listConnections(sg + ".rsSurfaceShader")[0]
  159. sgConnection = ".rsSurfaceShader"
  160. except:
  161. mtl = cmds.listConnections(sg + ".surfaceShader")[0]
  162. sgConnection = ".surfaceShader"
  163. mtlType = cmds.objectType(mtl)
  164. if ("_AO" in mtl) or (cmds.objExists(mtl + "_AO")):
  165. print mtl + "_AO" + " is already an AO-Material! Skipping."
  166. try:
  167. cmds.connectAttr(mtl + "_AO.outColor", sg + sgConnection, f=1)
  168. except:
  169. pass
  170. else:
  171. print mtl + "_AO" + " has not been created yet."
  172. createAO(mtl, mtlType, sg, sgConnection)
  173.  
  174. cmds.select("rsAO_texture")
  175.  
  176. def undoAO(*Args):
  177. selList = cmds.sets("set_AO", q=1)
  178. sgList = []
  179.  
  180. for sel in selList:
  181. selShape = cmds.listRelatives(sel, typ="shape")[0]
  182. selSGTemp = cmds.listConnections(selShape, t="shadingEngine")
  183. for selSG in selSGTemp:
  184. if selSG not in sgList:
  185. sgList.append(selSG)
  186.  
  187.  
  188. for sg in sgList:
  189. try:
  190. mtlAO = cmds.listConnections(sg + ".rsSurfaceShader")[0]
  191. sgConnection = ".rsSurfaceShader"
  192. except:
  193. mtlAO = cmds.listConnections(sg + ".surfaceShader")[0]
  194. sgConnection = ".surfaceShader"
  195. mtl = mtlAO.replace("_AO", "")
  196. cmds.connectAttr(mtl + ".outColor", sg + sgConnection, f=1)
  197. cmds.delete(mtlAO)
  198. cmds.delete("rsAO_texture")
  199. cmds.delete("set_AO")
  200.  
  201. DrawUI()
Advertisement
Add Comment
Please, Sign In to add comment