zoukankan      html  css  js  c++  java
  • Maya script 根据 face id 获得 material list

    Maya script 根据 face id 获得 material list

    UE4导入FBX,对于单个物体来说,材质槽的顺序是根据面id来排材质的(多个物体合并可能是另外一种方式)

    # -*- coding: utf-8 -*-
    import maya.mel as mel
    import maya.cmds as cmds
    
    import re
    
    def getMeshShadingEngines(obj):
        meshList = []
        shadeEngs = []
        if cmds.objectType(obj) == 'mesh':
            meshList.append(obj)
        else:
            meshList = cmds.listRelatives(obj, shapes= 1)
        if meshList:
            shadeEngs = cmds.listConnections(meshList, type = "shadingEngine")    
        return shadeEngs
    
    def getShadingEngineSurfaceShader(shadeEngs):
        connections = cmds.listConnections(shadeEngs, c = 1)        
        materials = [connections[i + 1] for i in range(0, len(connections), 2) if '.surfaceShader' in connections[i]]  
        return materials
    
    def getMeshMaterials(obj):
        #materials = []
        shadeEngs = getMeshShadingEngines(obj)  
        materials = getShadingEngineSurfaceShader(shadeEngs)
        materials = cmds.ls(materials, materials = True)
        
        if materials:
            materials = list(set(materials))
        else:
            materials = []
        return materials
    
    def getMaterialColorTexturePath(mat):
        textureFile = ''
        try:
            fileNode = cmds.listConnections('%s.color' % (mat), type='file')
            textureFile = cmds.getAttr("%s.fileTextureName" % fileNode[0])
        except:
            pass
        return textureFile
    
    def getFacesByMaterial(obj, mat):
        sels_pre = cmds.ls(sl = 1)
        cmds.hyperShade(objects = mat)
        objs = cmds.ls(sl = True)
        objs = [o for o in objs if obj in o]
        cmds.select(sels_pre, r = True)
        return objs
    
    def getObjectMaterialsByFaceId(obj):
        shadeEngs = getMeshShadingEngines(obj)
        shadeEngs = list(set(shadeEngs))
        len(shadeEngs)
        mat_list = []
        if len(shadeEngs) > 1:
            mat_list = [[min([int(re.search('%s.f[(.*)]' % obj, m).group(1).split(':')[0]) for m in cmds.sets(sg, q = 1) if re.search('%s.f[(.*)]' % obj, m)]), sg] for sg in shadeEngs]
            mat_list.sort( key = lambda x: x[0])
            mat_list = [item[1] for item in mat_list]
            mat_list = [getShadingEngineSurfaceShader(sg)[0] for sg in mat_list]
        elif len(shadeEngs) == 1:
            mat_list.append(getShadingEngineSurfaceShader(shadeEngs[0])[0])
        return mat_list
    未经博主允许,禁止直接转载本博客任何内容(可以在文章中添加链接,禁止原文照搬),如需直接原文转载对应文章,请在该文章中留言联系博主,谢谢!!
  • 相关阅读:
    栈和队列的概念
    01-开始使用django(全、简)
    临时记录01
    centos删除乱码名称的文件
    《计算机网络》谢希仁(第7版) 第一章
    git提交到远程虚拟机
    安全篇:弱密码python检测工具
    正向代理、Nginx(反向代理、负载均衡、静态资源服务器)
    列表去重、去除满足一定条件的元素
    editplus的常用快捷键
  • 原文地址:https://www.cnblogs.com/ibingshan/p/14930356.html
Copyright © 2011-2022 走看看