我在Python中有这个脚本,我从命令行运行到maya文件中:
import maya.standalone
maya.standalone.initialize("Python")
import maya.cmds as cmds
from maya import cmds
import maya.mel as mel
import glob
def importFile(i):
cmds.file(i, i=True, groupReference=True, groupName="myobj")
def materialFile():
if cmds.objExists('Panel*'):
cmds.select("Panel*", replace=True)
myMaterial = "BlueGlass"
cmds.sets( e=True, forceElement= myMaterial + 'SG' )
if cmds.objExists('Body*'):
cmds.select("Body*", replace=True)
myMaterial3 = "Silver"
cmds.sets( e=True, forceElement= myMaterial3 + 'SG' )
但是当我尝试运行批处理文件时出现此错误:
File "/Users/../Scripts/MayaVectorScript.py", line 23, in materialFile
cmds.sets( e=True, forceElement= myMaterial + 'SG' )
TypeError: No object matches name: BlueGlassSG
在Hypershade中,着色器BlueGlass连接到具有相同名称BlueglassSG的着色器组(SG),并且脚本在maya内部的UI中工作。
我是否需要在脚本中加载插件或其他内容才能使其在批处理文件中运行?
答案 0 :(得分:0)
通过使用listConnections获取着色组而不是使用名称,可以减少一些潜在的错误。名称通常有效,但不保证。如果您错误地输入了材料名称,这仍然无法正常工作,但它应该让您更清楚地搞清楚:
import maya.cmds as cmds
def get_sg(shader):
sgs = cmds.ls(cmds.listHistory(shader, f=True) or [''], type='shadingEngine') or [None]
return sgs[0]
def assign(geometry, shader):
if not geometry:
cmds.error("No objects to assign")
sg = get_sg(shader)
if not sg:
cmds.error('could not find shader ' + shader)
cmds.sets(geometry, fe=sg)
assign(cmds.ls('Panel*'), 'BlueGlass')
assign(cmds.ls('Body*'), 'Silver')