def importYeti(path): msg = '' try: yetiInfo = getYetiInfo() if yetiInfo: for yetiNode, shader in yetiInfo.items(): if pm.objExists(yetiNode): pm.delete(yetiNode) if pm.objExists(shader): pm.delete(shader) if pm.objExists('yetiInfoNode'): yetiInfoNode = pm.PyNode('yetiInfoNode') yetiInfoNode.unlock() pm.delete(yetiInfoNode) cmds.file(path, pr=1, ignoreVersion=1, i=1, type="mayaBinary", mergeNamespacesOnClash=False, options="v=0;") #pm.importFile(path) if not pm.objExists('yetiInfoNode'): msg += u'"yetiInfoNode"가 존재 하지 않습니다.' except: return msg if not pm.objExists('time1'): timeNode = pm.createNode('time', n='time1') timeNode = pm.PyNode('time1') yetiInfoNode = pm.PyNode('yetiInfoNode') yetiInfo = json.loads(yetiInfoNode.yetiInfo.get()) for yetiNodeName, shaderName in yetiInfo.items(): try: yetiNode = pm.createNode('pgYetiMaya', n=yetiNodeName + 'Shape') yetiParent = yetiNode.getParent() yetiParent.rename(yetiNodeName) yetiNode.renderDensity.set(1) yetiNode.aiOpaque.set(0) timeNode.outTime.connect(yetiNode.currentTime) pm.select(yetiParent) surfaceShader = pm.PyNode(shaderName) pm.hyperShade(assign=surfaceShader) except: msg += u'{}노드와 {}쉐이더를 어싸인 하는데 실패 했습니다'.format( yetiNodeName, shaderName) return msg
def setValue(self, attribute = None, value = None, node = None): if node is None or not pm.objExists(node): OpenMaya.MGlobal.displayError('[Arsenal] Node ' + str(node) + 'does not exist') return if attribute is None: OpenMaya.MGlobal.displayError('[Arsenal] Attribute not found on the pass') return if value is None: OpenMaya.MGlobal.displayError('[Arsenal] No value gave to the pass') return if not pm.objExists(node + '.' + attribute): OpenMaya.MGlobal.displayError('[Arsenal] Attribute not found on the node ' + node) return pm.setAttr(node + '.' + attribute, value)
def init_read(self): ''' check for existing shaders with specific names and display the UV tile values ''' if pm.objExists("myChLambert1"): self.disp_uv_tile_val("myChLambert1", self.ch1_U_tx, self.ch1_V_tx) if pm.objExists("myChLambert2"): self.disp_uv_tile_val("myChLambert2", self.ch2_U_tx, self.ch2_V_tx) if pm.objExists("myChLambert3"): self.disp_uv_tile_val("myChLambert3", self.ch3_U_tx, self.ch3_V_tx) if pm.objExists("myChLambert4"): self.disp_uv_tile_val("myChLambert4", self.ch4_U_tx, self.ch4_V_tx) if pm.objExists("myChLambert5"): self.disp_uv_tile_val("myChLambert5", self.ch5_U_tx, self.ch5_V_tx) return None
def delete(self): #self.unlockNodes() rigNode = self.getRigNode() conNodes = rigNode.connections() for node in conNodes: if pm.objExists(node): pm.delete(node)
def getCameras(): camShapes = pm.ls(type='camera') defalutCams = [] usedCams = [] itemsInfo = [] for dc in ['persp', 'top', 'front', 'side', 'back', 'left', 'bottom']: if pm.objExists(dc): defalutCams.append(pm.PyNode(dc)) for shape in camShapes: usedCams.append(shape.getParent()) validCams = list(set(usedCams) - set(defalutCams)) for node in validCams: itemsInfo.append({ 'namespace': '', 'rootNode': node.name(), 'abcAsset': '', 'abcPath': '', 'label': node.name(), 'nodeType': 'cam' }) return itemsInfo
def exportYeti(path): yeitInfo = getYetiInfo() if pm.objExists('yetiInfoNode'): yetiInfoNode = pm.PyNode('yetiInfoNode') yetiInfoNode.unlock() pm.delete(yetiInfoNode) attrName = 'yetiInfo' yetiInfoNode = pm.createNode('network', n='yetiInfoNode') yetiInfoNode.addAttr(attrName, dt='string') jsonHandl = json.dumps(yeitInfo) yetiInfoNode.attr(attrName).set(jsonHandl) yetiInfoNode.attr(attrName).lock() yetiInfoNode.lock() exportList = [yetiInfoNode] for _, shader in yeitInfo.items(): exportList.append(shader) pm.select(exportList) try: pm.exportSelected(path, pr=1, typ='mayaBinary', force=1, es=1) print 'Success Export Shader' except: print exportList print path finally: yetiInfoNode.unlock() pm.delete(yetiInfoNode)
def rename(text, prefix = None, suffix = None, padding = 0, letters = False, capital = False): nodes = pm.ls(sl=True) newNames = [] for i, _ in enumerate(nodes): tempName = '' if prefix: tempName += prefix + text + str(i) if suffix: tempName += suffix tempName = tempName.partition(prefix+text)[2] if suffix: tempName = tempName.rpartition(suffix)[0] if letters: # 페딩을 문자로 사용한다 alpha = getAlpha(int(i), capital) newName = prefix+text+alpha+suffix newNames.append(newName) else: num = str(i+1).zfill(padding+1) newName = prefix+text+num+suffix newNames.append(newName) error_msg = 'Fail to rename one of more nodes.\n' failedNodes = [] for i, node in enumerate(nodes): if not pm.objExists(newNames[i]): node.rename(newNames[i]) else: error_msg += '\t {} ==> {} \n'.format(node.name(), newNames[i]) failedNodes.append(node) if failedNodes: pm.error(error_msg) print failedNodes
def tile_uv_val(self, sh, U, V, Uval, Vval, inc, uText, vText): tex = pm.PyNode(sh + "_2dTex") if not pm.objExists(tex): pm.displayError("texture does not exist") return None if U: if Uval: u_val = float(Uval.getText()) tex.repeatU.set(u_val) else: u_val = tex.repeatU.get() if inc: tex.repeatU.set(u_val + 1) else: if (u_val - 1) > 0: tex.repeatU.set(u_val - 1) if V: if Vval: v_val = float(Vval.getText()) tex.repeatV.set(v_val) else: v_val = tex.repeatV.get() if inc: tex.repeatV.set(v_val + 1) else: if (v_val - 1) > 0: tex.repeatV.set(v_val - 1) if uText or vText: self.disp_uv_tile_val(sh, uText, vText) return None
def assign_shader(self, sh, Utile, Vtile): self.sel = pm.ls(selection=True) if not pm.objExists(sh): self.create_shader(sh) pm.select(self.sel) pm.hyperShade(assign=pm.PyNode(sh)) self.disp_uv_tile_val(sh, Utile, Vtile) return None
def get_path_name(self): path_name = self.curve_name.getText() if not path_name: return self.INVALID_INPUT_FAIL if not pm.objExists(path_name): return self.NO_OBJECT_FAIL shape_node = pm.PyNode(path_name).getShape() if not isinstance(shape_node, pm.NurbsCurve): return self.DATA_TYPE_FAIL return self.curve_name.getText()
def import_jbeam_beams(root, jbeam_path): # Build Beams data = jbeam_to_json.read(jbeam_file=jbeam_path) if not data: return jbean_grp_name = os.path.basename(jbeam_path).split('.')[0] b_index = 0 for root in data.keys(): root_grp_name = 'jbeam|{}_group|{}_group'.format(jbean_grp_name, root) root_grp = pm.DependNode(root_grp_name) # print('root_grp: {}'.format(root_grp)) beams_grp = pm.group(empty=True, parent=root_grp, name='beams') for key in data[root].keys(): if key == 'beams': for beam_val in data[root]['beams']: if not type(beam_val) == list: # read settings here continue if len(beam_val) == 2 and beam_val[0] == 'id1:': continue # print('\t\t\t{}'.format(beam_val)) # Create the beam if pm.objExists(beam_val[0]) and pm.objExists(beam_val[1]): # print('making beam with: {} and {}'.format( # beam_val[0], beam_val[1])) maya_builders.make_beam(index=b_index, c=beam_val, group=beams_grp) b_index += 1
def exportShader(path): """씬안에 쉐이딩 그룹으로 부터 정보를 모아 shaderInfoNode에 저장 한후 입력 받은 경로에 shader를 저장 한다. :param path: 파일 경로 :type path: str """ sgGrps = getShadingEngine() shaderInfos = [] exportList = [] for sg in sgGrps: shaderInfo = getShaderInfo(sg) shaderInfos.append(shaderInfo) if shaderInfo['surfaceShader'] != '': exportList.append(shaderInfo['surfaceShader']) if shaderInfo['displacement'] != '': exportList.append(shaderInfo['displacement']) numAttr = len(shaderInfos) if pm.objExists('shaderInfoNode'): shaderInfoNode = pm.PyNode('shaderInfoNode') shaderInfoNode.unlock() pm.delete(shaderInfoNode) shaderInfoNode = pm.createNode('network', n='shaderInfoNode') shaderInfoNode.addAttr('shaderInfos', at='compound', nc=numAttr) for i in range(numAttr): attrName = 'shaderInfos' + str(i) shaderInfoNode.addAttr(attrName, dt='string', p='shaderInfos') for i, shaderInfo in enumerate(shaderInfos): attrName = 'shaderInfos' + str(i) jsonHandl = json.dumps(shaderInfo) shaderInfoNode.attr(attrName).set(jsonHandl) shaderInfoNode.attr(attrName).lock() shaderInfoNode.lock() exportList.append(shaderInfoNode) pm.select(exportList) try: pm.exportSelected(path, pr=1, typ='mayaBinary', force=1, es=1) print 'Success Export Shader' except: print exportList print path finally: shaderInfoNode.unlock() pm.delete(shaderInfoNode)
def createPass(self, name, g = False): if not self.checkStringName(text=name): OpenMaya.MGlobal.displayError('[Arsenal] You must to choose a valid name') return if not pm.objExists(name): pm.createRenderLayer(name=name, g=g) pm.editRenderLayerGlobals(currentRenderLayer=name) pynode = pm.PyNode(name) if pynode not in self.passName: self.passName[pynode] = ArsenalPass() self.passName[pynode].passName = name return pynode
def importYetiCache(path): data = cacheCore.loadScInfo(path) cacheInfos = data['caches'] for cacheInfo in cacheInfos: yetiNodeName = '{}:{}'.format(cacheInfo['namespace'], cacheInfo['nodeName']) cachePath = cacheInfo['cachePath'] if pm.objExists(yetiNodeName): node = pm.PyNode(yetiNodeName) node.cacheFileName.set(cachePath) node.fileMode.set(1) else: print '{}가 존재 하지 않습니다.'.format(yetiNodeName)
def setEyeballMtl(): eyeMtls = pm.ls(type='jf_nested_dielectric') try: if eyeMtls: for mtl in eyeMtls: sg = mtl.outColor.outputs()[0] if sg: for mesh in sg.members(): if pm.objExists(mesh): mesh.aiOpaque.set(0) return True except: return False
def assignShader(): """씬안에서 shaderInfoNode 노드를 검색 한다.\n shaderInfoNode 노드에 shaderInfos# 어트리뷰트를 검색한다.\n shaderInfos# 어트리뷰트의 값을 json 으로 가져 온다.\n 어트리뷰트의 geometry, surfaceShader, displacement 키 값을 가져 온다.\n geometry에 surfaceShader, displacement 적용 한다.\n shaderInfoNode 삭제 한다. .. warning:: 씬안에 'shaderInfoNode' 노드가 없을 때 ``shaderInfoNode not exist!`` 예외 발생 """ try: shaderInfoNode = pm.PyNode('shaderInfoNode') except: print '"shaderInfoNode" not exist!' numAttr = shaderInfoNode.shaderInfos.numChildren() message = '' for i in range(numAttr): shaderInfos = json.loads( shaderInfoNode.attr('shaderInfos{}'.format(i)).get()) geos = [] for geo in shaderInfos.get('geometry'): if pm.objExists(geo): geos.append(geo) try: pm.select(geos) surfaceShader = pm.PyNode(shaderInfos.get('surfaceShader')) pm.hyperShade(assign=surfaceShader) pm.select(cl=True) try: if shaderInfos.get('displacement'): displacement = pm.PyNode(shaderInfos.get('displacement')) sg = surfaceShader.outColor.outputs()[0] displacement.displacement.connect(sg.displacementShader) except: message += (str(shaderInfos.get('displacement')) + '-->' + sg.name() + '\n') except: message += (str(shaderInfos.get('surfaceShader')) + '-->' + str(geos) + '\n') shaderInfoNode.unlock() pm.delete(shaderInfoNode) if message: print 'Failed list:\n' print message
def importYeti(path): """입력 받은 경로에 shader를 import 한후 쉐이더를 적용 한다. :param path: 파일 경로 :type path: str """ yetiInfo = getYetiInfo() if yetiInfo: for yetiNode, shader in yetiInfo.items(): if pm.objExists(yetiNode): pm.delete(yetiNode) if pm.objExists(shader): pm.delete(shader) if pm.objExists('yetiInfoNode'): yetiInfoNode = pm.PyNode('yetiInfoNode') yetiInfoNode.unlock() pm.delete(yetiInfoNode) pm.importFile(path) if not pm.objExists('yetiInfoNode'): pm.error(u'"yetiInfoNode"가 존재 하지 않습니다.') yetiInfoNode = pm.PyNode('yetiInfoNode') yetiInfo = json.loads(yetiInfoNode.yetiInfo.get()) for yetiNodeName, shaderName in yetiInfo.items(): yetiNode = pm.createNode('pgYetiMaya', n=yetiNodeName + 'Shape') yetiParent = yetiNode.getParent() yetiParent.rename(yetiNodeName) yetiNode.renderDensity.set(1) yetiNode.aiOpaque.set(0) pm.select(yetiParent) surfaceShader = pm.PyNode(shaderName) pm.hyperShade(assign=surfaceShader)
def optimizeMat(self, layerMode = False, minSub = 8, maxSubd = 92): maxGlo = 1 minGlo = 0 allMaterials = pm.ls(type=['VRayCarPaintMtl', 'VRayFastSSS2', 'VRayMtl']) for myMat in allMaterials: reflectanceAttributes = {'["reflectionGlossiness"]': 'reflectionSubdivs', '["refractionGlossiness"]': 'refractionSubdivs', '["glossiness"]': 'reflectionSubdivs', '["coat_glossiness", "base_glossiness"]': 'subdivs'} for gloAttList in reflectanceAttributes: if pm.objExists(myMat + '.' + reflectanceAttributes[gloAttList]): if not pm.getAttr(myMat + '.' + reflectanceAttributes[gloAttList], lock=True) and len(pm.listConnections(myMat + '.' + reflectanceAttributes[gloAttList], d=False, s=True)) == 0: lastMoyeneValue = 1 first = True go = False for gloAtt in eval(gloAttList): if pm.objExists(myMat + '.' + gloAtt) and len(pm.listConnections(myMat + '.' + gloAtt, d=False, s=True)) == 0: gloValue = pm.getAttr(myMat + '.' + gloAtt) if first: lastMoyeneValue = gloValue first = False else: lastMoyeneValue = (lastMoyeneValue + gloValue) / 2 go = True if go: value = (lastMoyeneValue - maxGlo) * (maxSubd - minSub) / (minGlo - maxGlo) + minSub if layerMode: if pm.editRenderLayerGlobals(query=True, currentRenderLayer=True) == 'defaultRenderLayer': OpenMaya.MGlobal.displayError('[Arsenal Quality] You can not use layerMode if you are on masterLayer') return pm.editRenderLayerAdjustment(myMat + '.' + reflectanceAttributes[str(gloAttList)]) pm.setAttr(myMat.name() + '.' + reflectanceAttributes[str(gloAttList)], value) print '[Arsenal Quality] ' + str(value) + ' setted on attribute ' + reflectanceAttributes[str(gloAttList)] + ' for material ' + myMat.name() print '[Arsenal Quality] All materials optimized.'
def checkRig(): status = True error = '' if not pm.objExists('WorldCtrl'): status = False error += '"WorldCtrl" does not exist.\n' topNodes = pm.ls(assemblies=True) validNode = [] for top in topNodes: if not top.getShape(): validNode.append(top) if len(validNode) > 1: status = False error += 'Top node is one or more exist.\n' if not pm.objExists(validNode[0].name() + 'ModGrp'): status = False error += '"{}ModGrp" does not exist.\n'.format(validNode[0].name()) return [status, error]
def deletePass(self, layer = None): if layer is None: OpenMaya.MGlobal.displayError('[Arsenal] You must to select a pass') return pm.editRenderLayerGlobals(currentRenderLayer='defaultRenderLayer') for dependance in pm.listConnections(layer + '.message', destination=True, source=False, type='arsenalPass'): pm.lockNode(dependance, lock=False) print '[Arsenal] ' + dependance + ' deleted.' pm.delete(dependance) if pm.objExists(layer): pm.delete(layer) print '[Arsenal] ' + layer + ' deleted.' if layer in self.passName: del self.passName[layer]
def saveRenderGlobal(): rgArnold = pm.PyNode('defaultArnoldDriver') rgArnoldRO = pm.PyNode('defaultArnoldRenderOptions') rgCommon = pm.PyNode('defaultRenderGlobals') rgRes = pm.PyNode('defaultResolution') # get renderInfo = {} for attr in rgArnold.listAttr(): try: renderInfo[attr.name()] = cmds.getAttr(attr.name()) except: pass for attr in rgCommon.listAttr(): try: renderInfo[attr.name()] = cmds.getAttr(attr.name()) except: pass for attr in rgRes.listAttr(): try: renderInfo[attr.name()] = cmds.getAttr(attr.name()) except: pass for attr in rgArnoldRO.listAttr(): try: renderInfo[attr.name()] = cmds.getAttr(attr.name()) except: pass # add data if pm.objExists('renderInfoNode'): lightInfoNode = pm.PyNode('renderInfoNode') lightInfoNode.unlock() pm.delete(lightInfoNode) lightInfoNode = pm.createNode('network', n='renderInfoNode') lightInfoNode.addAttr('renderInfo', dt='string') jsonHandl = json.dumps(renderInfo) lightInfoNode.attr('renderInfo').set(jsonHandl) lightInfoNode.attr('renderInfo').lock() print u'렌더 셋팅을 성공 적으로 저장 했습니다.'
def setValue(self, renderPass = None, attribute = None, value = None): if renderPass is None: OpenMaya.MGlobal.displayError('[Arsenal] You must to select a pass') return if attribute is None: OpenMaya.MGlobal.displayError('[Arsenal] Attribute not found on the pass') return if value is None: OpenMaya.MGlobal.displayError('[Arsenal] No value gave to the pass') return pm.setAttr(renderPass + '_arsenalPass.' + attribute, value) if pm.objExists('vraySettings.' + attribute): pm.setAttr('vraySettings.' + attribute, value) self.initAttributes(attribut=attribute, renderPass=renderPass, fromRenderGlobal=True) else: self.initAttributes(attribut=attribute, renderPass=renderPass)
def initializePythonScript(self): if not pm.objExists('vraySettings.postTranslatePython'): return False pm.setAttr('vraySettings.postTranslatePython', lock=False) actualValue = pm.getAttr('vraySettings.postTranslatePython') toAdd = '' if 'import arsenalFunction;' not in actualValue: toAdd += 'import arsenalFunction;' if 'reload(arsenalFunction);' not in actualValue: toAdd += 'reload(arsenalFunction);' if 'arsenalFunction.arsenalFunction();' not in actualValue: toAdd += 'arsenalFunction.arsenalFunction();' pm.setAttr('vraySettings.postTranslatePython', toAdd + actualValue) if pm.control('vrayPostTranslatePythonCallbackControl', query=True, ex=True): pm.scrollField('vrayPostTranslatePythonCallbackControl', edit=True, text=toAdd) return True
def make_node(name, parent, point=None, vtx=None): """Make a Node from a vertex location """ if pm.objExists(name): return loc = pm.spaceLocator() loc.rename(name) if point: loc.t.set([point[0] * 100, point[2] * 100, point[1] * -100]) elif vtx: loc.t.set(vtx.getPosition(space='world')) loc.overrideEnabled.set(True) loc.overrideColor.set(17) loc.setParent(parent)
def initialize(self): if pm.objExists('vraySettings'): if pm.getAttr('defaultRenderGlobals.currentRenderer') == 'vray': self.arsenalQuality.initializeSet() if not self.initializePythonScript(): OpenMaya.MGlobal.displayError('[Arsenal] You must to upgrade your Vray') return False self.loadArsenalPlugin() return True else: result = pm.confirmDialog(title='Set Vray', message='Vray is not your current render engine, set Vray to the current engine ?\n', button=['OK', 'Cancel'], defaultButton='OK', cancelButton='Cancel', dismissString='Cancel') if result == 'OK': self.loadVray() self.arsenalQuality.initializeSet() if not self.initializePythonScript(): OpenMaya.MGlobal.displayError('[Arsenal] You must to upgrade your Vray') return False self.loadArsenalPlugin() return True OpenMaya.MGlobal.displayError('[Arsenal] Can not switch to Vray engine') return False elif pm.getAttr('defaultRenderGlobals.currentRenderer') == 'vray': result = pm.confirmDialog(title='Vray setting', message='Vray settings not found, reload Vray properly ?\n', button=['OK', 'Cancel'], defaultButton='OK', cancelButton='Cancel', dismissString='Cancel') if result == 'OK': self.loadVray() self.arsenalQuality.initializeSet() if not self.initializePythonScript(): OpenMaya.MGlobal.displayError('[Arsenal] You must to upgrade your Vray') return False self.loadArsenalPlugin() return True else: OpenMaya.MGlobal.displayError('[Arsenal] vraySetting not found') return False else: result = pm.confirmDialog(title='Load Vray', message='Vray is not your current render engine, load Vray ?\n(take some seconds)', button=['OK', 'Cancel'], defaultButton='OK', cancelButton='Cancel', dismissString='Cancel') if result == 'OK': self.loadVray() self.arsenalQuality.initializeSet() if not self.initializePythonScript(): OpenMaya.MGlobal.displayError('[Arsenal] You must to upgrade your Vray') return False self.loadArsenalPlugin() return True else: OpenMaya.MGlobal.displayError('[Arsenal] Vray not loaded') return False
def set_new_name(self, **kwargs): """ set new name to the node passed """ cur_nd = kwargs.get("cur_nd", None) nd_nm = kwargs.get("nd_nm", None) replace_to = kwargs.get("replace_to", None) id_val = kwargs.get("id_val", None) flag = False pm.rename(cur_nd, "TEMP_NODE_NAME") if pm.objExists(nd_nm): if replace_to: nd_nm = nd_nm.replace(replace_to, str(id_val) + replace_to) else: nd_nm = nd_nm + id_val flag = True pm.rename(cur_nd, nd_nm) return flag
def backSetting(self, *args): if pm.attributeQuery('deeXVrayFastActualSettings', n='vraySettings', ex=True): if pm.objExists('deeXVrayFastExpression'): pm.delete('deeXVrayFastExpression') print '[Arsenal Quality] OdeeXVrayFastExpression deleted.' lines = pm.getAttr('vraySettings.deeXVrayFastActualSettings') dico = eval(lines) for myAttr in dico: value = dico[myAttr] if type(dico[myAttr]) == list: value = dico[myAttr][0] if value: try: locked = 0 if pm.getAttr('vraySettings.' + myAttr, lock=True) == 1: pm.setAttr('vraySettings.' + myAttr, lock=False) locked = 1 pm.setAttr('vraySettings.' + myAttr, value) if locked == 1: pm.setAttr('vraySettings.' + myAttr, lock=True) except: print '[Arsenal Quality] ' + myAttr + ' value can not be setted.' locked = False if pm.lockNode('vraySettings', query=True, lock=True)[0]: locked = True pm.lockNode('vraySettings', lock=False) attToDelete = ['deeXVrayFastLastQuality', 'deeXVrayFastOptimized', 'deeXVrayFastActualSettings', 'deeXVrayFastoptimizationChooserSettings', 'deeXVrayFastLastTypePreset', 'deeXVrayFastLastPresetPreComp'] for myAttr in attToDelete: if pm.attributeQuery(myAttr, n='vraySettings', ex=True): pm.deleteAttr('vraySettings.' + myAttr) if locked: pm.lockNode('vraySettings', lock=True) print '[Arsenal Quality] Original settings applied.' else: print '[Arsenal Quality] deeXVrayFastActualSettings attribute not found'
def setSimpleValue(self, selection = list(), attribute = None, value = None, message = None): if len(selection) == 0: OpenMaya.MGlobal.displayError('[Arsenal] You must to have a selection') return if attribute is None: OpenMaya.MGlobal.displayError('[Arsenal] Attribute not found') return if value is None: OpenMaya.MGlobal.displayError('[Arsenal] No value gave') return for sel in selection: if pm.objExists(sel + '.' + attribute): con = pm.listConnections(sel + '.' + attribute, d=False, s=True) if con: if len(con) != 0: return print '[Arsenal] ' + str(sel) + ' :' pm.setAttr(sel + '.' + attribute, value) if message is not None: print ' ' + message
def loadeRenderGlobal(): if not pm.objExists('renderInfoNode'): print u'lightInfoNode 가 존재 하지 않습니다.' return if( pm.getAttr( 'defaultRenderGlobals.currentRenderer' ) != 'arnold' ): pm.setAttr('defaultRenderGlobals.currentRenderer', 'arnold') renderInfoNode = pm.PyNode('renderInfoNode') renderInfo = json.loads(renderInfoNode.renderInfo.get()) for attr, value in renderInfo.items(): try: attrNode = pm.PyNode(attr) attrNode.set(value) except: pass #print '{} failed set value {}.'.format(attr, value) renderInfoNode.unlock() pm.delete(renderInfoNode) print u'렌더 셋팅을 성공 적으로 로드 하였습니다.'
def delete_shader(self, sh, Utile, Vtile): if not pm.objExists(sh): pm.displayWarning("Shader does not exist") return None # get the shading engine connected sh_con = pm.listConnections(sh + ".outColor") obj = None for con in sh_con: print(con) # find the mesh connected with the shading engine obj = pm.listConnections(con, type="mesh") pm.delete(sh) pm.delete(sh + "_fileTexture") pm.delete(sh_con) pm.delete(sh + "_2dTex") if obj: pm.select(obj) pm.hyperShade(assign="lambert1") self.clear_uv_tile_val(sh, Utile, Vtile) return None
def start(self, renderPass=None, blackHoleMembers=list(), blackHoleMembersReceiveShd=list(), giMembersGenerate=list(), giMembersReceive=list(), primaryMembersOff=list(), reflectionMembersOff=list(), refractionMembersOff=list(), shadowCastsMembersOff=list(), lightSelectNormalMembers=list(), lightSelectDiffuseMembers=list(), lightSelectRawMembers=list(), lightSelectSpecularMembers=list()): if renderPass is None: renderPass = pm.editRenderLayerGlobals(query=True, currentRenderLayer=True) arsenalPassName = str(renderPass) + '_arsenalPass' if not pm.objExists(arsenalPassName): OpenMaya.MGlobal.displayError('[Arsenal] ' + arsenalPassName + ' not found.') return if not blackHoleMembers: myConnected = pm.listConnections(arsenalPassName + '.blackHoleMembers', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): blackHoleMembers.append(dag) if not blackHoleMembersReceiveShd: myConnected = pm.listConnections(arsenalPassName + '.blackHoleMembersReceiveShd', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): blackHoleMembersReceiveShd.append(dag) if not giMembersGenerate: myConnected = pm.listConnections(arsenalPassName + '.giMembersGenerate', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): giMembersGenerate.append(dag) if not giMembersReceive: myConnected = pm.listConnections(arsenalPassName + '.giMembersReceive', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): giMembersReceive.append(dag) if not primaryMembersOff: myConnected = pm.listConnections(arsenalPassName + '.primaryMembersOff', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): primaryMembersOff.append(dag) if not reflectionMembersOff: myConnected = pm.listConnections(arsenalPassName + '.reflectionMembersOff', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): reflectionMembersOff.append(dag) if not refractionMembersOff: myConnected = pm.listConnections(arsenalPassName + '.refractionMembersOff', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): refractionMembersOff.append(dag) if not shadowCastsMembersOff: myConnected = pm.listConnections(arsenalPassName + '.shadowCastsMembersOff', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): shadowCastsMembersOff.append(dag) allGroups = {} allGroups['blackHoleMembers'] = blackHoleMembers allGroups['blackHoleMembersReceiveShd'] = blackHoleMembersReceiveShd allGroups['giMembersGenerate'] = giMembersGenerate allGroups['giMembersReceive'] = giMembersReceive allGroups['primaryMembersOff'] = primaryMembersOff allGroups['reflectionMembersOff'] = reflectionMembersOff allGroups['refractionMembersOff'] = refractionMembersOff allGroups['shadowCastsMembersOff'] = shadowCastsMembersOff dicoInverse = {} for p in allGroups.keys(): for o in allGroups[p]: if dicoInverse.has_key(o): dicoInverse[o].append(p) else: dicoInverse[o] = [] dicoInverse[o].append(p) liste = {} for dk in dicoInverse.keys(): if liste.has_key(str(dicoInverse[dk])): liste[str(dicoInverse[dk])].append(dk) else: liste[str(dicoInverse[dk])] = [] liste[str(dicoInverse[dk])].append(dk) liste_finale = {} for lk in liste.keys(): liste_finale[str(liste[lk])] = lk vrayLambertMtl = None vrayLambert = False if pm.getAttr(arsenalPassName + '.vrayLambert'): vrayLambert = True vrayLambertbrdfMtlName = 'vrayLambertBRDFMtl_arsenal@diffuse' if not vrUtils.findByName(vrayLambertbrdfMtlName): vrUtils.create('BRDFDiffuse', vrayLambertbrdfMtlName) vrayLambertbrdfMtl = vrUtils.findByName(vrayLambertbrdfMtlName) gamaValue = pm.getAttr('vraySettings.cmap_gamma') if float('%.2f' % gamaValue) == 2.2 and not pm.getAttr( 'vraySettings.cmap_linearworkflow'): vrayLambertCOlorCorrectMtlName = 'vrayLambertCOlorCorrect_arsenal' if not vrUtils.findByName(vrayLambertCOlorCorrectMtlName): vrUtils.create('ColorCorrect', vrayLambertCOlorCorrectMtlName) vrayLambertCOlorCorrect = vrUtils.findByName( vrayLambertCOlorCorrectMtlName) vrayLambertCOlorCorrect[0].set( 'texture_map', vrUtils.AColor(0.7, 0.7, 0.7, 1)) vrayLambertCOlorCorrect[0].set('preprocess', 1) vrayLambertCOlorCorrect[0].set('pre_gamma', 2.2) vrayLambertbrdfMtl[0].set('color', vrUtils.Color(0, 0, 0)) vrayLambertbrdfMtl[0].set('color_tex', vrayLambertCOlorCorrect[0]) else: vrayLambertbrdfMtl[0].set('color', vrUtils.Color(0.7, 0.7, 0.7)) if vrayLambert: allNodes = vrUtils.findByType('Node') i = 0 for result in liste_finale: listObjects = eval(result.replace('nt', 'pm.nt')) i += 1 for mySel in listObjects: strObj = str(mySel.name()).replace(':', '__') node = vrUtils.findByName(strObj + '@node') if len(node) == 0: continue baseMat = node[0].get('material') mode = 0 if 'primaryMembersOff' in liste_finale[ result] or 'reflectionMembersOff' in liste_finale[ result] or 'refractionMembersOff' in liste_finale[ result] or 'shadowCastsMembersOff' in liste_finale[ result]: mode = 1 mtlRenderStatsName = baseMat.name( ) + '_arsenal%d@renderStats' % i if not vrUtils.findByName(mtlRenderStatsName): vrUtils.create('MtlRenderStats', mtlRenderStatsName) mtlRenderStats = vrUtils.findByName(mtlRenderStatsName) if 'primaryMembersOff' in liste_finale[result]: mtlRenderStats[0].set('camera_visibility', 0) if 'reflectionMembersOff' in liste_finale[result]: mtlRenderStats[0].set('reflections_visibility', 0) if 'refractionMembersOff' in liste_finale[result]: mtlRenderStats[0].set('refractions_visibility', 0) if 'shadowCastsMembersOff' in liste_finale[result]: mtlRenderStats[0].set('shadows_visibility', 0) if 'blackHoleMembers' in liste_finale[ result] or 'blackHoleMembersReceiveShd' in liste_finale[ result] or 'giMembersGenerate' in liste_finale[ result] or 'giMembersReceive' in liste_finale[ result]: if mode == 1: mode = 3 else: mode = 2 wrapperName = baseMat.name() + '_arsenal%d@mtlwrapper' % i if not vrUtils.findByName(wrapperName): vrUtils.create('MtlWrapper', wrapperName) wrapper = vrUtils.findByName(wrapperName) if 'blackHoleMembers' in liste_finale[result]: wrapper[0].set('matte_surface', 1) wrapper[0].set('alpha_contribution', -1) wrapper[0].set('reflection_amount', 0) wrapper[0].set('refraction_amount', 0) if 'generate_render_elements' in vrUtils.getPluginParams( wrapper[0]): wrapper[0].set('generate_render_elements', 0) if 'blackHoleMembersReceiveShd' in liste_finale[ result]: wrapper[0].set('shadows', 1) wrapper[0].set('affect_alpha', 1) if 'giMembersGenerate' in liste_finale[result]: wrapper[0].set('generate_gi', 0) if 'giMembersReceive' in liste_finale[result]: wrapper[0].set('receive_gi', 0) if mode == 1: mtlRenderStats[0].set('base_mtl', baseMat) node[0].set('material', mtlRenderStats) elif mode == 2: wrapper[0].set('base_material', baseMat) node[0].set('material', wrapper) elif mode == 3: wrapper[0].set('base_material', baseMat) mtlRenderStats[0].set('base_mtl', wrapper) node[0].set('material', mtlRenderStats) if vrayLambert: vrayBumpNodes = vrUtils.findByType('BRDFBump') for vrayBumpNode in vrayBumpNodes: vrayBumpNode.set('base_brdf', vrayLambertbrdfMtl[0]) vrayBlendNodeNodes = vrUtils.findByType('BRDFLayered') for vrayBlendNodeNode in vrayBlendNodeNodes: goodListBrdf = list() listBrdfs = vrayBlendNodeNode.get('brdfs') for listBrdf in listBrdfs: if listBrdf in vrayBumpNodes: goodListBrdf.append(listBrdf) else: goodListBrdf.append(vrayLambertbrdfMtl[0]) vrayBlendNodeNode.set('brdfs', goodListBrdf) vraySimpleBRDFNodes = vrUtils.findByType('MtlSingleBRDF') for vraySimpleBRDFNode in vraySimpleBRDFNodes: inBRDF = vraySimpleBRDFNode.get('brdf') if inBRDF not in vrayBumpNodes and inBRDF not in vrayBlendNodeNodes: vraySimpleBRDFNode.set('brdf', vrayLambertbrdfMtl[0]) actualList = pm.getAttr(arsenalPassName + '.multimatteMaskName') if actualList not in ('', '{}'): actualList = eval(actualList) for matteNumber in actualList: extraTexName = arsenalPassName + '_VRayUserColorMultimatte_number' + str( matteNumber) vrUtils.create('TexUserColor', extraTexName) variableName = actualList[matteNumber] + '_' + arsenalPassName extraTex = vrUtils.findByName(extraTexName) extraTex[0].set('default_color', vrUtils.AColor(0, 0, 0, 1)) extraTex[0].set('user_attribute', variableName) extraTexRenderElementName = arsenalPassName + '_RenderElementMultimatte_number' + str( matteNumber) vrUtils.create('RenderChannelExtraTex', extraTexRenderElementName) extraTexRenderElement = vrUtils.findByName( extraTexRenderElementName) extraTexRenderElement[0].set('name', actualList[matteNumber]) extraTexRenderElement[0].set('consider_for_aa', 1) extraTexRenderElement[0].set('affect_matte_objects', 1) extraTexRenderElement[0].set('texmap', extraTex[0]) extraTexRenderElement[0].set('filtering', 1) myConnected = pm.listConnections( arsenalPassName + '.multimatteMaskMembers[' + str(matteNumber) + '].multimatteMaskMembersRed', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): strObj = str(dag.name()).replace(':', '__') node = vrUtils.findByName(strObj + '@node') if len(node) == 0: continue currentUserAttr = node[0].get('user_attributes') value = variableName + '=1,0,0;' + currentUserAttr node[0].set('user_attributes', value) pm.mel.warning(strObj + '@node') pm.mel.warning(variableName) myConnected = pm.listConnections( arsenalPassName + '.multimatteMaskMembers[' + str(matteNumber) + '].multimatteMaskMembersGreen', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): strObj = str(dag.name()).replace(':', '__') node = vrUtils.findByName(strObj + '@node') if len(node) == 0: continue currentUserAttr = node[0].get('user_attributes') value = variableName + '=0,1,0;' + currentUserAttr node[0].set('user_attributes', value) myConnected = pm.listConnections( arsenalPassName + '.multimatteMaskMembers[' + str(matteNumber) + '].multimatteMaskMembersBlue', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): strObj = str(dag.name()).replace(':', '__') node = vrUtils.findByName(strObj + '@node') if len(node) == 0: continue currentUserAttr = node[0].get('user_attributes') value = variableName + '=0,0,1;' + currentUserAttr node[0].set('user_attributes', value) if pm.getAttr(arsenalPassName + '.vrayMaterialID'): self.deeXMaterialIDGeneratorFunc() if pm.getAttr(arsenalPassName + '.vrayProxyObjectID'): self.deeXProxyObjectIDGeneratorFunc() if not lightSelectNormalMembers: if pm.getAttr(arsenalPassName + '.lightSelectAllNormal'): lightSelectNormalMembers = vrUtils.findByType( 'Light*') + vrUtils.findByType('MayaLight*') else: myConnected = pm.listConnections(arsenalPassName + '.lightSelectNormalMembers', destination=False, source=True) for dag in self.getAllChildShapes( selection=myConnected, type=pm.listNodeTypes('light')): if not dag.intermediateObject.get(): strObj = str(dag.name()).replace(':', '__') node = vrUtils.findByName(strObj) lightSelectNormalMembers.append(node[0]) if not lightSelectDiffuseMembers: if pm.getAttr(arsenalPassName + '.lightSelectAllDiffuse'): lightSelectDiffuseMembers = vrUtils.findByType( 'Light*') + vrUtils.findByType('MayaLight*') else: myConnected = pm.listConnections(arsenalPassName + '.lightSelectDiffuseMembers', destination=False, source=True) for dag in self.getAllChildShapes( selection=myConnected, type=pm.listNodeTypes('light')): if not dag.intermediateObject.get(): strObj = str(dag.name()).replace(':', '__') node = vrUtils.findByName(strObj) lightSelectDiffuseMembers.append(node[0]) if not lightSelectRawMembers: if pm.getAttr(arsenalPassName + '.lightSelectAllRaw'): lightSelectRawMembers = vrUtils.findByType( 'Light*') + vrUtils.findByType('MayaLight*') else: myConnected = pm.listConnections(arsenalPassName + '.lightSelectRawMembers', destination=False, source=True) for dag in self.getAllChildShapes( selection=myConnected, type=pm.listNodeTypes('light')): if not dag.intermediateObject.get(): strObj = str(dag.name()).replace(':', '__') node = vrUtils.findByName(strObj) lightSelectRawMembers.append(node[0]) if not lightSelectSpecularMembers: if pm.getAttr(arsenalPassName + '.lightSelectAllSpecular'): lightSelectSpecularMembers = vrUtils.findByType( 'Light*') + vrUtils.findByType('MayaLight*') else: myConnected = pm.listConnections(arsenalPassName + '.lightSelectSpecularMembers', destination=False, source=True) for dag in self.getAllChildShapes( selection=myConnected, type=pm.listNodeTypes('light')): if not dag.intermediateObject.get(): strObj = str(dag.name()).replace(':', '__') node = vrUtils.findByName(strObj) lightSelectSpecularMembers.append(node[0]) self.deeXLightSelectGeneratorFunc( lightNormal=lightSelectNormalMembers, lightDiffuse=lightSelectDiffuseMembers, lightRaw=lightSelectRawMembers, lightSpecular=lightSelectSpecularMembers)
def start(self, renderPass = None, blackHoleMembers = list(), blackHoleMembersReceiveShd = list(), giMembersGenerate = list(), giMembersReceive = list(), primaryMembersOff = list(), reflectionMembersOff = list(), refractionMembersOff = list(), shadowCastsMembersOff = list(), lightSelectNormalMembers = list(), lightSelectDiffuseMembers = list(), lightSelectRawMembers = list(), lightSelectSpecularMembers = list()): if renderPass is None: renderPass = pm.editRenderLayerGlobals(query=True, currentRenderLayer=True) arsenalPassName = str(renderPass) + '_arsenalPass' if not pm.objExists(arsenalPassName): OpenMaya.MGlobal.displayError('[Arsenal] ' + arsenalPassName + ' not found.') return if not blackHoleMembers: myConnected = pm.listConnections(arsenalPassName + '.blackHoleMembers', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): blackHoleMembers.append(dag) if not blackHoleMembersReceiveShd: myConnected = pm.listConnections(arsenalPassName + '.blackHoleMembersReceiveShd', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): blackHoleMembersReceiveShd.append(dag) if not giMembersGenerate: myConnected = pm.listConnections(arsenalPassName + '.giMembersGenerate', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): giMembersGenerate.append(dag) if not giMembersReceive: myConnected = pm.listConnections(arsenalPassName + '.giMembersReceive', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): giMembersReceive.append(dag) if not primaryMembersOff: myConnected = pm.listConnections(arsenalPassName + '.primaryMembersOff', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): primaryMembersOff.append(dag) if not reflectionMembersOff: myConnected = pm.listConnections(arsenalPassName + '.reflectionMembersOff', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): reflectionMembersOff.append(dag) if not refractionMembersOff: myConnected = pm.listConnections(arsenalPassName + '.refractionMembersOff', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): refractionMembersOff.append(dag) if not shadowCastsMembersOff: myConnected = pm.listConnections(arsenalPassName + '.shadowCastsMembersOff', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): shadowCastsMembersOff.append(dag) allGroups = {} allGroups['blackHoleMembers'] = blackHoleMembers allGroups['blackHoleMembersReceiveShd'] = blackHoleMembersReceiveShd allGroups['giMembersGenerate'] = giMembersGenerate allGroups['giMembersReceive'] = giMembersReceive allGroups['primaryMembersOff'] = primaryMembersOff allGroups['reflectionMembersOff'] = reflectionMembersOff allGroups['refractionMembersOff'] = refractionMembersOff allGroups['shadowCastsMembersOff'] = shadowCastsMembersOff dicoInverse = {} for p in allGroups.keys(): for o in allGroups[p]: if dicoInverse.has_key(o): dicoInverse[o].append(p) else: dicoInverse[o] = [] dicoInverse[o].append(p) liste = {} for dk in dicoInverse.keys(): if liste.has_key(str(dicoInverse[dk])): liste[str(dicoInverse[dk])].append(dk) else: liste[str(dicoInverse[dk])] = [] liste[str(dicoInverse[dk])].append(dk) liste_finale = {} for lk in liste.keys(): liste_finale[str(liste[lk])] = lk vrayLambertMtl = None vrayLambert = False if pm.getAttr(arsenalPassName + '.vrayLambert'): vrayLambert = True vrayLambertbrdfMtlName = 'vrayLambertBRDFMtl_arsenal@diffuse' if not vrUtils.findByName(vrayLambertbrdfMtlName): vrUtils.create('BRDFDiffuse', vrayLambertbrdfMtlName) vrayLambertbrdfMtl = vrUtils.findByName(vrayLambertbrdfMtlName) gamaValue = pm.getAttr('vraySettings.cmap_gamma') if float('%.2f' % gamaValue) == 2.2 and not pm.getAttr('vraySettings.cmap_linearworkflow'): vrayLambertCOlorCorrectMtlName = 'vrayLambertCOlorCorrect_arsenal' if not vrUtils.findByName(vrayLambertCOlorCorrectMtlName): vrUtils.create('ColorCorrect', vrayLambertCOlorCorrectMtlName) vrayLambertCOlorCorrect = vrUtils.findByName(vrayLambertCOlorCorrectMtlName) vrayLambertCOlorCorrect[0].set('texture_map', vrUtils.AColor(0.7, 0.7, 0.7, 1)) vrayLambertCOlorCorrect[0].set('preprocess', 1) vrayLambertCOlorCorrect[0].set('pre_gamma', 2.2) vrayLambertbrdfMtl[0].set('color', vrUtils.Color(0, 0, 0)) vrayLambertbrdfMtl[0].set('color_tex', vrayLambertCOlorCorrect[0]) else: vrayLambertbrdfMtl[0].set('color', vrUtils.Color(0.7, 0.7, 0.7)) if vrayLambert: allNodes = vrUtils.findByType('Node') i = 0 for result in liste_finale: listObjects = eval(result.replace('nt', 'pm.nt')) i += 1 for mySel in listObjects: strObj = str(mySel.name()).replace(':', '__') node = vrUtils.findByName(strObj + '@node') if len(node) == 0: continue baseMat = node[0].get('material') mode = 0 if 'primaryMembersOff' in liste_finale[result] or 'reflectionMembersOff' in liste_finale[result] or 'refractionMembersOff' in liste_finale[result] or 'shadowCastsMembersOff' in liste_finale[result]: mode = 1 mtlRenderStatsName = baseMat.name() + '_arsenal%d@renderStats' % i if not vrUtils.findByName(mtlRenderStatsName): vrUtils.create('MtlRenderStats', mtlRenderStatsName) mtlRenderStats = vrUtils.findByName(mtlRenderStatsName) if 'primaryMembersOff' in liste_finale[result]: mtlRenderStats[0].set('camera_visibility', 0) if 'reflectionMembersOff' in liste_finale[result]: mtlRenderStats[0].set('reflections_visibility', 0) if 'refractionMembersOff' in liste_finale[result]: mtlRenderStats[0].set('refractions_visibility', 0) if 'shadowCastsMembersOff' in liste_finale[result]: mtlRenderStats[0].set('shadows_visibility', 0) if 'blackHoleMembers' in liste_finale[result] or 'blackHoleMembersReceiveShd' in liste_finale[result] or 'giMembersGenerate' in liste_finale[result] or 'giMembersReceive' in liste_finale[result]: if mode == 1: mode = 3 else: mode = 2 wrapperName = baseMat.name() + '_arsenal%d@mtlwrapper' % i if not vrUtils.findByName(wrapperName): vrUtils.create('MtlWrapper', wrapperName) wrapper = vrUtils.findByName(wrapperName) if 'blackHoleMembers' in liste_finale[result]: wrapper[0].set('matte_surface', 1) wrapper[0].set('alpha_contribution', -1) wrapper[0].set('reflection_amount', 0) wrapper[0].set('refraction_amount', 0) if 'generate_render_elements' in vrUtils.getPluginParams(wrapper[0]): wrapper[0].set('generate_render_elements', 0) if 'blackHoleMembersReceiveShd' in liste_finale[result]: wrapper[0].set('shadows', 1) wrapper[0].set('affect_alpha', 1) if 'giMembersGenerate' in liste_finale[result]: wrapper[0].set('generate_gi', 0) if 'giMembersReceive' in liste_finale[result]: wrapper[0].set('receive_gi', 0) if mode == 1: mtlRenderStats[0].set('base_mtl', baseMat) node[0].set('material', mtlRenderStats) elif mode == 2: wrapper[0].set('base_material', baseMat) node[0].set('material', wrapper) elif mode == 3: wrapper[0].set('base_material', baseMat) mtlRenderStats[0].set('base_mtl', wrapper) node[0].set('material', mtlRenderStats) if vrayLambert: vrayBumpNodes = vrUtils.findByType('BRDFBump') for vrayBumpNode in vrayBumpNodes: vrayBumpNode.set('base_brdf', vrayLambertbrdfMtl[0]) vrayBlendNodeNodes = vrUtils.findByType('BRDFLayered') for vrayBlendNodeNode in vrayBlendNodeNodes: goodListBrdf = list() listBrdfs = vrayBlendNodeNode.get('brdfs') for listBrdf in listBrdfs: if listBrdf in vrayBumpNodes: goodListBrdf.append(listBrdf) else: goodListBrdf.append(vrayLambertbrdfMtl[0]) vrayBlendNodeNode.set('brdfs', goodListBrdf) vraySimpleBRDFNodes = vrUtils.findByType('MtlSingleBRDF') for vraySimpleBRDFNode in vraySimpleBRDFNodes: inBRDF = vraySimpleBRDFNode.get('brdf') if inBRDF not in vrayBumpNodes and inBRDF not in vrayBlendNodeNodes: vraySimpleBRDFNode.set('brdf', vrayLambertbrdfMtl[0]) actualList = pm.getAttr(arsenalPassName + '.multimatteMaskName') if actualList not in ('', '{}'): actualList = eval(actualList) for matteNumber in actualList: extraTexName = arsenalPassName + '_VRayUserColorMultimatte_number' + str(matteNumber) vrUtils.create('TexUserColor', extraTexName) variableName = actualList[matteNumber] + '_' + arsenalPassName extraTex = vrUtils.findByName(extraTexName) extraTex[0].set('default_color', vrUtils.AColor(0, 0, 0, 1)) extraTex[0].set('user_attribute', variableName) extraTexRenderElementName = arsenalPassName + '_RenderElementMultimatte_number' + str(matteNumber) vrUtils.create('RenderChannelExtraTex', extraTexRenderElementName) extraTexRenderElement = vrUtils.findByName(extraTexRenderElementName) extraTexRenderElement[0].set('name', actualList[matteNumber]) extraTexRenderElement[0].set('consider_for_aa', 1) extraTexRenderElement[0].set('affect_matte_objects', 1) extraTexRenderElement[0].set('texmap', extraTex[0]) extraTexRenderElement[0].set('filtering', 1) myConnected = pm.listConnections(arsenalPassName + '.multimatteMaskMembers[' + str(matteNumber) + '].multimatteMaskMembersRed', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): strObj = str(dag.name()).replace(':', '__') node = vrUtils.findByName(strObj + '@node') if len(node) == 0: continue currentUserAttr = node[0].get('user_attributes') value = variableName + '=1,0,0;' + currentUserAttr node[0].set('user_attributes', value) pm.mel.warning(strObj + '@node') pm.mel.warning(variableName) myConnected = pm.listConnections(arsenalPassName + '.multimatteMaskMembers[' + str(matteNumber) + '].multimatteMaskMembersGreen', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): strObj = str(dag.name()).replace(':', '__') node = vrUtils.findByName(strObj + '@node') if len(node) == 0: continue currentUserAttr = node[0].get('user_attributes') value = variableName + '=0,1,0;' + currentUserAttr node[0].set('user_attributes', value) myConnected = pm.listConnections(arsenalPassName + '.multimatteMaskMembers[' + str(matteNumber) + '].multimatteMaskMembersBlue', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=['mesh', 'VRayPlane']): if not dag.intermediateObject.get(): strObj = str(dag.name()).replace(':', '__') node = vrUtils.findByName(strObj + '@node') if len(node) == 0: continue currentUserAttr = node[0].get('user_attributes') value = variableName + '=0,0,1;' + currentUserAttr node[0].set('user_attributes', value) if pm.getAttr(arsenalPassName + '.vrayMaterialID'): self.deeXMaterialIDGeneratorFunc() if pm.getAttr(arsenalPassName + '.vrayProxyObjectID'): self.deeXProxyObjectIDGeneratorFunc() if not lightSelectNormalMembers: if pm.getAttr(arsenalPassName + '.lightSelectAllNormal'): lightSelectNormalMembers = vrUtils.findByType('Light*') + vrUtils.findByType('MayaLight*') else: myConnected = pm.listConnections(arsenalPassName + '.lightSelectNormalMembers', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=pm.listNodeTypes('light')): if not dag.intermediateObject.get(): strObj = str(dag.name()).replace(':', '__') node = vrUtils.findByName(strObj) lightSelectNormalMembers.append(node[0]) if not lightSelectDiffuseMembers: if pm.getAttr(arsenalPassName + '.lightSelectAllDiffuse'): lightSelectDiffuseMembers = vrUtils.findByType('Light*') + vrUtils.findByType('MayaLight*') else: myConnected = pm.listConnections(arsenalPassName + '.lightSelectDiffuseMembers', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=pm.listNodeTypes('light')): if not dag.intermediateObject.get(): strObj = str(dag.name()).replace(':', '__') node = vrUtils.findByName(strObj) lightSelectDiffuseMembers.append(node[0]) if not lightSelectRawMembers: if pm.getAttr(arsenalPassName + '.lightSelectAllRaw'): lightSelectRawMembers = vrUtils.findByType('Light*') + vrUtils.findByType('MayaLight*') else: myConnected = pm.listConnections(arsenalPassName + '.lightSelectRawMembers', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=pm.listNodeTypes('light')): if not dag.intermediateObject.get(): strObj = str(dag.name()).replace(':', '__') node = vrUtils.findByName(strObj) lightSelectRawMembers.append(node[0]) if not lightSelectSpecularMembers: if pm.getAttr(arsenalPassName + '.lightSelectAllSpecular'): lightSelectSpecularMembers = vrUtils.findByType('Light*') + vrUtils.findByType('MayaLight*') else: myConnected = pm.listConnections(arsenalPassName + '.lightSelectSpecularMembers', destination=False, source=True) for dag in self.getAllChildShapes(selection=myConnected, type=pm.listNodeTypes('light')): if not dag.intermediateObject.get(): strObj = str(dag.name()).replace(':', '__') node = vrUtils.findByName(strObj) lightSelectSpecularMembers.append(node[0]) self.deeXLightSelectGeneratorFunc(lightNormal=lightSelectNormalMembers, lightDiffuse=lightSelectDiffuseMembers, lightRaw=lightSelectRawMembers, lightSpecular=lightSelectSpecularMembers)
def refresh(self): if not self.deeXVrayFastOptimized: return lines = self.vraySettings.deeXVrayFastoptimizationChooserSettings.get() dicoOptimizationChooser = eval(lines) valueAs = float(self.vraySettings.width.get() * 1.0 / (self.vraySettings.height.get() * 1.0)) pm.mel.eval('vrayUpdateAspectRatio;') self.vraySettings.aspectRatio.set(valueAs) pm.mel.eval('vrayChangeResolution();') resolution = self.vraySettings.width.get() * self.vraySettings.height.get() realQuality = self.deeXVrayFastLastQuality enable = True if dicoOptimizationChooser: if dicoOptimizationChooser['OptimizationChooserGlobalOptionInt'][0]: realQuality += dicoOptimizationChooser['OptimizationChooserGlobalOptionInt'][1] if enable: multiplier = (float(self.vraySettings_globopt_mtl_maxDepthH) - float(self.vraySettings_globopt_mtl_maxDepthM)) / 50 minValue = float(self.vraySettings_globopt_mtl_maxDepthM) - multiplier * 50 if pm.attributeQuery('globopt_mtl_limitDepth', n='vraySettings', ex=True): if not self.vraySettings.globopt_mtl_limitDepth.get(lock=True): self.vraySettings.globopt_mtl_limitDepth.set(1) value = minValue + realQuality * multiplier if value <= 2.0: value = 2.0 if not self.vraySettings.globopt_mtl_maxDepth.get(lock=True): self.vraySettings.globopt_mtl_maxDepth.set(value) realQuality = self.deeXVrayFastLastQuality enable = True if dicoOptimizationChooser: if dicoOptimizationChooser['OptimizationChooserImageSamplerInt'][0]: realQuality += dicoOptimizationChooser['OptimizationChooserImageSamplerInt'][1] if enable: multiplier = (float(self.vraySettings_dmcMaxSubdivsH) - float(self.vraySettings_dmcMaxSubdivsM)) / 50 minValue = float(self.vraySettings_dmcMaxSubdivsM) - multiplier * 50 value = minValue + realQuality * multiplier if value <= 2: value = 2.0 n = math.log(307200.0 / resolution) / math.log(4.0) * -1 subdi = math.ceil(value / float(self.multiplicator_vraySettings_dmcMaxSubdivs) ** n) if pm.attributeQuery('dmcMaxSubdivs', n='vraySettings', ex=True): if not self.vraySettings.dmcMaxSubdivs.get(lock=True): self.vraySettings.dmcMaxSubdivs.set(subdi) multiplier = (float(self.vraySettings_dmcMinSubdivsH) - float(self.vraySettings_dmcMinSubdivsM)) / 50 minValue = float(self.vraySettings_dmcMinSubdivsM) - multiplier * 50 value = minValue + realQuality * multiplier if value <= 1: value = 1 if pm.attributeQuery('dmcMinSubdivs', n='vraySettings', ex=True): if not self.vraySettings.dmcMinSubdivs.get(lock=True): self.vraySettings.dmcMinSubdivs.set(value) multiplier = (float(self.vraySettings_dmcThresholdM) - float(self.vraySettings_dmcThresholdH)) / 50 minValue = float(self.vraySettings_dmcThresholdM) + multiplier * 50 value = minValue - realQuality * multiplier if value <= 0.001: value = 0.001 if pm.attributeQuery('dmcThreshold', n='vraySettings', ex=True): if not self.vraySettings.dmcThreshold.get(lock=True): self.vraySettings.dmcThreshold.set(value) realQuality = self.deeXVrayFastLastQuality enable = True if dicoOptimizationChooser: if dicoOptimizationChooser['OptimizationChooserIrradianceMapInt'][0]: realQuality += dicoOptimizationChooser['OptimizationChooserIrradianceMapInt'][1] if enable: multiplier = (float(self.vraySettings_imap_minRateH) - float(self.vraySettings_imap_minRateM)) / 50 minValue = float(self.vraySettings_imap_minRateM) - multiplier * 50 value = minValue + realQuality * multiplier n = math.log(307200.0 / resolution) / math.log(4.0) * -1 subdi = round(value + float(self.multiplicator_vraySettings_imap_minRate) * n) if pm.attributeQuery('imap_minRate', n='vraySettings', ex=True): if not self.vraySettings.imap_minRate.get(lock=True): self.vraySettings.imap_minRate.set(subdi) multiplier = (float(self.vraySettings_imap_maxRateH) - float(self.vraySettings_imap_maxRateM)) / 50 minValue = float(self.vraySettings_imap_maxRateM) - multiplier * 50 value = minValue + realQuality * multiplier if value >= -1.0: value = -1.0 n = math.log(307200.0 / resolution) / math.log(4.0) * -1 subdi = round(value + float(self.multiplicator_vraySettings_imap_maxRate) * n) if pm.attributeQuery('imap_maxRate', n='vraySettings', ex=True): if not self.vraySettings.imap_maxRate.get(lock=True): self.vraySettings.imap_maxRate.set(subdi) multiplier = (float(self.vraySettings_imap_colorThresholdM) - float(self.vraySettings_imap_colorThresholdH)) / 50 minValue = float(self.vraySettings_imap_colorThresholdM) + multiplier * 50 value = minValue - realQuality * multiplier if value <= 0.001: value = 0.001 if pm.attributeQuery('imap_colorThreshold', n='vraySettings', ex=True): if not self.vraySettings.imap_colorThreshold.get(lock=True): self.vraySettings.imap_colorThreshold.set(value) multiplier = (float(self.vraySettings_imap_normalThresholdM) - float(self.vraySettings_imap_normalThresholdH)) / 50 minValue = float(self.vraySettings_imap_normalThresholdM) + multiplier * 50 value = minValue - realQuality * multiplier if value <= 0.001: value = 0.001 if pm.attributeQuery('imap_normalThreshold', n='vraySettings', ex=True): if not self.vraySettings.imap_normalThreshold.get(lock=True): self.vraySettings.imap_normalThreshold.set(value) multiplier = (float(self.vraySettings_imap_distanceThresholdH) - float(self.vraySettings_imap_distanceThresholdM)) / 50 minValue = float(self.vraySettings_imap_distanceThresholdM) - multiplier * 50 value = minValue + multiplier * realQuality if value <= 0: value = 0 if pm.attributeQuery('imap_distanceThreshold', n='vraySettings', ex=True): if not self.vraySettings.imap_distanceThreshold.get(lock=True): self.vraySettings.imap_distanceThreshold.set(value) multiplier = (float(self.vraySettings_imap_subdivsM) - float(self.vraySettings_imap_subdivsH)) / 50 minValue = float(self.vraySettings_imap_subdivsM) + multiplier * 50 value = minValue - realQuality * multiplier if value <= 1: value = 1 if pm.attributeQuery('imap_subdivs', n='vraySettings', ex=True): if not self.vraySettings.imap_subdivs.get(lock=True): self.vraySettings.imap_subdivs.set(value) multiplier = (float(self.vraySettings_imap_interpSamplesM) - float(self.vraySettings_imap_interpSamplesH)) / 50 minValue = float(self.vraySettings_imap_interpSamplesM) + multiplier * 50 value = minValue - realQuality * multiplier if value <= 1: value = 1 if pm.attributeQuery('imap_interpSamples', n='vraySettings', ex=True): if not self.vraySettings.imap_interpSamples.get(lock=True): self.vraySettings.imap_interpSamples.set(value) multiplier = (float(eval(str(self.vraySettings_imap_detailRadiusH))) - float(self.vraySettings_imap_detailRadiusM)) / 50 minValue = float(self.vraySettings_imap_detailRadiusM) - multiplier * 50 value = minValue + realQuality * multiplier if value <= 1: value = 1 n = math.log(307200.0 / resolution) / math.log(4.0) * -1 radius = value * float(self.multiplicator_vraySettings_imap_detailRadius) ** n if pm.attributeQuery('imap_detailRadius', n='vraySettings', ex=True): if not self.vraySettings.imap_detailRadius.get(lock=True): self.vraySettings.imap_detailRadius.set(radius) multiplier = (float(self.vraySettings_imap_detailSubdivsMultH) - float(self.vraySettings_imap_detailSubdivsMultM)) / 50 minValue = float(self.vraySettings_imap_detailSubdivsMultM) - multiplier * 50 value = minValue + realQuality * multiplier if value <= 0.001: value = 0.001 if pm.attributeQuery('imap_detailSubdivsMult', n='vraySettings', ex=True): if not self.vraySettings.imap_detailSubdivsMult.get(lock=True): self.vraySettings.imap_detailSubdivsMult.set(value) realQuality = self.deeXVrayFastLastQuality enable = True if dicoOptimizationChooser: if dicoOptimizationChooser['OptimizationChooserLightCacheInt'][0]: realQuality += dicoOptimizationChooser['OptimizationChooserLightCacheInt'][1] if enable: multiplier = (float(self.vraySettings_subdivsH) - float(self.vraySettings_subdivsM)) / 50 minValue = float(self.vraySettings_subdivsM) - multiplier * 50 value = minValue + realQuality * multiplier if value <= 388: value = 388 if pm.attributeQuery('subdivs', n='vraySettings', ex=True): if not self.vraySettings.subdivs.get(lock=True): self.vraySettings.subdivs.set(value) multiplier = (float(self.vraySettings_sampleSizeM) - float(self.vraySettings_sampleSizeH)) / 50 minValue = float(self.vraySettings_sampleSizeM) + multiplier * 50 value = minValue - realQuality * multiplier if value >= 0.02: value = 0.02 if value <= 0.001: value = 0.001 if pm.attributeQuery('sampleSize', n='vraySettings', ex=True): if not self.vraySettings.sampleSize.get(lock=True): self.vraySettings.sampleSize.set(value) multiplier = (float(self.vraySettings_prefilterSamplesH) - float(self.vraySettings_prefilterSamplesM)) / 50 minValue = float(self.vraySettings_prefilterSamplesM) - multiplier * 50 value = minValue + realQuality * multiplier if value <= 11: value = 11 if pm.attributeQuery('prefilter', n='vraySettings', ex=True): if not self.vraySettings.prefilter.get(lock=True): self.vraySettings.prefilter.set(1) if pm.attributeQuery('prefilterSamples', n='vraySettings', ex=True): if not self.vraySettings.prefilterSamples.get(lock=True): self.vraySettings.prefilterSamples.set(value) if pm.attributeQuery('useForGlossy', n='vraySettings', ex=True): if not self.vraySettings.useForGlossy.get(lock=True): self.vraySettings.useForGlossy.set(1) if pm.attributeQuery('useRetraceThreshold', n='vraySettings', ex=True): if not self.vraySettings.useRetraceThreshold.get(lock=True): self.vraySettings.useRetraceThreshold.set(1) multiplier = (float(self.vraySettings_filterSamplesH) - float(self.vraySettings_filterSamplesM)) / 50 minValue = float(self.vraySettings_filterSamplesM) - multiplier * 50 value = minValue + realQuality * multiplier if value <= 3: value = 3 if pm.attributeQuery('filterSamples', n='vraySettings', ex=True): if not self.vraySettings.filterSamples.get(lock=True): self.vraySettings.filterSamples.set(value) line = 'string $core[] = `hardware -npr`;\nvraySettings.numPasses = $core[0];' if not pm.objExists('deeXVrayFastExpression'): pm.expression(n='deeXVrayFastExpression', s=line) else: actualExpression = pm.expression('deeXVrayFastExpression', s=True, query=True) if line not in actualExpression: pm.expression('deeXVrayFastExpression', edit=True, s=actualExpression + '\n' + line) else: line = 'string $core[] = `hardware -npr`;\nvraySettings.numPasses = $core[0];' if pm.objExists('deeXVrayFastExpression'): actualExpression = pm.expression('deeXVrayFastExpression', s=True, query=True) if line in actualExpression: pm.expression('deeXVrayFastExpression', edit=True, s=actualExpression.replace(line, '')) realQuality = self.deeXVrayFastLastQuality enable = True if dicoOptimizationChooser: if dicoOptimizationChooser['OptimizationChooserDMCSamplerInt'][0]: realQuality += dicoOptimizationChooser['OptimizationChooserDMCSamplerInt'][1] if enable: multiplier = (float(self.vraySettings_dmcs_adaptiveAmountM) - float(self.vraySettings_dmcs_adaptiveAmountH)) / 50 minValue = float(self.vraySettings_dmcs_adaptiveAmountM) + multiplier * 50 value = minValue - realQuality * multiplier if value >= 1.0: value = 1.0 if value <= 0.001: value = 0.001 if pm.attributeQuery('dmcs_adaptiveAmount', n='vraySettings', ex=True): if not self.vraySettings.dmcs_adaptiveAmount.get(lock=True): self.vraySettings.dmcs_adaptiveAmount.set(value) multiplier = (float(self.vraySettings_dmcs_adaptiveThresholdM) - float(self.vraySettings_dmcs_adaptiveThresholdH)) / 50 minValue = float(self.vraySettings_dmcs_adaptiveThresholdM) + multiplier * 50 value = minValue - realQuality * multiplier if value <= 0.001: value = 0.001 if pm.attributeQuery('dmcs_adaptiveThreshold', n='vraySettings', ex=True): if not self.vraySettings.dmcs_adaptiveThreshold.get(lock=True): self.vraySettings.dmcs_adaptiveThreshold.set(value) multiplier = (float(self.vraySettings_dmcs_adaptiveMinSamplesH) - float(self.vraySettings_dmcs_adaptiveMinSamplesM)) / 50 minValue = float(self.vraySettings_dmcs_adaptiveMinSamplesM) - multiplier * 50 value = minValue + realQuality * multiplier if value <= 8.0: value = 8.0 if pm.attributeQuery('dmcs_adaptiveMinSamples', n='vraySettings', ex=True): if not self.vraySettings.dmcs_adaptiveMinSamples.get(lock=True): self.vraySettings.dmcs_adaptiveMinSamples.set(value) multiplier = (float(self.vraySettings_dmcs_subdivsMultH) - float(self.vraySettings_dmcs_subdivsMultM)) / 50 minValue = float(self.vraySettings_dmcs_subdivsMultM) - multiplier * 50 value = minValue + realQuality * multiplier if value <= 0.5: value = 0.5 if pm.attributeQuery('dmcs_subdivsMult', n='vraySettings', ex=True): if not self.vraySettings.dmcs_subdivsMult.get(lock=True): self.vraySettings.dmcs_subdivsMult.set(value) realQuality = self.deeXVrayFastLastQuality enable = True if dicoOptimizationChooser: if dicoOptimizationChooser['OptimizationChooserSystemInt'][0]: realQuality += dicoOptimizationChooser['OptimizationChooserSystemInt'][1] if enable: if pm.attributeQuery('ddisplac_maxSubdivs', n='vraySettings', ex=True): if not self.vraySettings.ddisplac_maxSubdivs.get(lock=True): self.vraySettings.ddisplac_maxSubdivs.set(23) if pm.attributeQuery('sys_regsgen_xylocked', n='vraySettings', ex=True): if not self.vraySettings.sys_regsgen_xylocked.get(lock=True): self.vraySettings.sys_regsgen_xylocked.set(0) core = int(pm.hardware(npr=True)[0]) count = 0 value = 60 for bucketSize in [self.vraySettings.width.get(), self.vraySettings.height.get()]: finalValue = 0 lastValue = 80 for i in range(40, 80): if bucketSize % i <= lastValue: lastValue = bucketSize % i if lastValue == 0: finalValue = i else: finalValue = i + 1 if count == 0: if self.vraySettings.width.get() <= 40 * core: value = math.ceil(self.vraySettings.width.get() / int(core)) if value <= 1: value = 1 if pm.attributeQuery('sys_regsgen_xc', n='vraySettings', ex=True): if not self.vraySettings.sys_regsgen_xc.get(lock=True): self.vraySettings.sys_regsgen_xc.set(value) else: value = finalValue if value <= 1: value = 1 if pm.attributeQuery('sys_regsgen_xc', n='vraySettings', ex=True): if not self.vraySettings.sys_regsgen_xc.get(lock=True): self.vraySettings.sys_regsgen_xc.set(value) elif self.vraySettings.height.get() <= 40 * core: value = math.ceil(self.vraySettings.height.get() / int(core)) if value <= 1: value = 1 if pm.attributeQuery('sys_regsgen_yc', n='vraySettings', ex=True): if not self.vraySettings.sys_regsgen_yc.get(lock=True): self.vraySettings.sys_regsgen_yc.set(value) else: value = finalValue if value <= 1: value = 1 if pm.attributeQuery('sys_regsgen_yc', n='vraySettings', ex=True): if not self.vraySettings.sys_regsgen_yc.get(lock=True): self.vraySettings.sys_regsgen_yc.set(value) count += 1 if pm.attributeQuery('sys_regsgen_seqtype', n='vraySettings', ex=True): if not self.vraySettings.sys_regsgen_seqtype.get(lock=True): self.vraySettings.sys_regsgen_seqtype.set(3) line = 'python("import maya.cmds as cmds\\nvalue = cmds.memory(phy=True, megaByte=True)\\nif isinstance( value, int ):\\n\\tmemory = float(value)\\nelse:\\n\\tmemory = float(value[0])");\nfloat $memory = `python "memory"`;\nvraySettings.sys_rayc_dynMemLimit = $memory - 1500;' if not pm.objExists('deeXVrayFastExpression'): pm.expression(n='deeXVrayFastExpression', s=line) else: actualExpression = pm.expression('deeXVrayFastExpression', s=True, query=True) if line not in actualExpression: pm.expression('deeXVrayFastExpression', edit=True, s=actualExpression + '\n' + line) else: line = 'python("import maya.cmds as cmds\\nvalue = cmds.memory(phy=True, megaByte=True)\\nif isinstance( value, int ):\\n\\tmemory = float(value)\\nelse:\\n\\tmemory = float(value[0])");\nfloat $memory = `python "memory"`;\nvraySettings.sys_rayc_dynMemLimit = $memory - 1500;' if pm.objExists('deeXVrayFastExpression'): actualExpression = pm.expression('deeXVrayFastExpression', s=True, query=True) if line in actualExpression: pm.expression('deeXVrayFastExpression', edit=True, s=actualExpression.replace(line, ''))
def createRivet(self): """ Create one rivet for each selected vertex """ selObjs = pm.ls(selection=True) if not selObjs: ## Nothing is selected, so print out warning and raise error print( self.emsgPleaseSelect ) return #raise Exception, self.emsgPleaseSelect self.originalSel = selObjs #### Store this step of of the selection in case we want it again later uvs = [] uvs.extend( pm.polyListComponentConversion( selObjs, tuv=True ) ) #### Change this to the full version #uvs.extend( [uv for uv in selObjs if '.uv' in uv] ) #### This is a very good list comprehension, perhaps expand it though ## the extend method of a list adds all items from another given list to the list uvsFromNurbs = [] for i in selObjs: if pm.objectType( i ) == 'nurbsSurface' : uvs.append( i ) ## select our new, smaller/filtered uvs pm.select( uvs ) uvs = pm.ls( flatten = True, selection = True ) ## The flatten command returns each component individually in the list, rather than using strings that specify ranges of selections. It takes more RAM but is often much more suitable to work with. ## Create a group so that we can organize the rivets - **** Note that this should be improved with the MmmmTools upcoming unique naming system if not pm.objExists('_follicle_grp'): #### This line and the next should eventually be improved to not use a hardcoded name group = pm.group( em = True, w=True, n='_follicle_grp' ) #### **** Totally recreate this line, use a variable name or at least a unique one else: group = pm.PyNode('_follicle_grp') rivets = [] pm.select( selObjs ) failCount = 0 ## Give an error msg if the user didn't use the script on a compatible selection if not uvs: failCount += 1 print( self.emsgPleaseSelect ) ## Everything is good, proceed to investigate and create rivets for uv in uvs: ## The commented out print line are simple useful for debugging print pm.objectType( uv ) objShapeName, index = tuple( uv.split( '.', 1 ) ) obj = pm.PyNode( objShapeName ) loc = pm.createNode( 'locator' ) tr = getT( loc ) #print( "Transform was: " + tr ) hair = pm.createNode( 'follicle', parent = tr ) pm.parent( tr, group ) #### This line sucks because it's using a f*****g stupid name again rivets.append( tr ) ## Poly mesh handler if pm.objectType( obj ) == 'mesh': obj.outMesh >> hair.inputMesh uvPos = pm.polyEditUV( uv, query=True ) ## Nurbs surface handler elif pm.objectType( obj ) == 'nurbsSurface': obj.local >> hair.inputSurface ## The index is a messy string, so we need to pull uv data out of it uvTuple = ( index.strip('.uv[]').split('][') ) ## We need to create the tuple as floats, because we got it as strings uvPos = ( float(uvTuple[0]), float(uvTuple[1]) ) #uvPos = ( uvTuple[0], uv[1] )#index.strip('.uv[]').split('][') ## Handle conditions where the uvs aren't normalized, this may not be required often maxU = float( obj.maxValueU.get() ) maxV = float( obj.maxValueV.get() ) uvPos = ( uvPos[0]/maxU, uvPos[1]/maxV ) ## Handle other cases, where this script can't do anything useful else: print( obj + ' with uv: ' + uv + \ ' was incompatible, it much be either polygons or Nurbs' ) failCount += 1 continue u, v = uvPos ## Make the hair follow the model, both by parenting, and by keeping its translate and rotate matched obj.worldMatrix >> hair.inputWorldMatrix hair.outTranslate >> tr.translate hair.outRotate >> tr.rotate ## Note: The hair has no outScale ## Set the u and v parameters of the hair so that it sticks to the correct place on the model hair.parameterU.set( u ) hair.parameterV.set( v ) ## Put the rivet into a group so we can select it afterwards self.lastRivetsCreated.append( loc ) ## Select all the new rivets we created pm.select( self.lastRivetsCreated, replace=True ) if failCount: print( str(failCount) + """ rivets failed to be created. Most likely because the selection was not correct. Try selecting vertices on a nurbs surface or a polygon mesh and running the script again. """) else: print( self.msgSucess ) return
def importPass(self, paths = list()): if not paths: return for path in paths: splited = path.split('.') splited.pop(-1) arpassinfo = '.'.join(splited) + '.arpassinfo' strFile = self.readTxtFile(path=arpassinfo) objectsNotFound = [] if strFile: dico = eval(strFile) if not pm.objExists(dico['layer']['name']): renderLayer = pm.createRenderLayer(name=dico['layer']['name'], g=dico['layer']['global']) else: renderLayer = pm.PyNode(dico['layer']['name']) arsenalPassName = renderLayer.name() + '_arsenalPass' if pm.objExists(arsenalPassName): pm.lockNode(arsenalPassName, lock=False) pm.delete(arsenalPassName) pm.importFile(path, defaultNamespace=True) if renderLayer.name() != 'defaultRenderLayer': for member in dico['layer']['members']: listMembers = dico['layer']['members'][member] if pm.objExists(listMembers[0]): renderLayer.addMembers(listMembers[0]) elif pm.objExists(listMembers[1]): if len(pm.ls(listMembers[1])) == 1: renderLayer.addMembers(listMembers[1]) elif pm.objExists(listMembers[2]): if len(pm.ls(listMembers[2])) == 1: renderLayer.addMembers(listMembers[2]) elif pm.objExists(listMembers[3]): if len(pm.ls(listMembers[3])) == 1: renderLayer.addMembers(listMembers[3]) else: objectsNotFound.append(listMembers[0]) for member in dico['connections']: dicoMembers = dico['connections'][member] dsts = dicoMembers['destination'] listMembers = dicoMembers['sources'] if pm.objExists(listMembers[0]): for dst in dsts: pm.connectAttr(listMembers[0], dst, f=True) elif pm.objExists(listMembers[1]): if len(pm.ls(listMembers[1])) == 1: for dst in dsts: pm.connectAttr(listMembers[1], dst, f=True) elif pm.objExists(listMembers[2]): if len(pm.ls(listMembers[2])) == 1: for dst in dsts: pm.connectAttr(listMembers[2], dst, f=True) elif pm.objExists(listMembers[3]): if len(pm.ls(listMembers[3])) == 1: for dst in dsts: pm.connectAttr(listMembers[3], dst, f=True) else: OpenMaya.MGlobal.displayError('[Arsenal] Can not open ' + arpassinfo) return if objectsNotFound: OpenMaya.MGlobal.displayError('[Arsenal] Object(s) not found in the scene : \n' + '\n'.join(objectsNotFound)) return self.refreshArsenalPass()
def refreshArsenalPass(self, progressBarUpdate = None): allRenderLayers = pm.RenderLayer.listAllRenderLayers() for myRenderLayer in allRenderLayers: arsenalPassName = myRenderLayer.name() + '_arsenalPass' aresenalConnected = myRenderLayer.listConnections(destination=True, source=False, type='arsenalPass') ajustements = pm.editRenderLayerAdjustment(myRenderLayer, query=True, layer=True) if len(aresenalConnected) == 0: if not pm.objExists(arsenalPassName): pm.createNode('arsenalPass', name=arsenalPassName) pm.lockNode(arsenalPassName, lock=True) pm.connectAttr(myRenderLayer.name() + '.message', arsenalPassName + '.passName', force=True) elif str(aresenalConnected[0]) != arsenalPassName: pm.lockNode(aresenalConnected[0], lock=False) pm.rename(aresenalConnected[0], arsenalPassName) pm.lockNode(arsenalPassName, lock=True) self.passName[myRenderLayer].passName = myRenderLayer.name() attributesFastArsenal = ['lightSelectAllNormal', 'lightSelectAllDiffuse', 'lightSelectAllRaw', 'lightSelectAllSpecular', 'vrayLambert', 'multimatteMaskName', 'vrayMaterialID', 'vrayProxyObjectID'] attributesFastVray = ['giOn', 'primaryEngine', 'secondaryEngine', 'imap_detailEnhancement', 'aoOn', 'globopt_mtl_glossy', 'globopt_mtl_reflectionRefraction', 'globopt_mtl_doMaps', 'globopt_light_doShadows', 'aaFilterOn', 'globopt_geom_displacement', 'cam_mbOn', 'cam_dofOn', 'cam_overrideEnvtex', 'sys_distributed_rendering_on'] attributesConnectionArsenal = ['passMembers', 'blackHoleMembers', 'blackHoleMembersReceiveShd', 'giMembersGenerate', 'giMembersReceive', 'primaryMembersOff', 'reflectionMembersOff', 'refractionMembersOff', 'shadowCastsMembersOff', 'lightSelectNormalMembers', 'lightSelectDiffuseMembers', 'lightSelectRawMembers', 'lightSelectSpecularMembers'] self.multiMatteAttributes(myRenderLayer=myRenderLayer, attributesConnectionArsenal=attributesConnectionArsenal) for (i, attribut,) in enumerate(attributesFastArsenal): if progressBarUpdate is not None: progressBarUpdate(numStep=100, value=i, text='Pass ' + myRenderLayer.name() + ' step 2 : init FastArsenal %v of %m ...') self.initAttributes(attribut=attribut, renderPass=myRenderLayer) for (i, attribut,) in enumerate(attributesFastVray): self.initAttributes(attribut=attribut, renderPass=myRenderLayer, fromRenderGlobal=True) if progressBarUpdate is not None: progressBarUpdate(numStep=100, value=i, text='Pass ' + myRenderLayer.name() + ' step 3 : init FastVray %v of %m ...') if myRenderLayer.name() != 'defaultRenderLayer': if ajustements is None or 'vraySettings.' + attribut not in ajustements: self.overrideAttribute(renderPass=myRenderLayer, node=arsenalPassName, attribute=attribut, always=True) else: self.overrideAttribute(renderPass=myRenderLayer, node=arsenalPassName, attribute=attribut, always=False) for (i, attribut,) in enumerate(attributesConnectionArsenal): if progressBarUpdate is not None: progressBarUpdate(numStep=100, value=i, text='Pass ' + myRenderLayer.name() + ' step 4 : init FastConnection %v of %m ...') self.initAttributes(attribut=attribut, renderPass=myRenderLayer, connection=True) if progressBarUpdate is not None: progressBarUpdate(numStep=100, value=100, text='Done...')
def find(self, name): return pm.objExists(name)