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)
使用 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)