logo资料库

mel教程学习maya语言的基础教程pdf.pdf

第1页 / 共113页
第2页 / 共113页
第3页 / 共113页
第4页 / 共113页
第5页 / 共113页
第6页 / 共113页
第7页 / 共113页
第8页 / 共113页
资料共113页,剩余部分请下载后查看
第 9 章 MEL (Maya Embedded Language) 9.1 使用 Maya:MEL 9.1.1 介绍 MEL 使用 MEL(Maya 内置语言),用户可以使用命令和脚本来扩展和自定义 Maya 的功能。本章介绍 MEL, 包含有下面的内容: 关于 MEL。 学习命令。 输入命令。 使用程序和脚本。 使用 Script Editor(脚本编辑器)菜单。 表达式中的 MEL。 自定义 MEL。 9.1.1.1 关于 MEL MEL 语言是 Maya 功能的基础。用户可以使用 MEL 命令来创建自己的用户界面,访问高级功能。对于 特殊的场景,可以创建与之匹配的界面,或者对于某个特殊的项目,可以改变默认的参数设置。对于某些使用 Maya 界面不容易改变的属性,可以使用 MEL 为其输入精确的数值。另外,用户还可以创建 MEL 程序和脚本 来完成自定义的建模、动画、动力学和渲染任务。 本书,Using Maya: MEL,对使用 MEL 命令、程序和脚本进行了基础的介绍。如果要进一步地了解 MEL 可以使用 Maya 的在线文件。在在线文件中,不但包含有本书中的内容,还包含有下面的文件: MEL 用户界面创建。 按字母顺序的 MEL 命令参考。 按功能进行分类的命令参考。 MEL 脚本参考。 用户经常碰到的问题。 MEL 命令的改变。 DG 节点的变化。 这些文件对于使用 MEL 和 Maya 有很大的帮助。 9.1.1.2 学习命令 MEL 包含有大量的命令来满足不同的需要。一些使用 MEL 的典型例子包括快速创建物体、精确地移动 物体,提高工作的效率。例如,用户可以使用下面的 MEL 命令来创建一个半径为 27.5 单位,名称为 bigBoy 的球: Sphere -radius 27.5 -name bigBoy ;
第九部分 / MEL 模块 用户可以接着用下面的 MEL 命令来沿 Z 轴旋转 bigBoy 90 度: rotate -r 0 0 90 bigBoy ; 在下面的例子中,假设用户使用关节工具来创建了一个关节,并想沿 X 轴方向移动关节 5 个单位。用户 可以在不中断创建的情况下,使用下面的命令来移动关节: move -r 5 0 0; Maya 的在线技术文件对每个命令的用法、语法、返回值和例子都进行了描述。 9.1.1.3 输入命令 在 Maya 中,可以使用多种方式来输入 MEL 命令; “Script Editor(脚本编辑器)”或“Command Line (命令线)”比较常用。用户还可以使用脚本文件,Maya ASCII(.ma)文件、工具架图标、快捷键和表达式 来执行 MEL 命令。但最常用的方式是使用“脚本编辑器”。 无论如何输入命令,所有的 MEL 命令之后都必须有一个分号“ ; ”来结束它,如下面的 MEL 命令: sphere –name roundy ; setAttr roundy.translateX 7; what Is ls; help ls; ls -typ nurbsSurface; 1. 脚本编辑器 使用脚本编辑器,用户可以输入 MEL 命令。选择 Window > General Editors > Script Editor 命令或单击 Maya 视窗右下角的 (脚本编辑器图标)可以显示脚本编辑器(见图 9-1)。 图 9-1 脚本编辑器视窗 在脚本编辑器的底部可以输入命令,在顶部显示命令的结果或错误信息。 在底部部分中,用户可以输入命令或进行粘贴操作。使用键盘上字母部分的 Enter 键可以另起一行,使用 数字键盘上的 Enter 键可以执行命令。如果输入的 MEL 脚本命令没有错误,则 Maya 会去除底部的脚本。否则 的话,脚本不会被去除,并且错误信息会显示在脚本编辑器的顶部。 在脚本编辑器中,用户可以输入任意数目的 MEL 命令,甚至整个脚本文件的内容都可以输入,但在每个 MEL 命令之后必须以分号结束。 2. 命令线 4
第九章 / MEL (Maya Embedded Language) 用户可以使用命令线来输入 MEL 命令。选择 Options > Command Line 命令可以显示命令线(见图 9-2)。 图 9-2 命令线 使用命令线和脚本编辑器来输入 MEL 命令,也有一些区别: 在命令线中执行命令时,既可以使用数字键盘上的 Enter 键,也可以使用数字键盘上的 Enter 键,而在脚 本编辑器视窗中执行命令时,则必须使用数字键盘上的 Enter 键。 命令线只有一行,如果要输入多个命令,则必须使用分号把每个命令分开 在命令线的右侧,只显示最后一个命令的结果;而在脚本编辑器中显示所有命令的结果。 3. 获取 MEL 命令的返回值 一些 MEL 命令返回数值。如果需要获取命令的返回值,可以使用键盘左上角的单引号或 eval 命令。 使用单引号 用户可以将命令放入两个单引号之间,来取得命令的返回值,并且可以把返回值分配给其它变量,或者 在脚本编辑器中显示它。 例如: string $a[ ]; $a = `particle -p 5 0 5 -name Sun`; print ($a); 第一个语句定义了一个名称为$a 的数组。第二个语句执行单引号中的 MEL 命令,并把命令的输出值分 配给$a。第三个语句在脚本编辑器中显示$a 的数值为: Sun SunShape 用户可以存储和显示任意的 MEL 命令的结果。返回值的类型是由使用的命令决定的。在上面的例子中, 5
第九部分 / MEL 模块 粒子命令返回了一个字符串数组。因此在等号左侧的变量的类型也应该是字符串。 使用 eval 命令 使用 eval 命令也可以获取返回值。与使用单引号相比,它允许命令中包含字符串变量。而使用单引号, 也有其自己的优点,就是用户可以直接把返回值分配给一个变量,并可以显示它。 例如: string $command = “ sphere “ ; eval($command + “- r 5 “); 第一个语句把字符串 sphere 分配给变量$command。第二个语句把参数-r 5 添加到字符串 sphere 之后,并 执行整个命令 sphere -r 5。此时 Maya 会在场景中创建一个半径为 5 的球。 9.1.1.4 使用程序和脚本 当用户在脚本编辑器或命令线中执行命令时,每个命令执行一个操作。如果要执行多个操作,则可以使 用程序或脚本。程序和脚本有不同的用处。 命令:执行一个操作 程序:使用一个命令来执行多个 MEL 命令。 脚本:执行多个操作 1. 程序 MEL 程序是一组 MEL 命令,使用一个命令就可以执行一个 MEL 程序。程序可以是局部的,或是全局的。 局部程序只有在自己的文件内才有效,而全局程序在文件外也是有效的。 用户可以使用文本编辑器来创建一个脚本内的程序。用户还可以在脚本编辑器中输入程序。 下面是一个 MEL 程序: global proc return_type procedure (arguments) { MEL_statements } 在上面的例子中,斜体的元素是随机的(可以使用,也可以不使用),每个 arguments(输入)是由数值 类型和名称组成的。用户可以使用多个输入,然后使用逗号把它们隔开。 在下面的例子中,全局程序,helloValue,它的输入变量是一个整数和一个字符串变量,并返回了一个字 符串。 global proc string helloValue (int $value ,string $person) { string $greeting; $greeting = “Hello “ + $person+” , number “ + $value; return $greeting; } 定义程序 在执行一个程序之前,用户必须定义它。在定义程序时,Maya 把它调入到内存中,这样它才能执行。用 户可以使用脚本编辑器的 source 命令来定义一个文件中的程序,或使用命令线来定义脚本中的程序。用户也 6
可以直接在脚本编辑器中输入一个程序来执行它。用户也可以使用这种方式来执行脚本。如果用户在执行一个 脚本之后,对其进行了修改,则必须再次执行它,才能使修改起作用。 定义 Functions(函数): 一个函数是带有返回值的程序。当用户定义一个函数时,不能使用默认的输入。当用户执行一个函数时, 第九章 / MEL (Maya Embedded Language) 用户必须提供所有的输入。 例如,用户不能使用下面的方式来定义一个函数: proc int splat (int $value, bool = true) 语句中的分配符(=)创建了一个默认的分配,这在 MEL 中是不允许的。 用户也不能使函数过载。如果多个程序具有相同的名称,但有不同的输入和返回值类型,则最后一个程 序将覆盖上一个。例如,在下面的两个程序中: rad (int $x) ; rad (string $foo) ; 第二个程序将覆盖第一个。 执行程序 使用一个 MEL 程序和使用其它的 MEL 命令或函数是一样的。例如,如果要执行上面的 MEL 程序 helloValue,在脚本、脚本编辑器或命令线中输入 MEL 的名称即可。 helloValue (1, “Jake”); // Result: Hello Jake, number 1 // 为了成功地调入程序 helloValue,则需要一个整数和字符串输入。用户可以不使用括号或逗号来执行程序。 例如,在执行 helloValue 时,用户可以使用下面的方式: helloValue 7 "Torq"; // Result: Hello Torq, number 7 // 2. 脚本 一个 MEL 脚本是一个文件,在此文件中,可以包含 MEL 命令、MEL 程序或者两者都有。典型地,用户 可以使用 MEL 脚本来执行一系列的命令。例如,用户可以使用一个脚本来创建一堵墙,然后为它分配一个砖 的纹理。 用户可以使用文本编辑器来创建脚本,然后把脚本文件保存在硬盘中。MEL 脚本的文件名扩展为.mel. 用户可以在不同的场景或不同的工作阶段中使用脚本。当用户执行 MEL 脚本时,它不会变为场景的一部分。 如果要重复脚本的作用,用户必须重新执行脚本。 设置脚本的路径 默认地,Maya 在 scripts 目录中寻找 MEL 脚本,此位置在登录名之下。例如: 在 IRIX 系统中的路径: ~elvis/maya/scripts 在 Window NT 系统中的路径:C:\Aw\Elvis\maya\scripts 使一个脚本可执行的最简单的方式就是把它们放到上面的目录中。 默认地,在 scripts 目录中包含有一些脚本。这些脚本的名称大多是以 menu_开头,这些脚本是 Maya 内 部使用的。 用户可以在 Maya 寻找脚本的默认路径上添加目录: 改变脚本路径: 1)使用 Windows NT 资源管理器或双击“我的电脑”图标,来显示 Maya NT 的 bin 目录。 7
第九部分 / MEL 模块 默认地,此目录是 C:\Aw\MayaX.X\bin。 2)双击 MayaEnvironment.exe 来执行命令并显示对话框(见图 9-3)。 图 9-003 环境设置 在此对话框中显示了安装、项目、插件、脚本和位图目录的路径。这些路径包括安装时创建的默认的路 径和用户自己指定的路径。用户不能改变默认的路径。 对于 Plug-in、script 和位图目录可以设置多个路径,在这些路径之间必须用分号隔离开。 用户不能直接在此对话框中改变路径,这时可以使用下面的步骤。 注意:如果用户的计算机中安装了多个版本,则在此对话框中一次只能显示一个版本的路径。版本的名 称显示在标题条上。如果要显示其它版本的路径,单击 Previous 或 Next 按钮。如果要保存一个版本的路径, 单击 Save 按钮。如果用户的计算机中只安装了一个版本,则这些按钮将变为无效。 3)单击 Script 路径盒右侧的 Change 按钮,会弹出“Change Setting”对话框。 注意,如果改变了 Home 路径,则其它的路径也会根据新的 Home 路径进行更新。此时用户会被询问是 否确定要进行此操作。如果不需要,可以单击 cancel 按钮来取消。 4)在“Change Setting”对话框中输入或编辑路径。 用户可以在默认路径添加目录,但用户不能替换它们。 如果要输入多个路径,使用分号隔开它们。 单击 Browse 按钮,可以在弹出的对话框中寻找和选择路径。 如果要恢复原始的默认路径,单击 Restore Default 按钮。 5)单击 OK 按钮。 在脚本中使用程序 用户可以在脚本中使用全局或局部的程序。全局程序可以脱离它们的文件执行,而局部程序只在它们的 文件中有效。 如果 Maya 发现一个没有定义的命令,它会查找所有的脚本路径来寻找与命令相同名称的脚本。当它发 现此文件后,它会定义文件中的所有的全局程序。另外,文件中所有与命令的名称相同的全局程序都将被执行。 例如,假设用户执行的命令为 sayWhat。因为 sayWhat 不是 Maya 的内部命令。Maya 会查找所有的脚本 路径来寻找名称为 sayWhat 或 sayWhat.mel 的文件。如果在某个脚本路径中,Maya 发现了一个 sayWhat.mel 文件,文件中包含有下面的内容: 8
第九章 / MEL (Maya Embedded Language) proc red5() {print(“red5 standing by… \n”);} global proc sayWhat() {print(“sayWhat online\n”);} global proc GoGo() {print(“GoGo online\n”);} 则 Maya 会定义全局程序 sayWhat 和 GoGo,并且执行 sayWhat 程序。执行的结果为: sayWhat online 因为 Maya 定义了 GoGo 全局程序,用户可以在脚本编辑器和命令线中输入 GoGo 命令并执行它。 使用 Maya 内部的脚本文件 Maya 使用自己内部的一些脚本来创建界面或完成其它的操作。用户可以测试这些脚本来看一下 Alias/Wavefront 公司专业编程者的技术,默认地,这些脚本在下列路径的 startup 和 other 目录中。 (IRIX) /usr/aw/mayaX.X/scripts (Windows NT) C:\Aw\MayaX.X\scripts 其中,X.X 是 Maya 的版本号。 注意:不要在上面的目录中修改或插入脚本,否则的话会影响 Maya 的使用。 用户可以把 Maya 内部的脚本拷贝到自己的脚本目录中。如果用户自己脚本目录中的脚本与 Maya 内部脚 本目录中脚本名称相同,则用户脚本目录中的脚本首先执行。 9.1.1.5 使用脚本编辑器的菜单 使用脚本编辑器可以创建、改变或使用 MEL 脚本。使用 Window > General Editors > Script Editor 命令或 单击 Maya 主视窗右下角的 可以打开脚本编辑器。脚本编辑器有下列的菜单命令: Open Script Source Script Save Selected Execute Clear History Clear Input Echo All Commands Show Line Numbers Show Stack Trace 1. 打开一个脚本 用户可以打开一个脚本来测试、执行或排除错误。打开一个脚本并不会执行它。Maya 只是把它显示在脚 本编辑器的输入部分中。 用户可以部分或全部地执行显示在输入部分中的脚本。使用鼠标拖动选择部分或全部的脚本,然后按数 字键盘上的 Enter 键来执行它们。 打开一个脚本后,用户还可以拖动部分或全部的脚本到 Shelf(工具架)之上来创建一个图标。用户可以 单击图标来执行脚本。 打开一个脚本: 1)在脚本编辑器中选择 File > Open Script 命令。 9
第九部分 / MEL 模块 一个对话框显示出来。 2)选择需要打开的脚本。 2. Sourcing(源化)脚本 使用 Sourcing Script 菜单命令时,Maya 执行脚本文件中所有的 MEL 命令并定义所有的全局程序。如果 用户修改了脚本中的程序,Maya 不会记录这种修改,用户必须重新 Sourcing(源)脚本。这是因为 Maya 只 在内存中保存执行的程序。当用户 Source 一个脚本时,Maya 重新读入脚本中的程序。 源脚本: 1)从脚本编辑器中选择 File>Source Scrip,则一个对话框显示出来。 2)选择要打开的脚本。 当用户源化脚本后,Maya 执行文件中的所有的 MEL 命令。所有的全局程序都被定义,但不会被执行。 Maya 按 MEL 命令在文件中的排列顺序来执行它们。如果出现错误,则执行会中断,并且 Maya 不会继续调入 程序。 当用户源化一个脚本时,Maya 不会定义或执行局部程序。然而,如果用户在脚本编辑器或命令线中定义 一个程序,则局部程序会被全局化,也就是用户可以随时执行它们。 本质上,执行一个程序和执行一个 MEL 命令是相同的。当用户想要源化一个脚本文件,并且执行文件中 的程序时,可以事先定义好程序,然后把可以执行此程序的命令写入到脚本文件中,这样当源化脚本文件时, Maya 就可以在源化脚本的同时,来执行脚本中的程序了。 3. 保存脚本 在脚本编辑器中选择 File > Save Selected 命令可以保存脚本文本。用户可以选择脚本编辑器底部或顶部的 文本,然后选择此命令。Maya 会把此文本保存在一个后缀名为.mel 的文件中。 4. 执行脚本 当用户想要执行已经源化的脚本,可以选择脚本编辑器菜单中的 Edit > Execute 命令;或者在脚本编辑器 底部的输入部分中输入脚本的名称,然后按数字键盘上的 Enter 键来执行它。 用户还可以先选择 File>Open Script 命令打开脚本,然后选择 Edit>Execute 命令来执行它。如果脚本中没 有错误,则脚本将从编辑器的底部移动到顶部。否则,脚本不会移动,并且在脚本编辑器的顶部会出现错误信 息。 技巧:对于显示在脚本编辑器底部的脚本,用户可以只执行脚本中的某部分。选择需要执行的部分脚本, 然后按数字键盘上的 Enter 键来执行它,则只有选择部分的脚本被执行,并且 Maya 不会从底部去除脚本的任 何部分。 5. 清除状态信息 在脚本编辑器中,选择 Edit > Clear History 命令,可以清除其中的状态信息(显示在脚本编辑器中顶部的 信息)。这将去除所有的状态信息。注意,此命令不可恢复。 6. 清除命令输入 在脚本编辑器中,选择 Edit > Clear Input 命令可以清除编辑器底部的命令输入文本。注意,此命令不可 恢复。 7. Echoing commands(回应命令) 当在 Maya 中工作时,对应的命令会显示在脚本编辑器的顶部部分中。但根据默认设置,只有比较重要 10
分享到:
收藏