如何在 Python 脚本中为 Autodesk Maya 2016 中的对象添加颜色?

Posted

技术标签:

【中文标题】如何在 Python 脚本中为 Autodesk Maya 2016 中的对象添加颜色?【英文标题】:How to add a color to an object in Autodesk Maya 2016 in Python scripts? 【发布时间】:2015-10-11 16:39:47 【问题描述】:

我是 Autodesk Maya 的新手。 我在互联网上查找了一些有关如何在 python 脚本中命令的详细信息,以在选择对象时更改其颜色。 我知道如何查看选定的对象,但是,我没有成功更改颜色。 我使用了这个功能 -

enter code here

   'result = cmds.ls(orderedSelection =True)
    Trans = result[0]
    cmds.color(Trans,userDefined =8 ) '

当我按下一个对象时,它被选中,但它的颜色没有改变。

如果你能帮助我会很有帮助.. :)

【问题讨论】:

你想换什么颜色?线框颜色还是整个材质颜色? 您好,感谢您的回答。 我想改变整个颜色。确切的颜色并不重要,但我们可以说红色...... 【参考方案1】:

这是一个大致的方法:

import maya.cmds as cmds

selections = cmds.ls(sl=True)

for sel in selections:
    # get shape of selection:
    sel_shape = cmds.ls(o=True, shapes=True)
    # get shading groups from shape:
    shadingGrps = cmds.listConnections(sel_shape,type='shadingEngine')
    # get the shaders:
    shaders = cmds.ls(cmds.listConnections(shadingGrps),materials=True)
    # change the color of the material to red
    cmds.setAttr(shaders[0]+".color", 1, 0, 0, type="double3")

选择你想要的并运行脚本。

注意:如果多个对象共享相同的材质,选择一个会改变所有其他对象的颜色。

(如果你想在不运行脚本的情况下选择对象时改变材质颜色,你必须看看maya python命令scriptJob

【讨论】:

我会更好地解释它 - 我有一块由 8*8 的 polyCubs 制成的板。我想更改靠近我按下位置​​的 2 个立方体的颜色。在我选择另一个多维数据集或双选选定的多维数据集后,我希望这些多维数据集返回到它们的上一个。颜色。【参考方案2】:

您可以使用两步过程设置线颜色:

# there are 32 wire color numbered 0 to 31   
cmds.setAttr(your_object + ".displayOverride", 1)
cmds.setAttr(your_object + ".overrideColor", color)

要设置表面颜色,您必须有一种方法可以为每种材料分配单独的颜色。简单的答案是为每个对象提供自己的材质并通过设置材质的 .color 属性来控制颜色,如@Ale_32 的示例中所示。您可以按照那里的建议使用 selectionChanged scriptJob 来更改颜色。

如果您不希望周围有太多材质,您还可以创建一个着色器,使用tripleShadingSwitch 节点来驱动其颜色。 TripleShadingSwitch 将为您的每个对象提供输入,您可以使用开关中对象的索引直接设置颜色:

 def set_indexed_color(switchNode, index, color):
     cmds.setAttr(switchNode+ ".input[%i]" % index, *color)
 # note: that asterisk is important, since color is a 3-piece
 # value like [1,0,1]

如果你不是手动设置,你可以找出传入的对象正在使用什么

def get_input_shapes(switchNode):
    input_count = cmds.getAttr(switchNode + ".input", size=True)
    results = 
    for item in range(input_count):
        inshape = cmds.listConnections(switchNode + ".input[%i].inShape" % item)[0]
        results[inshape] = item
    return results

这会给你一个字典,将形状映射到它们的索引号

【讨论】:

以上是关于如何在 Python 脚本中为 Autodesk Maya 2016 中的对象添加颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 脚本中为导入的类获得相同的范围? [复制]

在 Autodesk Forge Viewer 中为对象着色的最佳方法

Havok Vision 游戏引擎:在 Visual Studio 中为 Android 编译 Autodesk Scaleform

Autodesk Inventor VBA 脚本

如何在python中为接口分配IP地址?

如何在python中为接口分配IP地址?