通过Python在Maya中更改多边形的颜色

2024-06-18 13:09:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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' )

不使用滑块和/或不指定材质是否有更简单的方法?


Tags: 方法importtrueasrgbhsvlabel滑块
1条回答
网友
1楼 · 发布于 2024-06-18 13:09:54

如果您只想为现有的着色器指定一个新颜色,它是一个简单的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节点。shader ball(您手工编辑的东西)与shadingEngine的.surfaceMaterial属性相连接,您可以像我上面所做的那样获得它。

如果要更改面的颜色而不指定明暗器,则要改为生成顶点颜色。菜单是Color>;Apply Color,命令是polyColorPerVertex (faces, rgb=(r,g,b)。所以在立方体上设置一个面的颜色看起来像

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

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

相关问题 更多 >