コード例 #1
0
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
コード例 #2
0
 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)
コード例 #3
0
 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
コード例 #4
0
ファイル: alfredCam.py プロジェクト: lefan2016/AlfredCam
 def delete(self):
     #self.unlockNodes()
     rigNode = self.getRigNode()
     conNodes = rigNode.connections()
     for node in conNodes:
         if pm.objExists(node):
             pm.delete(node)
コード例 #5
0
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
コード例 #6
0
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)
コード例 #7
0
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    
コード例 #8
0
    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
コード例 #9
0
 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
コード例 #10
0
 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()
コード例 #11
0
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
コード例 #12
0
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)
コード例 #13
0
ファイル: arsenal.py プロジェクト: tws0002/MS_Research
 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
コード例 #14
0
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)
コード例 #15
0
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
コード例 #16
0
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
コード例 #17
0
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)
コード例 #18
0
    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.'
コード例 #19
0
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]
コード例 #20
0
ファイル: arsenal.py プロジェクト: tws0002/MS_Research
    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]
コード例 #21
0
ファイル: lightUtils.py プロジェクト: lefan2016/LightIO
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'렌더 셋팅을 성공 적으로 저장 했습니다.'
コード例 #22
0
ファイル: arsenal.py プロジェクト: tws0002/MS_Research
 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)
コード例 #23
0
ファイル: arsenal.py プロジェクト: tws0002/MS_Research
 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
コード例 #24
0
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)
コード例 #25
0
ファイル: arsenal.py プロジェクト: tws0002/MS_Research
 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
コード例 #26
0
 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
コード例 #27
0
    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'
コード例 #28
0
ファイル: arsenal.py プロジェクト: tws0002/MS_Research
 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
コード例 #29
0
ファイル: lightUtils.py プロジェクト: lefan2016/LightIO
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'렌더 셋팅을 성공 적으로 로드 하였습니다.'
コード例 #30
0
    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
コード例 #31
0
    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)
コード例 #32
0
	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)
コード例 #33
0
    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, ''))
コード例 #34
0
    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       
コード例 #35
0
ファイル: arsenal.py プロジェクト: davidpower/MS_Research
    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()
コード例 #36
0
ファイル: arsenal.py プロジェクト: tws0002/MS_Research
    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...')
コード例 #37
0
ファイル: alfredCam.py プロジェクト: lefan2016/AlfredCam
 def find(self, name):
     return pm.objExists(name)