更改所有已分配网格上的着色器,而不使用hyperShade()

问题描述 投票:1回答:2

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

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

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

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

有什么可以改变我的函数的最后两行来使它工作?

python maya
2个回答
0
投票

以下是使用cmds.sets()分配着色器的示例:

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

您可以猜测,使用材质查询网格:

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

0
投票

我得到它与:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.