2017-03-23 3 views
0

이 코드가 있습니다 ... 왜 for 루프를 수행 할 때마다 큐브의 색상이 변경되지 않습니다 ... 나는 당신은 반복과 마지막으로 모두 같은 shadernode를 사용하는 나는 ... 기능 "BookGen"5 번 전화 그리고이 경우 매번 난 3 개 개의 숫자를 무작위하지만, 색상은 변경되지 않습니다 ....Shader Color 설정을 변경하는 방법 Python-Maya

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

답변

2

을 같은 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() 
+0

입니다 이 프로그램에서는 괜찮은지 알겠지만 ... 내 경우에는 매번 다른 셰이더를 계속 생성합니다. 프로그램의 일부분이기 때문에 실제적으로 느리게 진행됩니다. –

+0

셰이더를 만들고 개체를 할당하면 모든 개체가 같은 색을 갖습니다 .. 마지막 물체 색상이 다른 모든 4 가지 색상과 동일 할 것입니다. 그래서 당신이 무엇을 요구하는지 확신 할 수 없습니다. – Achayan

+0

하나의 쉐이더를 만들고 싶습니다. 나는 polycube를 만들 때마다 3 개의 임의의 RGB 값을 만들고 싶습니다. 이 값을 원래 쉐이더에 적용하십시오 (이미 생성 된 경우 값을 수정하십시오). 폴리 큐브에 쉐이더를 붙이십시오. –