循环maya中的颜色值

时间:2017-09-30 21:54:57

标签: 3d maya mel

有人可以帮我解决这个简单的脚本。

我只是想应用数组中的材质颜色。

这就是我现在所拥有的。 如何链接以便我的素材2(" colors2")查找值$dp_matColor[3]$dp_matColor[4]$dp_matColor[5]

看起来我需要一个if语句,但不确定我需要添加什么条件。

BTW我将有两种以上的材料

我的最终目标是根据$list_of_names[]创建按钮,并从$dp_matColor[]获取背景颜色。 当我点击时,它将通过使用相同的数组创建基于下面for循环的材料。

目前,我可以通过为每种颜色设置一个程序来实现这一点,但是有很多重复的脚本。

string $list_of_names[] = {"color1", "color2"};
float $dp_matColor[] = { 1.0, 0.5, 0.5,0.5, 0.5, 1.0};

for ($eachName in $list_of_names){
    shadingNode -asShader VRayMtl -n $eachName;
    setAttr ($eachName + ".color") -type double3 $dp_matColor[] $dp_matColor[] $dp_matColor[];   
} 

1 个答案:

答案 0 :(得分:0)

如果你使用python,你可以构建你的数据,以便更容易地循环遍历它:

import maya.cmds as mc

data = [('color1', (1.0, 0.5, 0.5)), ('color2', (0.5, 0.5, 1.0))]

for name, values in data:
    shader = mc.shadingNode(asShader='VRayMtl', n=name)
    mc.setAttr('%s.color' %shader, values, type='double3')

我没有对其进行测试以确保其有效...您可能需要将值分别设置为:values[0], values[1], values[3]。您还可以使用字典来存储数据,或者创建2个彼此同步的列表......以及开启和开启(这么多选项......)

但是尝试用梅尔来做,这可能会有效(因为我已经使用了梅尔已经有一段时间了......所以请原谅我,如果它不起作用......但概念就在那里......) :

string $list_of_names[] = {"color1", "color2"};
float $dp_matColor[] = { 1.0, 0.5, 0.5,0.5, 0.5, 1.0};

for (i=0;i<size($list_of_names);i++){
    shadingNode -asShader VRayMtl -n $list_of_names[i];
    int $index = i * 3;
    setAttr ($list_of_names[i] + ".color") -type double3 $dp_matColor[$index] $dp_matColor[($index+1)] $dp_matColor[($index+2)];   
}