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

 

posted @ 2019-01-29 18:00  3lina!  阅读(166)  评论(0编辑  收藏  举报