实战1#创建反射层! #重点,查询节点是否链接。#选择分组有待优化
这些年一直想学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()