Skip to content

Materials 関係の Tips

Material を作成・アサインする

Pymel の場合

1
2
3
4
import pymel.core as pm
shader , shadingEngine = pm.createSurfaceShader("lambert")
# forceElement にはノード名を入れる(string or list or pyNode)
pm.sets(shadingEngine,forceElement="pCube1")

maya.cmds の場合

1
2
3
4
5
6
import maya.cmds as mc

shader        = mc.shadingNode("lambert",asShader=True)
shadingEngine = mc.sets(noSurfaceShader=True,renderable=True,empty=True)
mc.connectAttr(shader + ".outColor", shadingEngine + ".surfaceShader")
mc.sets("pCube1",e=True, forceElement=shadingEngine)

使用されているマテリアルか調べる

Material の Assign は Sets(ShadingEngine)で管理している。
ので、アサインされているかどうかは、Sets に含まれているかどうかで判定することができる。

maya.cmds の場合

1
2
3
4
5
6
7
8
def is_used_materials(mat_name):

    sg_list = mc.listConnections(mat_name + ".outColor")
    if len(sg_list) == 0:
        return False
    if mc.sets(sg_list[0],q=True, size=True) == 0:
        return False
    return True

pymel の場合

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def is_used_materials(mat_name):

    if isinstance(mat_name,str) is True:
        mat_name = pm.PyNode(mat_name)

    sg_nodes = mat_name.outColor.connections()
    if len(sg_nodes) == 0:
        return False
    sg = sg_nodes[0]
    if len(sg.members()) == 0:
        return False
    return True