1. 程式人生 > >實戰1#創建反射層! #重點,查詢節點是否鏈接。#選擇分組有待優化

實戰1#創建反射層! #重點,查詢節點是否鏈接。#選擇分組有待優化

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#創建反射層! #重點,查詢節點是否鏈接。#選擇分組有待優化