如何更改着色器颜色设置trhough Python Maya

如何更改着色器颜色设置trhough Python Maya,python,maya,Python,Maya,我有这个代码…我不明白为什么,每当我做for循环时,它不会改变立方体的颜色…我的意思是,在这种情况下,我调用函数“BookGen”5次…每次我随机化3个数字,但颜色不会改变 import maya.cmds as cmds def BookGen(myBlinn,myBlinn2,myBlinn3): myBook=cmds.polyCube(name='Book',h=8,w=4,d=2) #Create a testCube with that Name #Modeling

我有这个代码…我不明白为什么,每当我做for循环时,它不会改变立方体的颜色…我的意思是,在这种情况下,我调用函数“BookGen”5次…每次我随机化3个数字,但颜色不会改变

import maya.cmds as cmds
def BookGen(myBlinn,myBlinn2,myBlinn3):
    myBook=cmds.polyCube(name='Book',h=8,w=4,d=2) #Create a testCube with that Name

    #Modeling that I didn't include
    #//Cover Color
    Colors=[]
    for i in range(3):
        tmp=random.uniform(0.0,1.0) #Uniform function allow me to find a random FLOAT number between a range(not like randint!)
        Colors.append(tmp)  
    cmds.setAttr ( (myBlinn + '.color'), Colors[0],Colors[1],Colors[2], type = 'double3' )   
    cmds.select(myBook[0]+'.f[0:4]')
    cmds.hyperShade( assign=myBlinn )


def ShaderGen():
        #Add Color
        #//Pages Color
        myBlinn = cmds.shadingNode( 'blinn', asShader=True) 
        #cmds.setAttr ( (myBlinn + '.color'), 1.0,0.8,0.44, type = 'double3' ) 

        #//Cover Color   
        myBlinn2 = cmds.shadingNode( 'blinn', asShader=True)
        #cmds.setAttr ( (myBlinn2 + '.color'), 1.0,1.0,1.0, type = 'double3' )

        #//Cover Details Color
        myBlinn3 = cmds.shadingNode( 'blinn', asShader=True)
        #cmds.setAttr ( (myBlinn3 + '.color'), 1.0,1.0,1.0, type = 'double3' )

        return myBlinn,myBlinn2,myBlinn3

def BookShelf():

    NumberOfBooks=5 #Inserted from user
    myBlinn=''
    myBlinn2=''
    myBlinn3=''
    myBlinn,myBlinn2,myBlinn3=ShaderGen()


    myRowShelfGroup=cmds.group(em=True,n='RowShelfGroup')
    for i in range(NumberOfBooks):
        BookGen(myBlinn,myBlinn2,myBlinn3)


BookShelf()

您反复使用相同的shadernode,最后都使用相同的shadernode,因此所有对象上的颜色都相同。您需要在BookGen函数中移动myBlinn,myBlinn2,myBlinn3=ShaderGen(),以获取所需内容。。这是一个工作版本

import maya.cmds as cmds
import random 
def BookGen():
    myBook=cmds.polyCube(name='Book',h=8,w=4,d=2) #Create a testCube with that Name
    myBlinn,myBlinn2,myBlinn3=ShaderGen()
    #Modeling that I didn't include
    #//Cover Color
    Colors=[]
    for i in range(3):
        tmp=random.uniform(0.0,1.0) #Uniform function allow me to find a random FLOAT number between a range(not like randint!)
        Colors.append(tmp)  
    cmds.setAttr ( (myBlinn + '.color'), Colors[0],Colors[1],Colors[2], type = 'double3' )   
    cmds.select(myBook[0]+'.f[0:4]')
    cmds.hyperShade( assign=myBlinn )


def ShaderGen():
        #Add Color
        #//Pages Color
        myBlinn = cmds.shadingNode( 'blinn', asShader=True) 
        #cmds.setAttr ( (myBlinn + '.color'), 1.0,0.8,0.44, type = 'double3' ) 

        #//Cover Color   
        myBlinn2 = cmds.shadingNode( 'blinn', asShader=True)
        #cmds.setAttr ( (myBlinn2 + '.color'), 1.0,1.0,1.0, type = 'double3' )

        #//Cover Details Color
        myBlinn3 = cmds.shadingNode( 'blinn', asShader=True)
        #cmds.setAttr ( (myBlinn3 + '.color'), 1.0,1.0,1.0, type = 'double3' )

        return myBlinn,myBlinn2,myBlinn3

def BookShelf():

    NumberOfBooks=5 #Inserted from user
    myBlinn=''
    myBlinn2=''
    myBlinn3=''

    myRowShelfGroup=cmds.group(em=True,n='RowShelfGroup')
    for i in range(NumberOfBooks):
        BookGen()


BookShelf()

您反复使用相同的shadernode,最后都使用相同的shadernode,因此所有对象上的颜色都相同。您需要在BookGen函数中移动myBlinn,myBlinn2,myBlinn3=ShaderGen(),以获取所需内容。。这是一个工作版本

import maya.cmds as cmds
import random 
def BookGen():
    myBook=cmds.polyCube(name='Book',h=8,w=4,d=2) #Create a testCube with that Name
    myBlinn,myBlinn2,myBlinn3=ShaderGen()
    #Modeling that I didn't include
    #//Cover Color
    Colors=[]
    for i in range(3):
        tmp=random.uniform(0.0,1.0) #Uniform function allow me to find a random FLOAT number between a range(not like randint!)
        Colors.append(tmp)  
    cmds.setAttr ( (myBlinn + '.color'), Colors[0],Colors[1],Colors[2], type = 'double3' )   
    cmds.select(myBook[0]+'.f[0:4]')
    cmds.hyperShade( assign=myBlinn )


def ShaderGen():
        #Add Color
        #//Pages Color
        myBlinn = cmds.shadingNode( 'blinn', asShader=True) 
        #cmds.setAttr ( (myBlinn + '.color'), 1.0,0.8,0.44, type = 'double3' ) 

        #//Cover Color   
        myBlinn2 = cmds.shadingNode( 'blinn', asShader=True)
        #cmds.setAttr ( (myBlinn2 + '.color'), 1.0,1.0,1.0, type = 'double3' )

        #//Cover Details Color
        myBlinn3 = cmds.shadingNode( 'blinn', asShader=True)
        #cmds.setAttr ( (myBlinn3 + '.color'), 1.0,1.0,1.0, type = 'double3' )

        return myBlinn,myBlinn2,myBlinn3

def BookShelf():

    NumberOfBooks=5 #Inserted from user
    myBlinn=''
    myBlinn2=''
    myBlinn3=''

    myRowShelfGroup=cmds.group(em=True,n='RowShelfGroup')
    for i in range(NumberOfBooks):
        BookGen()


BookShelf()

这是我在我的原始程序中所做的…我知道这对这个程序来说很好…但是对于我的程序来说,每次继续生成不同的着色器时,它是程序的一部分,实际上使它运行得非常慢..如果你创建一个着色器并指定你的对象所有对象都具有相同的颜色。。因此,您的最后一个对象颜色将与所有其他4.相同。。所以我不确定你想要什么:)我想创建一个着色器。每次创建多边形立方体时,我都要创建3个随机RGB值。将这些值应用于原始着色器(因此,如果已创建该着色器,请修改其值)。将着色器应用于多边形立方体。在这种情况下,为着色器指定了以前的对象,也将获得上次创建的颜色。那么重点是什么呢?否则,你需要考虑使用一些层覆盖。这是一个完全不同的世界,是真的。我曾经想过…Thx:)这是我在我的原始程序中所做的…我知道这对这个程序来说很好…但是对于我的程序来说,每次继续生成不同的着色器,实际上是程序的一部分让它运行得非常慢..如果你创建一个着色器并指定你的对象所有对象都具有相同的颜色。。因此,您的最后一个对象颜色将与所有其他4.相同。。所以我不确定你想要什么:)我想创建一个着色器。每次创建多边形立方体时,我都要创建3个随机RGB值。将这些值应用于原始着色器(因此,如果已创建该着色器,请修改其值)。将着色器应用于多边形立方体。在这种情况下,为着色器指定了以前的对象,也将获得上次创建的颜色。那么重点是什么呢?否则,你需要考虑使用一些层覆盖。这是一个完全不同的世界,是真的。我曾经想过……Thx:)