【Python】Maya Python使用入门(一)

标签:
mayapython |
分类: Maya |
好的,难得又到了美好的周五的晚上,刚好最近也在一直学Python,做了不少笔记。今天就和大家一起分享。也希望能够给大家一些新的启示。学了两天发现,Python还是相当好用的。
http://s3/bmiddle/0030QiC3ty6LD1k8zJMc2&690Python使用入门(一)" TITLE="【Python】MayaPython使用入门(一)" />
Maya的脚本编辑器是编辑复杂语句的比较好的场所,在这里你可以像在VS中编程一样,而且关键字也被加上了不同的颜色。
By 张小木
2014/8/29
在我正式开始之前,还是先自问自答两个问题:
为什么学习Python?而不用Maya的Mel呢,因为我个人觉得,作为面向对象语言,Python具有非常广的应用,因为不仅仅可以用于Maya,学习一个更加具有普适性的语言,对于长远来看,性价比更高。Python不仅可以写Maya的脚本,而且可以用在Nuke,3Dsmax,Fusion,Cinema4D,Blender这些软件上,所以用途很广。还有一点,就是虽然同样作为面向对象语言,Python更加简单,容易编写。虽然语法和C++具有很大的不同,但是不会影响理解。
为什么要写Maya的脚本?利用工具自带的功能,理论上可以做到绝大多数的事情(我用Maya快3年,还几乎没出现过有些命令实现不了的情况),但是效率是一个问题,还有就是灵活性是一个问题,利用脚本(不管是Mel还是Python),可以定义很多命令集合,比方说,我希望以原点为中心,然后每十个单位创建一个球,最后形成一个100*100单位的被球填充的区域,利用脚本一下子就可以实现(虽然编写的时候慢一点,但是如果有大量这样的需求,这样可以省很多时间),同样,也可以拓展程序的功能,定制我们自己的工具,开发插件,加速建模,绑定,动画等的操作。而且,其实从我自身感受来看,很多时候,建模也好还是别的也好,用软件本身有大量的操作是重复的,如果把一些重复的操作整合成一个工具,这样也会方便很多。
=====================================================================
好的,废话有点说得太多了,这是Python入门一,我想这篇主要还是给大家遍历一下Python的基本语法和一些使用习惯。因为我也是刚学没多久,可能会有一些疏忽或遗漏,希望大家批评指正。还有说明一点就是写这个主要还是为了让更多使用Maya的Artists能够理解脚本,至于那些大神级别的程序员可以忽视本博文。。。
1、脚本编辑环境
其实我们可以不使用任何第三方编辑器,直接在Maya的命令行或者脚本编辑器中就可以编写,非常地方便。我们可以再Maya软件的左下角和右下角分别找到对应的编辑区域:
http://s10/bmiddle/0030QiC3ty6LD1k6bl779&690Python使用入门(一)" TITLE="【Python】Maya Python使用入门(一)" />
http://s10/bmiddle/0030QiC3ty6LD1m5lLb19&690Python使用入门(一)" TITLE="【Python】MayaPython使用入门(一)" />
左下角的命令行中可以执行Mel或者Python的单行命令,默认看到的是Mel,可以通过单击Mel文字切换到Python编辑,如上图。
http://s10/bmiddle/0030QiC3ty6LD1m5lLb19&690Python使用入门(一)" TITLE="【Python】Maya
左下角的命令行中可以执行Mel或者Python的单行命令,默认看到的是Mel,可以通过单击Mel文字切换到Python编辑,如上图。
http://s3/bmiddle/0030QiC3ty6LD1k8zJMc2&690Python使用入门(一)" TITLE="【Python】Maya
Maya的脚本编辑器是编辑复杂语句的比较好的场所,在这里你可以像在VS中编程一样,而且关键字也被加上了不同的颜色。
不同于VS编译的是,Maya脚本的编译方式可以不是一整块进行的,也就是我可以选择对应的几行,然后仅仅只对这几行进行执行。这样就可以对不同的部分进行测试,非常灵活。下面我用一个简单的实例来简单给大家说明几种编译的方式(在这几个实例中,我用了print关键字,其实熟悉C的同学都知道,这是一个输出内容的关键字,我在接下来会简单再说一下具体的用法,在这次,主要还是说一下怎么进行Python的执行)。
http://s7/bmiddle/0030QiC3ty6LD23Y3tA86&690Python使用入门(一)" TITLE="【Python】Maya Python使用入门(一)" />
我随便写了三行,语句很简单,就是显示后面黄色字样的三句话。全部执行的话,你可以使用Ctrl+E快捷键(或者Ctrl+Enter(不是小键盘上的Enter)键,或者小键盘上Enter键),就可以全部执行,很简单。默认情况下,执行完了的代码就会从编写的区域删除,就像下图所显示的一样:
我随便写了三行,语句很简单,就是显示后面黄色字样的三句话。全部执行的话,你可以使用Ctrl+E快捷键(或者Ctrl+Enter(不是小键盘上的Enter)键,或者小键盘上Enter键),就可以全部执行,很简单。默认情况下,执行完了的代码就会从编写的区域删除,就像下图所显示的一样:
我们同样也可以看到编辑的结果了,输出了三句话。。。那么怎么样才能不被清除呢,也很简单,只要全部选中就可以了,选中之后再用以上的方法执行的话就不会被删除了。同样,如果只想执行其中某一句,可以只选中其中一行,在小键盘Enter就行。
Tips:我们可以在工作区域按住Ctrl键+鼠标滚轮,来缩放文字大小,大家可以放到适合自己工作的大小,保护眼睛=-=
2、基本语法
2.1、我们可以用print关键字来输出显示的内容,内容可以是文本,整型,浮点型数据,还可以是场景中对应的物件的名称。具体print
的用法非常地简单,大概可以分为以下几种:
print "文本名称"
(输出对应的文本)
print 数字/变量
(输出相应的数字和变量的值)
print 表达式
(输出表达式的值)
差不多是这样的感觉。。。
Tips
:Python是大小写敏感的编程语言,就是如果你把print写成Print,编译会报错,请一点没有敲过代码的朋友务必注意这一点。。。还有,就是Python语言结尾不需要加分号=-=写过C++或者Java之类的程序的朋友注意一下。。。
2.2、类型转换与匹配
在计算数据的时候,Python对应整型数据和浮点型数据可以进行转换,比如5/3,这个表达式输出的结果是1,但是5.0/3,输出的结果是1.6666666……
关于整型数据和浮点型数据:整型数据简单理解就是整数,比如1.25在整型数据里,就是1,小数点之后的全部不要(不是四舍五入,1.9也是1,所以上面的5/3就是1),而浮点型可以简单的理解成小数=-=
对于不同类型的数据,直接进行数学运算,是会出问题的(整型和浮点型可以转换),比如:
print “Hello!!”+5
就会报错(如下图执行之后出现了Error,错误说明是无法连接String类型(字符型)和Int类型(整型))。
那么怎么可以在其中最终实现Hello!!5呢?
可以按照以下规则进行:
print "Hello! %d" %5
这样再执行就对了……
在Hello后面加上%d,这样表明在这里要插入整型数据,后面%5说明插入具体的值。。。
Tips:大家应该注意到了,String类型(字符型)在直接使用的时候,要加双引号,因为在Python里面,双引号加上代表字符串以及函数名称,或者是场景中的物件的名称。如果去掉,默认则为变量名称,去掉执行的话会提示这个变量没有定义=-=
还有,插入是浮点数的话,用%f。。。
2.3、关于注释
注释对于程序而言及其重要,因为一方面它能够保证其它程序员或者相关工作人员能够阅读你书写的代码,同样,也能在以后提醒你,你当时书写这段代码的意义。注释是一段解释性的话,用来说明特定的程序块的工作原理和相关参数的意义,往往定义在特定的标识符之后,这样程序在运行的时候,完全会跳过注释的内容,只执行相应的代码部分。
在Python里面,定义注释的方式很简单,标识符是#,如下图所示,非常好理解=-=
注释是红色显示的=-=
2.4 关于Maya中的Python使用的基本思路与转换
Python在Maya中的使用,基本上还是与Maya的命令进行对接,但是却使用Python的语法和定义方式,这样的话,其实就是用另外一种格式在执行Maya的基本命令。而Python本身是无法直接书写对应的Maya脚本的,为了让Python与Maya的命令能够进行连接,我们在每次进行Python编程的时候,要先导入maya的命令,具体定义如下:
import maya.cmds
(这是必要的,因为这是Python能够书写Maya脚本的基础,有点类似于引用外部的库)
然后再执行Maya相关的命令时,要加上maya.cmds这个前缀,例如:
maya.cmds.polySphere()
(前缀很重要,如果不添加,Python将无法识别,这个命令的作用是在场景中创建一个多边形球体)
大概就是这样子的,注意区分大小写=-=
那么每次都写maya.cmds很烦,因为很长,有没有简单方法呢?我们可以重新定义这个前缀,方法也很简单,具体语法如下:
import maya.cmds as XXX
XXX.polySphere()
(这样的话和之前的效果一样=-=)
http://s16/bmiddle/0030QiC3ty6LD83Fumbff&690Python使用入门(一)" TITLE="【Python】Maya Python使用入门(一)" />
差不多就是这种感觉……是不是很有意思??
差不多就是这种感觉……是不是很有意思??
Tips:我们可以去掉这个前缀,通过import maya.cmds as
*来实现,但一般不推荐这么做,可能会产生不太好的结果=-=比较推荐的是将其缩写成mc,简单直观,便于理解,下文我都默认使用mc=-=
那么怎么把Maya的命令转换成Python语句呢?其实思路很简单,我们可以尝试在场景中用常规的方法创建一个球体,我们可以看看它是怎么执行的,比方说,如下图:
当我们创建一个球体之后,在脚本编辑器中就显示Maya为我们做了什么,我们可以看到,它执行了CreatePolySphere,然后设置了这个球体的基本属性,比如r(半径)为1,横竖分段均为20等等……那我们怎么创建等价的Python语句呢?差不多如下图:
仔细对比两张图片,我们很容易就看出来发生了什么,我们可以发现,创建同一个球的基本属性的名称是一样的,只不过定义的方式不一样罢了。那么,具体是怎么变化呢?Python当中不使用”-“来定义熟悉,而且会把属性定义在创建物体后面的括号当中,属性与数值之间的连接用”=“进行连接,并且不同的两个属性之间用逗号隔开,非常地一目了然。同时,需要注意的一点,每个属性之间的对应关系不一定全部罗列出来,可以只列出部分,其它没有列出来的会按照默认的值执行……比如:
http://s9/bmiddle/0030QiC3ty6LD9kqHQke8&690Python使用入门(一)" TITLE="【Python】Maya Python使用入门(一)" />
大家可以看到,只改写了半径r的值,其余都没有写,那么就保持默认,所有的参数都是optional,不一定都要写,要是一个都不写,那就全部安照默认的值进行。。。那么通过这个简单的实例,大家就可以很容易试出Maya的绝大多数命令的Python表示方法,比较好的做法就是先执行一遍Maya对应的命令,然后就可以得到大部分的熟悉了,比方说,我对物体A和B执行了ParentConstraint命令……
大家可以看到,只改写了半径r的值,其余都没有写,那么就保持默认,所有的参数都是optional,不一定都要写,要是一个都不写,那就全部安照默认的值进行。。。那么通过这个简单的实例,大家就可以很容易试出Maya的绝大多数命令的Python表示方法,比较好的做法就是先执行一遍Maya对应的命令,然后就可以得到大部分的熟悉了,比方说,我对物体A和B执行了ParentConstraint命令……
http://s9/bmiddle/0030QiC3ty6LD9Vgya428&690Python使用入门(一)" TITLE="【Python】Maya Python使用入门(一)" />
http://s15/bmiddle/0030QiC3ty6LD9ViHvw6e&690Python使用入门(一)" TITLE="【Python】MayaPython使用入门(一)" />
http://s15/bmiddle/0030QiC3ty6LD9ViHvw6e&690Python使用入门(一)" TITLE="【Python】Maya
这样就不难改出对应的代码了吧?有几点说明:1、关于每个命令的参数和返回值在Autodesk官方手册上有着非常详尽的说明,而且支持快速搜索,如果你完整安装了Maya,在脚本编辑器下面帮助找到网址,如果没有,可以下一个说明文档……或者使用网络版本http://download.autodesk.com/global/docs/maya2012/en_us/index.html?url=files/Python_Using_Python.htm,topicNumber=d28e688294
2、Python中对于物体名称引用,要加引号,不然会被当做是变量来对待,就像上面的A和B分别就是场景中物体的名称。A是Source
object, B是Target object。mo是matain offset
的缩写,是Bool型变量,我们给它赋给True值,让物体本身不会因为父子约束而移动。权重值为100%权重。这些返回值可以在以上链接的手册中查看到。
=====================================================================
好的,今天先更新这么多,我想大家可以通过这篇文档现对于Python编写Maya脚本有一个感性的认识,在以后的更新中,会给大家带来更多的解释……如果有何疑问或者意见与建议,敬请留言,谢谢!
在下一次更新中,我会向大家介绍Python变量的定义,Python的lists,以及for循环的应用。并且会给大家介绍更多常用的命令。=-=就是这样。。。Cheers。。。
前一篇:关于这个博客……