Maya支持在任何使用MEL命令的地方使用Python样式的脚本。通过Python脚本可以访问所有的内置Maya命令(如sphere、Is等)。
1.phthon基础
在Maya程序里调用Python和调用MEL有很多不同之处,因为它们二者的语言编写方式存在着很大不同。下面就来介绍在Maya里使用Python的一些基础知识。
1.1在Maya里输入Phthon命令
以下是在Maya里调用Python命令的几种方法。
01 脚本编辑器。
为了方便同时在Maya中使用MEL和Python脚本,脚本编辑器中有MEL和Python的不同编译器。只要进入MEL编译器,就直接把命令发送到MEL处理器;同样,进入Python编译器,就直接启用Python处理器执行命令。
在返回Python结果前面使用注释#字符来标识。在脚本编辑器中,可以使用自动拼写功能来帮助查找指令。
02 命令框与工具架。
当希望执行一个指令的时候, 可以通过单击命令框的后缀来选择进入MEL还是Python指令, 如下图所示。
如果要把命令放入工具架,那么可以使用鼠标中键拖动MEL脚本或Python脚本,将其移动至工具架上,此时系统会弹-一个对话框,提示保存脚本类型是MEL还是Python,如下图所示。
03 Maya的Python模块。
Python的指令大部分已经绑定在本机的Maya命令中,比如Cmds模块。为了访问这些命令,必须进入下面的Python编译器进行脚本编辑:
import maya.cmds
这是允许用户使用的Maya命令。
例如:
maya.cmds.Is()
maya. cmds. sphere( radius=4 )
当然也可以把模块用更简短的形式导入Maya,
例如:
import maya.cmds as cmd
cmd.sphere()
导入maya.cmds后,自动保存在userSetup.py文件中,用户可以按自己喜欢来修改它的名字,例如下面的例子:
import maya.cmds as mc mc. sphere()
或者把Maya命令导入并作为顶层指令使用:
from maya.cmds import *
之后就可以直接调用Maya命令:
Is() sphere( radius=4)
把Maya命令导入并作为顶层指令使用会覆盖掉Python内置和其他模块。
1.2 后缀(命令格式)
Python后缀处理方式和在MEL后缀处理方式也有很大不同。MEL被设计成Shell命令方式的语法。在Python中的Maya命令的格式语法已经完全符合了Python的执行方式。
01 简单的后缀。
MEL中创建球体命令如下:
sphere -radius 4;
在Python中,半径后缀被改写,而这更像是数据传递:
maya.cmds.sphere( radius=4 )
02 多组数据。
如果一个后缀多个数据的话,那么必须把数据转化成表或数组。下面是一个后缀中有3个数据的例子:
#元组:
maya.cmds. ambientLight( rgb=( 0.2, 0.3, 0.4))
#列表:
maya.cmds.ambientLight( rgb=[ 0.2, 0.3, 0.4])
03 判定格式(真/假)。
一般的命名后缀必须赋于相关的数值,但是Maya的后缀并不都需要数值,例如Is-sl, 为了保持相同的语法,在Maya中的Python规定要求给不带数值的后缀赋于布尔真假值( True/False)。如果布尔值为假,那么后缀就为空;如果其值为真,则后缀需要被执行。例如:
#列出选择:
maya.cmds.Is( selection=True )
#不列出选择:
maya.cmds.Is( selection=False )
04 命名多个后缀。
有些后缀使用时需要多个后缀在同一条命令中。例如在MEL中的定义:
Is -type nurbsSurface -type transform;
Python需要使用已经定义过格式类型的后缀,并赋于其列表或数组变量:
maya.cmds.Is( type=['nurbsSurface' "transform] )
在上面例子中,后缀带有多个值,并且被多次使用,它的值是列表或数组。数组可以代替列表,这样可以使用由数组组成的列表、列表组成的数组或数组组成的数组。例如,在MEL中的curveOnSurface命令:
curveOnSurface -d3 -uv0O -uv 0.30.5 -uv 0.5 0.6-uV 0.9 1.0 surfacet;
在Python中:
maya cmds. curveOnSurface( 'surface1',d=3,uv=[(0,0).(0.3,0.5).(0.5,0.6),(0.9, 1.0)])
如果过多地使用后缀,Python则会返回一 个重复关键后缀的错误。
05 范围。
Maya命令中有3种类型的范围:时间、索引和浮点。在Python中必须使用元组指定所有范围。任意元组都可能有-一个或两个值。具有-个值的元组指定为一个值(加括号并后跟逗号) ;多个单值元组使用集表示法指定。
时间范围也支持单位。若要指定单位,必须使用字符串。由于每个值是单独解析的,因此可以混合使用单位。
以下是有效的时间范围:
(1,) (1,10) ('1sec',10sec') ('1min:2min)
下表以cutKey命令为例来指定时间范围和索引范围。
06 对Maya某些命令标志的更改。
对Maya命令所做的某些标志更改是必需的,因为Python中的多用途标志的参数必须以列表传递给标志。对于其中必须混合并匹配多用途标志的命令而言,这将导致出现问题。由于Python每个多用途标志的参数均以单独的列表提供,因此无法将这些参数混合使用。已扩展依赖于此的几个命令,以便单个多用途标志可以处理各个多用途标志的作业。
这些命令包括:
●polyAppendVertex: 可用于取代point、vertex和hole标志的新append标志。
●polyAppend :可用于取代point、edge和hole标志 的新append标志。
●polySplit :可以用于取代facepoint和edgepoint标志的新insertpoint标志。
●polyCreateFacet :经过修改后可用于指定洞的现有point标志。
●roundConstantRadius :可替换使用应该混合使用的sidea和sid b的新side标志。
CommandsPython参考文档中记录了所有这些标志的使用。
在所有情况下,这些标志都是向后兼容的。所有旧标志仍保留在原位。
1.3参数和对象
除了标志,Maya命令还使用参数和对象。参数是命令所需的固定类型的值。例如,move命令使用3个参数表示移动的X、Y和Z值。对象是命令在其上操作的实体(例如,场景中的某个对象或UI元素)。基于当前的选择列表,一个命令针对的对象数量是变化的,并且有时对象是隐式的。
对象和参数将如同在MEL中一样传递给命令,但传递的顺序必须如下所示:
command arguments object flags/named arguments
这不同于MEL, MEL 中的排序要求对象显示在参数列表结尾处。但是,Python要求 命名参数显示在所有其他参数之后。
1.4 后缀类型对照表
下表为在Maya Python模块中,后缀类型变化的简单对照。
1.5 标准输入( stdin)实现
Python支持从STDIN (标准输入)进行读取。在Python中, 这是通过从sys.stdin进行读取或调用raw jinput来实现的。
Maya会使用其自身的实现来覆盖sys. stdin。如果要使用Python自身的标准输入对象,可通过引用sys._ stdin_ 来实现此目 的。
示例:
在Script Editor (脚本编辑器)中输入以下内容之一来显示Python STDIN对话框:
●使用raw_ input
raw_ input)
●使用sys.stdin
import sys
inp = sys. stdin.readline()
●自定义命令提示
import maya.cmds as cmds
inp = cmds.promptDialog(message= hello')
上一篇 Maya中渲染设置应用解析(三)
下一篇 Maya中渲染设置应用解析(二)
热门课程
专业讲师指导 快速摆脱技能困惑相关文章
多种教程 总有一个适合自己专业问题咨询
你担心的问题,火星帮你解答电影剪辑通常被称为“隐形的艺术”,尽管剪辑师的名号不如导演的名号响,但是如果缺少了剪辑师对拍摄素材的二次加工,电影作品将缺少其......
今天,我来和大家聊聊,迪士尼动画《海洋奇缘》系列是怎么用Maya软件为他们最新的续集打造获奖动画的。
有哪些听起来高大上、实际上转行同学也能胜任的岗位?试试虚拟现实工程师!
增强现实(AR)和虚拟现实(VR)是当前备受瞩目的创新技术,对相关的增强现实开发、虚拟现实开发、数字孪生开发工程师的人才需求,......
在这个短视频盛行的时代,越来越多的人想要尝试自己进行短视频剪辑,却常常因为缺乏专业知识而无从下手。别担心,今天就为大家带来短视......
今天,我们聊聊皮克斯的《头脑特工队》系列
中国首个AIGC导演共创计划今日正式上线:同学,做导演不要?
中国首个AIGC导演共创计划定于12月6日正式上线。该计划由快手自研视频生成大模型产品“可灵AI”,联合李少红、贾樟柯、叶锦添......