實戰1#創建反射層! #重點,查詢節點是否鏈接。#選擇分組有待優化
阿新 • • 發佈:2019-01-29
setattr 關閉 cat cee 一點 即將 surf 程序 rom
這些年一直想學python,但總是斷斷續續,鼓起無數次的勇氣學它。
五年前買的書python書。每年都會看,可每次看到循環到了函數,就怎麽也看不下去了。真想抽自己個嘴巴子!
書是買了一本又一本,收藏的教程也越來越多。
不實際打出來練習,都是看了又忘,忘了又放。一點興趣都提不起來。也不知道怎麽跟maya結合起來。
今年可能是空閑的時間太多。好像茅塞頓開一般。翻幫助文檔,看基礎教程。跟著教程打字,這裏難了,放一放,隔兩天再回頭看,又解決了先前的問題。
就在不斷的打擊,不斷的遺忘,再不斷的忍耐,不斷的鞏固下,開了竅。
學習估計也就是這麽一個艱難的過程。
雖然自學確實很難找到頭緒,但有想要解決問題的需求,python就是一定要學下去的。
這次剛好項目中渲染角色需要有單獨的反射層。
寫了制作步驟和要求,用程序執行,感覺實現起來並不難。
於是乘熱打鐵寫了一個。雖然有些bug,但足以增強我的自信心啊~~~
農歷新年即將來到,以這個小程序作為今年的收尾吧。
1 import maya.cmds as cmds 2 import mtoa.core as core 3 def refl_layer(): 4 if cmds.pluginInfo("mtoa" , l = 1 , a = 1 , q = 1): 5 print "Warring: mtoa is already loaded" 6 else: 7 cmds.loadPlugin("mtoa") 8 9 #設定角色(選擇角色組(不能框選),這裏要優化) 10 allCharGrp = cmds.ls(sl=1) 11 charAll = cmds.ls(dag=True, ap=True,sl=True) 12 char = cmds.ls(charAll, g=True) 13 14 15 #選擇非角色 16 cmds.select(allDagObjects=True) 17 cmds.select(allCharGrp, tgl=True)18 #列出所選節點下的所有節點,然後列出geo. 19 exChar = cmds.ls(dag=True, ap=True, sl=True) 20 SC = cmds.ls(exChar, g=True) 21 22 #改角色渲染屬性 23 for charMeah in char: 24 cmds.setAttr(charMeah+‘.visibleInReflections‘,1) 25 cmds.setAttr(charMeah+‘.primaryVisibility‘,0) 26 27 #改非角色的渲染屬性 28 for scMeah in SC: 29 cmds.setAttr(scMeah+‘.visibleInReflections‘,1) 30 cmds.setAttr(scMeah+‘.castsShadows‘,0) 31 32 33 #選地面,賦予新的材質 34 #SC = cmds.ls(sl=True) 35 cmds.select(SC) 36 SC_set = cmds.sets(n=‘SC_set‘) 37 cmds.sets(SC_set, q=1) 38 39 sdCatch = cmds.shadingNode(‘aiShadowCatcher‘, asShader=1, n=‘SC_sdCath‘) 40 sdCatch_SG = cmds.sets(renderable=1, noSurfaceShader=1, empty=1, name=sdCatch+‘SG‘) 41 cmds.connectAttr(sdCatch+‘.outColor‘,sdCatch_SG+‘.surfaceShader‘) 42 43 sdCatch_ref = cmds.shadingNode(‘aiStandard‘, asShader=1, n=sdCatch+‘_ref‘) 44 cmds.setAttr(sdCatch_ref+‘.Kd‘,0) 45 cmds.setAttr(sdCatch_ref+‘.Ks‘,0) 46 cmds.setAttr(sdCatch_ref+‘.Kr‘,1) 47 cmds.setAttr(sdCatch_ref+‘.Fresnel‘,1) 48 cmds.setAttr(sdCatch_ref+‘.Krn‘,0.5) 49 cmds.connectAttr(sdCatch_ref+‘.outColor‘,sdCatch+‘.reflection‘) 50 51 cmds.select(SC_set) 52 cmds.sets(edit=1, forceElement=sdCatch_SG) 53 54 55 56 #關閉環境反射圖(若影響角色燈光,就不要斷,直接改屬性關閉環境反射) 57 #查詢是否有環境反射圖, 58 Env = ‘defaultArnoldRenderOptions.background‘ 59 if cmds.connectionInfo( Env, isDestination=1): 60 env_bg = cmds.connectionInfo(Env, sourceFromDestination=1) 61 print env_bg 62 cmds.disconnectAttr(env_bg,Env) 63 64 refl_layer()
實戰1#創建反射層! #重點,查詢節點是否鏈接。#選擇分組有待優化