为三维动画艺术插上技术的翅膀——MAYA软件中MEL脚本的使用 夏航.docx_第1页
为三维动画艺术插上技术的翅膀——MAYA软件中MEL脚本的使用 夏航.docx_第2页
为三维动画艺术插上技术的翅膀——MAYA软件中MEL脚本的使用 夏航.docx_第3页
为三维动画艺术插上技术的翅膀——MAYA软件中MEL脚本的使用 夏航.docx_第4页
为三维动画艺术插上技术的翅膀——MAYA软件中MEL脚本的使用 夏航.docx_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

为三维动画艺术插上技术的翅膀MAYA软件中MEL脚本的使用【摘要】本文首先简单介绍了什么是MEL脚本,以及该脚本的使用特点,阐明MAYA软件是由节点和MEL命令所构成的,节点是静态的用于体现结果,而MEL命令是动态的用来控制过程。文中重点分析了MEL脚本的结构、应用和设计的思路,并对表达式进行了介绍。最后,明确提出了MEL脚本的局限性。【关键词】MAYA软件 MEL脚本 节点一、 MAYA MEL脚本语言概述MAYA软件的核心引擎是一种称为MEL(MAYA Embedded Language玛雅软件内置语言)的加强型Script脚本与Command语言,可以让使用者直接控制MAYA的命令、进程和工作流程。MEL为MAYA提供了基础结构,软件界面中的每一个要点都是在MEL指令和脚本程序上建立的。由于MAYA允许使用者对MEL自身完全的控制和访问,所以我们可以通过MEL扩展和定制MAYA软件,并可以进一步开发软件,使之能够为不同使用习惯的用户和不同特点的项目建立独特而个性的操作环境。由于MEL的这种特征,使用该程序使用者可以快速的执行建模、动画、渲染和动力学运算等各项主要任务。MEL脚本语言有着和C语言类似的语法,它的基本结构单位是MEL命令,有强大的字符串处理功能,还包含一些较为低层的命令,可以设计和编写一些MAYA软件默认命令中没有的较为复杂的功能。由于MAYA软件给出了对于MEL脚本语言自身完全的访问权限,使用户个性化的定制和扩展软件成为现实。另外,通过MEL语言脚本,设计师可以进一步开发MAYA,使它适应使用者和制作项目的创作环境。当然,设计师要想有效地操作软件并不非得精通MEL,但是熟悉MEL可以加深使用MAYA的专业能力。编写脚本语言程序是产生MAYA MEL脚本程序的过程,一个脚本语言程序是一条或多条MEL命令所组成的,按照自上而下的顺序执行。总结起来,MEL脚本有着以下三项重要的功能:l 编写和定制UI界面。MAYA软件的整个界面都是用MEL编写的,MAYA中的所有界面元素都可以编写到自定的MEL程序中。这一功能使得设计师可以使用MEL语言,跟据自己的习惯定制操作更为便利的软件界面,这样使用起来会更为顺手。l 将一些较为复杂但很常用的功能创建成为程序按钮。MAYA软件中所有的按钮命令都是通过MEL语言来调用的,设计师可以记录常用的操作步骤,并把其中一些命令再次组合起来设置成为按钮,通过快捷键或点击的方式使软件自动执行这一组命令。这一功能类似于PhotoShop里的Actions动作记录功能,但要比Actions动作记录更为灵活和强大,允许设计师直接修改具体命令的顺序和参数。l 简化在软件中的操作步骤,开发插件。在MAYA软件中的每一步操作事实上都是在执行MEL语言,因此MAYA软件中的任何一个功能以及所能做到的任何一项操作,都是可以加到使用者的MEL程序中并保存下来,使之成为可以反复调用的插件。本论文的主要研究工作也放在MAYA软件制作水流动画时,如何利用MEL脚本语言提高工作效率、完善艺术表现力。二、 MEL脚本在MAYA软件运行中的作用从内部结构来说,MAYA软件属于典型的节点型编辑软件,即:在它的场景中的每一部分,不管是三维几何物体、动画、表达式关系、灯光、纹理,还是用于创建有历史信息对象的参数,都被表示为节点,所有的节点会连接在一起构成场景图像文件。同时,每一个节点都会有一个属性组,每一个属性又保存着该节点对象的一个特性。节点的连接被称为Dependency Graph Nodes依赖图或者节点网络图(见图1)。节点连接图-1 节点网络图Figure -1 Dependency Graph Nodes节点身上的属性也具有一些特性,这些特性对能以何种方式操纵属性进行控制做出了一定要求。例如,属性可以被锁定(Locked)以防止它们被改变;属性能够被标注为可关键帧化(Keyable),以允许设计师通过定义关键帧形成动画效果;或者被表示为不可关键帧化(nonKeyable),从而禁止通过定义关键帧形成动画。另外,每一个属性都具有数据类型,该数据类型说明该属性能存储哪种信息。在MAYA中,属性能够存储的数据包括:l 整数(没有小数部分);l 浮点数(有小数部分);l 字符串,文本和数字的组合;l 布尔值,可以取“开/关”或“真/假”等两两相对应的值;l 枚举类型值,用以存储在创建属性时所定义选项列表中任意一项的值;l 某些特定属性还可以存储上述数据类型的集合,包括数组、向量和矩阵。简单了解了MAYA软件的运行方式后,我们说MEL脚本的一个重要作用是创建节点并构成节点网络图的连接,正是这些节点以及它们之间的连接使场景在运算时产生一定的效果,通过软件呈现在我们的面前。同时,MEL脚本另一个作用还可以准确的控制每个节点所包含属性的参数。如果不去了解MEL脚本设计师一般是利用软件界面中所提供的通道栏去完成节点各个属性参数的修改工作的。但是很多时候,通道栏中仅仅能显示那些被定义为可设定关键帧的属性,即使是在较为全面的属性编辑器面板中往往也不会显示出对应节点的全部属性,某些属性只能通过MEL脚本语言来处理。因此,MEL脚本可以允许设计师调用和控制一些被界面元素所隐藏的属性内容。同时,当我们有时候需要自己添加一些属性时,更加需要依赖MEL脚本来充分发挥其强大的扩展作用。另外,在MAYA软件中,我们还经常需要将两个属性互相连接。设计师通过在两个属性之间建立的连接使其中一个属性的值与另一个属性的值保持相同,以求更为方便的控制一些效果。当然这种连接是有方向性的,就是说,如果将一个属性连接到另一个属性,程序允许我们随意更改第一个属性的数值,第二个属性将会随其改变,而第二个属性值的更改却不会影响到第一个属性。一般在实际应用过程中,使第二个属性完全等于第一个属性的情况是比较少见的,往往需要在第一个属性的基础上进行一定的运算(比如差值或倍数关系等等),这种连接也经常需要我们使用MEL脚本进行设定。1、设立脚本语言环境为了使设计出的MEL脚本正常的被软件所调用,设计师需要在编写脚本内容前考虑以下内容:脚本语言文件、脚本语言放置路径、如何在脚本语言程序中使用其它程序。1) 脚本语言文件通常情况下,一个MEL脚本文件(*.MEL)是一个可以包含MEL命令或MEL程序亦或二者都有的文件,较为常用地是利用一个MEL脚本文件执行一系列的命令。如,我们可以写一个脚本程序用以产生一个平台形状的物体,然后再给它施加一个木板纹理。在设计师进行脚本编写的阶段可以使用MAYA软件自带的Script Editor脚本编写面板,但也可以直接使用写字板,只需要最终把它保存到磁盘中的任意一个文件夹里,并将其修改为.MEL的扩展名即可。这样,我们就可以把该脚本文件应用到不同的场景和不同的工作期间中。当调入执行一个MEL脚本文件时,它只是一个独立的文件并不会变成为场景的一部分,因此如果你需要重复某些操作时,只需要每次都调入该脚本文件并执行就可以了。2) 脚本文件的调用路径在默认状态下,MAYA软件的安装路径下会有一个叫做“scripts”的文件夹。例如:将MAYA软件安装在C盘默认路径下,则路径为“C:Program FilesAutodeskMAYA2008scripts”。该文件夹中,会包含软件运行时,产生操作界面的脚本文件。我们可以在这个文件夹中直接修改或者插入脚本文件,但不要直接改变和覆盖原有的文件,因为该目录是用来保留构成MAYA操作界面的脚本文件,改变这些文件可能会影响MAYA软件的正常运行。如果设计师确想修改该目录中的脚本程序以改变MAYA界面元素,也可以先把要修改的文件拷贝到工程项目(project)所定义目录的scripts文件夹下再进行修改。当我们编辑的项目目录下的scripts文件夹中有与MAYA安装目录的script文件夹中相同名字的脚本文件时,项目目录下的脚本文件会被优先运行。另外,MAYA软件允许设计师在MEL脚本文件中使用全局和局部程序。其中,全局程序是在脚本文件外边可见的,而局部程序仅在脚本文件的内部才可以被看到。当软件运行时,如果MAYA遇到一个没有定义的命令,软件会搜索脚本路径,为其找到一个与该命令有相同名字的MEL脚本文件。当软件找到该文件之后,会在该文件中声明所有的全局MEL程序,任何具有与该命令具有相同名字的全局程序将会被执行。2、 MEL脚本的命令1) 了解命令MEL脚本语言包括了使用MAYA所有功能以及全部参数的命令。使用MEL命令的一些典型的案例包括快速产生物体、精确移动物体和对物体进行更为有效的控制。例如,我们可以使用以下的MEL命令产生一个半径为10个单位,叫做“newSphere”的球体: sphere -radius 10 -name newSphere;随后我们还可以再利用一条MEL命令使“newSphere”沿X轴移动10个单位: move -r 10 0 0 newSphere;2) MEL命令的基本结构MEL脚本命令的编写方法比较类似于C语言,允许在一些命令中包含参数,这些参数是命令完成其任务时所需要的综合信息。有时,当一个命令对一个对象或属性执行某种操作时,该对象或属性的名字就是一个参数。例如:select -r nurbsSphere1;表明MAYA应选中名为nurbssphere1的物体,这一命令就如同在该对象上点击鼠标左键选取的效果一样。在这一语言中,select是MEL命令,nurbssphere1是该命令的参数,也就是希望被选中的对象。在大多数的命令中还会包含标记,标记是为以某种确定方式执行任务而对命令进行的附加说明,比如下面创建一个代理物体可以写成:spaceLocator -p 0 0 0 ;标记-p表明希望将空间中的某个点作为创建定位器时的位置,作为标记参数的数字0 0 0是该点的X、Y、Z轴坐标。虽然如此,标记不是一定要带着参数,比如为得到所有被选中对象的列表,可以输入:ls -selection;它只是ls(list的缩写)命令列出被选中的对象, selection也可以被缩写为sl,通常标记本身及其缩写都是具有相同含义的。在这一语言中,输入下面的命令也是正确的:ls -sl;在MEL脚本中创建节点的很多命令中有3个常用的标记: “-c”、“-q”、“-e”。-c代表“创建(create)”,通常是指示命令创建一个对象;-q代表“查询(query)”,通常是指示命令打印(显示)或为脚本返回该对象的特性;-e代表“编辑(edit)”,通常用来指示命令改变一个已存在的对象。3) 使用命令命令的书写:MAYA软件提供了一些输入MEL命令的方法,其中使用脚本语言编辑器(Script Editor)或者命令行(Command Line)是最常用的方法。无论如何输入命令,一句完整的MEL命令必须用一个分号来结束。虽然在命令行和脚本语言编辑器中都可以输入命令,但两者之间有两点重要的区别:l 设计师在命令行输入脚本后,可以使用文字键盘或数字键盘(小键盘)上的Enter键使命令执行。而在脚本语言编辑器中,只能用数字键盘的Enter键才可以执行命令。l 命令行的书写区域只有一行,为了输入更多的MEL命令,命令之间必须使用“;”分开。同时,命令行仅会将多条命令的最后一行的结果返回显示到右侧的响应框中;而脚本语言编辑器可以将所有被执行命令的结果逐条显示,可以更为方便的查找错误。获得命令的返回值:MAYA MEL命令执行后会返回一个值,为了得到这个返回值,可以使用单引号或者eval命令。使用单引号获得命令返回值用单引号将命令前后标注出来可以得到命令的输出值。随后我们可以把这个值赋给一个变量并在脚本语言编辑器中显示或进行更为复杂的调用。例如:string $a; $a = particle -p 5 0 5 -name Sun; print($a); 第一条定义了一个名为$a的字符串。第二条语句执行引号中的MEL命令,并把命令的输出值赋给$a。第三条命令把$a的内容显示给脚本语言编辑器。单引号可以对任何一个MEL命令保存和显示其结果。其所得到的返回值的类型是由设计师使用的命令决定的。在以上例子中,粒子命令返回一个字符串,所以等式左边的变量符号也需要是接受这个返回值的对应数据类型。 使用eval命令也可以获得命令的返回值。与单引号相比,它有一个优点,使设计师可以从一个字符串建立一个命令。同时,eval命令象单引号方式一样,也可以把输出值赋给一个变量并显示它。例如:string $command = sphere; eval($command + -r 5);第一条语句把字符串sphere标注给变量$command。第二条命令给字符串sphere添加-r值为5,并执行完整的命令sphere -r 5。它产生一个半径为5个单位的球体。3、 使用MEL脚本的表达式功能1) 什么是表达式在MEL脚本中,表达式一般是用于将场景中两个以及两个以上属性值连接,或者是用来进行条件判断的脚本,它具有较强的方向性。通常有两种类型的表达式:控制普通物体属性的对象属性表达式(Object Attribute Expressions),以及控制在粒子对象中每个粒子(Pre-Particle在脚本中简称为PP)属性的每粒子表达式(Pre-Particle Expresstions)。虽然表面上这两种表达式看起来非常类似,但是它们的创建和使用却有很大的差别,在此着重介绍更为常用的对象表达式。例如:在MAYA软件中创建一个球体,选中它在通道栏中的Translate X属性并添加表达式,在表达式编辑器窗口中创建:nurbsSphere1.translateX = time;播放动画就可以看到,球体以每秒一个单位的速度沿着X轴移动。这就是表达式的基本应用方法。2) 表达式如何工作看一下已经创建的驱动球体运动的表达式: nurbsSphere1.translateX = time;表达式中也会包含一系列的命令,这些命令同样是按照自上而下的顺序让MAYA执行不同的任务操作。多条命令使用时,每条命令(也称之为语句)需要以分号(;)结束。与其他MEL脚本不同的是,在表达式中,语句最后一定要给一个或多个属性附加新的数值。当为节点中某些参数添加了表达式后,我们可以看到在通道面板中的对应属性的底色会改变颜色,以便提示操作者。颜色的变化取决于使用者软件常规参数的设置,这种颜色的变化也表明表达式节点与当前属性相连。如果想观察到具体表达式的节点,可以打开超图编辑窗口(Hypershade),浏览物体上下游的连接节点。3) 表达式的使用表达式是MAYA中最常使用的驱动一个属性值和其他属性值关联的方式之一。与其他技术相比,表达式有一些优点:l 当在表达式所驱动的属性和驱动属性之间建立复杂的数学关系时,表达式最有效。例如,对象的X轴位置是该对象的Y轴位置的立方根,可以使用表达式来连接并计算。l 表达式可以控制和连接的属性更多,效果更好。比如,表达式可以在那些随着时间变化的属性之间建立关系;也可以定义根据对象所处不同规则来设置不同的颜色,如当对象Y轴的取值为0或正数时,表达式使用另一规则来设置对象的颜色。l 像所有的MEL脚本一样,表达式允许你在开发的时候添加注释,以此来表明开发者的意图。然而,表达式也存在着一些缺点:l 表达式在没有添加注释的情况下,容易让其他人(甚至编写表达式的作者)很难读懂和理解。另外,在一个有很多表达式的场景里,如果表达式运行依赖于其他表达式的行为,那么很难评估场景中局部效果的运行。l 与其他能达到相同效果的方式相比,表达式运算比较慢。那么,在我们运用表达式时,如果仅仅是想用一个属性来控制几个属性的话,最好使用驱动关键帧,这样可以提高场景的运算速度。但是,如果想用浮点值的属性来驱动一个整数属性,驱动关键帧是做不到的。另外,如果想建立一个简单运算的表达式,如属性的加、减、乘、除,可以使用工具(Utility)节点,它能够使我们更快的得到相同的结果。可以在超图编辑器如果是想在一个对象与其他对象之间建立空

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论