我知道的唯一方法是使用滑块:
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' )
如果没有使用滑块和/或没有分配材料,是否有更简单的方法?
答案 0 :(得分: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
您可以为个人分配着色器 一世 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
属性或颜色>控制。切换显示颜色属性菜单项。