在所有指定的网格上更改着色器,而不使用 hyperShade()

change shader on all assigned meshes, without using hyperShade()

我将所有形状分配给 baseMaterial,select 形状,然后分配 occlusionShader。

for materialClass in materialClassList:
    select(materialClass.baseMaterial)
    hyperShade(objects="")
    hyperShade(a=materialClass.occlusionShader)

工作正常,但如果我将它用作预渲染脚本:

  Error: line 0: hyperShade command not supported in batch mode

我可以将我的函数的最后两行更改为什么才能使其正常工作?

这是一个使用 cmds.sets() 分配着色器的示例:

all = cmds.ls(type='mesh')
shadingEngine = 'initialShadingGroup'
cmds.sets(all, e=True, forceElement=shadingEngine)

如您所料,使用 material 查询网格:

lamb1_mshs = cmds.sets(shadingEngine, q=True)

我可以使用它:

for materialClass in materialClassList:
    sets(materialClass.occlusionShadingGroup, e = True, forceElement = materialClass.meshList)

我现在在创建 materialClass 时收集网格,这比为每个渲染层选择它们更有意义。