Maya 使用 cmds 创建着色器不会出现在 hypershade 中

Maya creating shader with cmds does not appear in hypershade

使用 Maya 2014/2015 创建着色器,如下所示:

import maya.cmds as cmds
my_shader = cmds.createNode('lambert', n='mine')

将创建此结果。

有人知道如何让该着色器反映在 hypershade 中吗?

着色器是一种略有不同的节点类型:

cmds.shadingNode('lambert', asShader=1)

您还需要创建一个 shadingEngine 节点,我们通常称之为 ShaderGroups 或 SG:

cmds.shadingNode('shadingEngine', asUtility=1)

并将着色器的.outColor连接到SG的.surfaceShader属性。 SG 节点实际上是 Maya 集的子类,要为其指定对象或面,请使用 sets 命令。

为完整性添加答案:

在某些情况下(即 ShaderFx 着色器),您需要将 material 连接到场景的 defaultShaderList1 节点的下一个可用插头。

import maya.cmds as mc

material = mc.shadingNode('lambert', asShader=True)
shading_engine = mc.sets(name="%sSG" % material, empty=True, renderable=True, noSurfaceShader=True)
mc.connectAttr('%s.outColor' % material, '%s.surfaceShader' % shading_engine)
mc.connectAttr('%s.msg'%material, ':defaultShaderList1.s', na=True)