Search code examples
pythonmaya

How to change Shader Color setting trhough Python-Maya


I have this code...I don't understand why, whenever I do the for loop it doesn't change the color of the cube...I mean, in this case I call the function "BookGen" 5 times...And everytime i randomize 3 numbers, but the colors don't change....

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

Solution

  • You are using same shadernode over and over and finally all using same shadernode so you will get same color on all objects. You need to move myBlinn,myBlinn2,myBlinn3=ShaderGen() in BookGen function to get what you looking for .. here is a working version

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