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
    未经博主允许,禁止直接转载本博客任何内容(可以在文章中添加链接,禁止原文照搬),如需直接原文转载对应文章,请在该文章中留言联系博主,谢谢!!
  • 相关阅读:
    web在线调试
    BAPI 注意事项
    HR 删除工资数据
    Python 量化交易安装步骤
    日期金额格式问题
    SD_BAPI
    BAPI
    7.6 yum更换国内源 7.7 yum下载rpm包 7.8/7.9 源码包安装
    安装软件包的三种方法 rpm包介绍 rpm工具用法 yum工具用法 yum搭建本地仓库(
    zip压缩工具 tar打包 打包并压缩
  • 原文地址:https://www.cnblogs.com/ibingshan/p/14930356.html
Copyright © 2011-2022 走看看