Materials 関係の Tips
Material を作成・アサインする
Pymel の場合
import pymel.core as pm
shader , shadingEngine = pm . createSurfaceShader ( "lambert" )
# forceElement にはノード名を入れる(string or list or pyNode)
pm . sets ( shadingEngine , forceElement = "pCube1" )
maya.cmds の場合
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 の場合
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