0

我知道的唯一方法是使用滑块:

import maya.cmds as cmds

cmds.colorSliderGrp( 'polygonColour', label = "Colour", hsv = ( 1, 1, 1 ) )

然后从中获取RGB值:

rgb = cmds.colorSliderGrp( 'polygonColour', query = True, rgbValue = True )

然后将材质分配给多边形并赋予该材质颜色:

myShader = cmds.shadingNode( 'lambert', asShader = True, name = "polygonMaterial" )
cmds.setAttr( 'polygon1' + ":blockMaterial.color", rgb[ 0 ], rgb[ 1 ], rgb[ 2 ], type = 'double3' )

有没有更简单的方法而不使用滑块和/或不分配材料?

4

1 回答 1

0

如果您只想为现有着色器分配新颜色,它很简单setAttr()。每个着色器都有自己的属性集,因此您需要设置的确切值取决于您想要的着色器类型,但对于常见情况(lambert、phong 和 blinn),它只是.color属性。设置颜色就像传入你想要的 RGB 值一样简单:

 cmds.setAttr(shader + '.color', 0, 1, 0)  # green

在特定的面上获取着色器并不容易。最简单的方法是拿到你的脸并检查所有 shadingEngine 节点:

 for shadingEngine in cmds.ls(type="shadingEngine"):
     if cmds.sets('pCube1.f[0]', im=shadingEngine):
        shaderball = cmds.listConnections(sshadingEngine, type = 'lambert')[0]
        print "face is assigned to %s" % shaderball

您可以通过 i cmds.sets('pCube1.f[99]', fe='initialShadingGroup') 将着色器分配给面

其中的参数fe是 shadingEngine 节点。着色器球——你手动编辑的东西——连接到 shadingEngine 的.surfaceMaterial属性,你可以按照我上面的方法得到它。

如果要在没有着色器分配的情况下更改面的颜色,则要改为使用顶点颜色。菜单是颜色 > 应用颜色,命令是polyColorPerVertex (faces, rgb=(r,g,b)。所以在立方体上设置一张脸的颜色看起来像

 cmds.polyColorPerVertex('pCube1', rgb=(1,0,0)) # red

视口中顶点颜色的显示由.displayColors属性或“颜色”>“切换显示颜色属性”菜单项控制。

于 2015-03-18T20:32:31.773 回答