查看: 1636|回复: 0
打印 上一主题 下一主题

极品分享:Maya Mel基础教程(1)

[复制链接]
.    

3797

主题

11

听众

5万

积分

首席设计师

Rank: 8Rank: 8

纳金币
32328
精华
41

活跃会员 优秀版主 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2012-10-18 21:38:56 |只看该作者 |倒序浏览
maya Mel基础教程

概述 MAYA脚本语言
本章包括以下内容: 1、了解脚本语言;2、设立脚本语言环境。
1、了解脚本语言
编写脚本语言程序是产生Maya埋入式语言(MEL)脚本程序的过程。一个脚本语言程序是一个MEL指令或者MEL序列的集。通过产生脚本语言程序,你可以利用Maya的用户界面使执行任务自动化,可以获得"under the hood"访问Maya所有的各个部分,还可以对界面进行扩展和自定义。
2、设立脚本语言环境
为了设立脚本语言环境,需要考虑以下内容:

⑴、脚本语言文件

⑵、建立脚本语言路径

⑶、在脚本语言程序中使用程序
⑴、脚本语言文件
一个MEL脚本文件(*.mel)是一个包含MEL指令、MEL程序或者二者都有的文件。典型地,是用一个MEL脚本文件执行一系列的指令。如,可以写一个脚本程序以产生一个墙形状的物体,然后再给它施加一个砖的纹理。
可以用一个文字编辑器写一个MEL脚本文件然后把它保存到磁盘的一个文件中。MEL脚本文件使用文件扩展名 .mel。可以把脚本文件用于不同的场景中和不同的工作期间中。当执行一个MEL脚本文件时,它并不变成为场景的一个部分,因此如果你要想重复它的作用时,应该每次都执行该脚本程序。
⑵、建立脚本文件路径
在缺省状态下,Maya在你的scripts目录中查找MEL脚本文件。

在缺省状态下,这个目录定义在你的login名下。例子如下:
(IRIX) ~elvis/maya/scripts
(Windows NT) C:AwElvismayascripts
使你的脚本文件可以运行的最简单的方法是把它们放在上述路径里。
注意你的scripts目录缺省地包含了一些脚本文件。它们以menu_作为名字的开始,用于Maya内部。
你可以给MAYA用于查找脚本文件的缺省路径增加目录。
为脚本文件路径增加一个目录(在IRIX中):
1--在一个IRIX shell中,设立环境变量MAYA_SCRIPT_PATH给附加目录的路径。
2--从这个shell启动MAYA。
为脚本文件路径增加一个目录(在Windows NT中):
1--使用Windows NT Explorer或者My Computer,显示Maya NT bin目录的内容。
缺省时是C:AwMayaX.Xin。
2--双击MayaEnvironment***启动该程序。
这样显示出了你的home、project、plug-in、script和bitmap目录的路径。该路径包括在安装期间产生的缺省路径和你后来定义的任何路径。不能改变缺省路径。
对于plug-in、script和bitmap路径,用分号(;)分离路径,这些项可以定位。
在这个窗口中禁止编辑路径。但你可以用以下的步骤代替。
重要事项:

如果你的计算机上安装了Maya NT的多个版本,你会看到一个版本的路径。版本号是在窗口的标题栏里。为了看另外的版本的路径,点击Previous或Next。为了保存一个版本的路径,点击Save。如果你的计算机只装了一个版本,这些键会变暗。
3--点击Maya Script Path框旁边的Change键。
注意,如果你改变了Home路径,这就按照新的home路径改变了project、plug-in、 script和bitmap路径。会询问你是否想这样做。点击Cancel可以放弃这个改变。
4--在Change Setting窗口中输入(或者编辑)一个路径。
一般地,可以增加缺省路径,但是不能重置它们。当你定义路径时使用左斜线或者右斜线。
为了定义一个远程路径,可以将一个隐含目录与你的计算机上的一个驱动器字符对应起来。细节请看你的Windows NT文件。
如果需要输入多个路径,使用分号把这些路径分离开。
如果要使用一个文件浏览器从别的文件系统查找和选择一个路径,点击Browse。
为了返回到你原来的缺省路径中,点击Restore Default。这对于当你定义了一个不正确的路径或者想删除废弃的路径是非常有用的。
5--点击OK。
例子(IRIX)
为了给scripts路径增加~/maya/scripts/clipFX and remote/X/scripts目录,在启动MAYA之前给IRIX增加以下目录:
setenv MAYA_SCRIPT_PATH ~/maya/scripts/clipFX:/remote/X/scripts
随后Maya将能够在~/maya/scripts, ~/maya/scripts/clipFX, 或者/remote/X/scripts中找到你的脚本文件。
⑶、在脚本文件中使用程序
你可以在MEL脚本文件中使用全局和局部程序。全局程序在它们的文件外边是可见的;局部程序仅在它们的文件内部是可见的。
如果Maya遇到一个没有定义的指令,它会为找到一个与该指令有相同基名的MEL脚本文件搜索脚本路径。当它找到该文件之后,它在该文件中会声明所有的全局MEL程序。任何具有与该指令有相同基名的全局程序会被执行。
如,假定你在运行一个sayWhat指令。因为没有这样的一个sayWhat指令,Maya会在它的所有的script路径中对一个叫做sayWhat或者sayWhat.mel的文件进行搜索。如果在一个script目录中,它找到了有以下内容的sayWhat.mel脚本文件:
proc red5() {print("red5 standing by...
");}

global proc sayWhat() {print("sayWhat online
");}

global proc GoGo() {print("GoGo online
");}
然后全局程序sayWhat和GoGo被声明,并执行sayWhat程序。结果是:
sayWhat online
因为GoGo全局程序已经声明过了;现在就可以在指令行中或者在脚本语言编辑器中输入GoGo运行它。
使用MAYA内部脚本文件
Maya有一些用于它的用户界面和其他运算细节的MEL脚本文件。你可以在Alias|Wavefront中查找这些脚本文件,学习专业脚本程序作者的这些技术。这些脚本文件是在由缺省定义的以下述目录开始的目录中:
(IRIX) /usr/aw/mayaX.X/scripts
(Windows NT) C:AwMayaX.Xscripts
其中X.X是Maya的版本号。
注意:

不要在这个目录中修改或者插入脚本文件;该目录是保留Maya用户界面工作用的脚本文件的。改变这些文件可能会影响Maya的操作。
如果你想在这个目录中修改脚本程序以改变Maya的界面,先要把它们拷贝到你的局部scripts目录中。如果你的局部scripts目录中有与Maya内部script文件目录中相同名字的脚本文件,那你的局部scripts目录中的文件会被运行。


3、使用指令
包括内容有:输入指令、使用指令行、获得指令返回值、指令模式和指令在表达式中。
⑴、输入指令
Maya提供了一些输入MEL指令的方法;使用脚本语言编辑器(Script Editor)或者指令行(Command Line)是最常用的方法。你也可以在脚本程序文件、Maya ASCII(.ma)文件、工具柜图标(shelf icons)、热键以及表达式中执行指令。但是最常用的还是在脚本语言编辑器中输入指令。
无论如何输入指令,所有的MEL指令必须用一个分号结束。以下是MEL 指令的一些例子:
sphere -name roundy;

setAttr roundy.translateX 7;

whatIs ls;

help ls;

ls -typ nurbsSurface;
⑵、使用指令行
可以使用指令行输入MEL指令。如果指令行没有出现,在MAYA主菜单中选择Options > Command Line使指令行出现。
虽然在指令行和脚本语言编辑器中都可以输入指令,但两者之间有一些重要的区别:
你可以从指令行,使用数字键盘或字符键盘的Enter键输入指令。而脚本语言编辑器只能用数字键盘的Enter键。
指令行只有一行,执行一个MEL指令。为了输入更多的MEL指令,指令之间可以?quot;;"分开。
指令行仅将结果的最后一行显示到右边。而脚本语言编辑器显示所有的结果。
⑶、获得指令返回值
Many MEL指令返回一个值。为了抓取这个返回值,可以用单引号或者eval指令。
使用单引号获得指令返回值
用单引号"`"将指令前后标注出来可以返回指令的输出。随后你可以把这个输出赋给一个变量并在脚本语言编辑器中显示它。

string $a[];

$a = `particle -p 5 0 5 -name Sun`;
print($a);
第一条语句定义了一个名为$a的阵列。第二条语句执行引号中的MEL指令,并把指令的输出赋给$a。第三条指令把$a的内容显示给脚本语言编辑器,如下:
Sun
SunShape
可以对任何一个MEL指令保存和显示其结果。返回值的类型是由你使用的指令决定的。在以上例子中,粒子命令返回一个字符串阵列。所以,等式左边的变量符号也须要是接受这个返回值的字符串阵列的类型。
使用eval指令获得指令返回值
eval指令执行一个命令,也让你抓取返回值。它比起单引号有一个优点,因为你可以从一个字符串建立一个指令。象单引号方式那样,也可以把输出赋给一个变量并显示它。

string $command = "sphere";

eval($command + " -r 5");
第一条语句把字符串sphere标注给变量$command。第二条指令给字符串sphere添加 -r 5,并执行完整的指令sphere -r 5。它产生一个半径为5个格子单位的球体。
有关eval指令的更多的信息,见掌管指令的在线文件。
⑷、指令模式
MEL指令选项典型地在以下一种或多种模式中起作用:query、编辑和产生。Query模式是用于找出一些事件的值;编辑模式是用于改变一些事件的值;产生模式是产生一些事件。在在线MEL指令参考中,指令选项的描述包括一个Q、E或C以指示query模式、编辑模式、产生模式。
⑸、指令在表达式中
可以在一个表达式中执行MEL指令和序列。但是,如果你执行以下的指令你的场景会产生故障:
断开或连接属性

删除或产生物体或者其他项
在一个表达式中播放你的动画不会撤消MEL指令的执行。例如,如果你的表达式执行MEL指令产生了一对球体,播放这段动画时并不删除原来的球体。再次播放该场景时会产生另一对球体。
不过你可以通过选择Edit > Undo撤消MEL指令,但是如果你的场景有故障时,它将会不工作。还要注意,你可以只撤消Queue尺寸的设置所允许的许多运算。为设立Queue 尺寸,选择Options > General Preferences。
当你从指令行执行一个指令时,状态信息出现在脚本语言编辑器中和指令行的响应区域里。当在一个表达式中执行指令时,不显示这个信息。 关于表达式的更多的内容,请参考Using Maya: Expressions。
更多精彩教程,尽在web3D纳金网http://www.narkii.com/college/

文章来源:互联网
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-1-31 07:22 , Processed in 0.072879 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部