当前位置:首页 >教程首页 > Maya >Maya中MEL脚本和表达式的应用解析(三)

Maya中MEL脚本和表达式的应用解析(三)

发布时间:2019-09-02 13:52:49

2.表达式

表达式动画采用一种数学的方式来控制物体属性的变化,这种方式非常适合制作可以用数学公式精确描述的运动方式。

2.1表达式概述

所有的三维软件控制动画的方式有3种:关键帧动画、关联动画和表达式动画。关键帧动画直接记录物体参数随时间的变化关系;关联动画记录两个属性之间的变化关系;表达式动画则使用一系列逻 辑关系和数学公式完成动画控制,这种控制既可以是用时间控制一个属性的变化,也可以是用一个属性的变化控制另一个属性的变化。

在Maya中控制物体运动的基本方式有以下6种。

●Keyframe (关键帧动画)。

●Set Driven Key (设置驱动关键帧)。

●Constraint (约束)。

●Motion Path (路径动画)。

●Expression (表达式动画)。

Direct Connection (属性关联)。

在这6种方式中,Set Driven Key (设置驱动关键帧)、Constraint (约束)和Direct Connection(属性关联)都是标准的关联动画,而Motion Path (路径动画)则可以认为是将关键帧动画与关联动画结合起来的应用方式。

与关键帧动画和关联动画相比,表达式动画是一种更 为灵活也更为复杂的控制方式。表达式动画既可以实现用时间直接控制物体参数变化,也可以实现用一个物体参数的变化控制另一个物体参数的变化,也就是说表达式动画可以完成关键帧动画和关联动画的功能。

除非特别说明,否则表达式对运动的控制是全程的,即只要数学描述是对的,受控属性值就不会出现意外的动作。使用表达式的另一个优点是有利于调整动画,如果因某种特殊原因需要加快整个系统的运转速度,使用表达式控制只需要更改几个参数就可以了,而关键帧动画则需要修改大量关键帧数据。

从结果上看,表达式动画与关键帧动画还有一点区别,就是作用范围。在首尾关键帧范围以外,关键帧动画物体属性的变化规律只能以规定的几种方式变化,如cycle (循环)、cycle with offset (带偏移循环)等,而且用户必须自行指定,这些Maya中预设的动画变化方式并不一定与关键帧动画范围内的动画规律一致。 表达式动画没有这些限制,在没有特别说明的情况下在任意时刻都起作用。

2.2 创建和修改表达式

2.2.1 新建表达式

01 执行Window > Animation Editors> Expression Editor (窗口>动画编辑器>表达式编辑器)命令,打开Expression Editor (表达式编辑器),也可以在物体属性通道栏中使用鼠标右键菜单打开表达式编辑器。

02 在Expression Name (表达式名称)栏中命名新的表达式。

03 在表达式编辑区中输入表达式内容。

04 单击Expression Editor (表达式编辑器)面板中的Create (创建)按钮,确认创建表达式。

2.2.2 修改表达式

01 执行Window > Animation Editors > Expression Editor (窗口 >动画编辑器 >表达式编辑器)命令,打开Expression Editor (表达式编辑器) ,也可以在物体属性通道栏中使用鼠标右键菜单进行打开。

02 在菜单栏中,通过使用Select Fiter (选择过滤器)和Object Fitter (对象过滤器)两个菜单中的不同命令可以改变Selection (选择)列表中显示的内容,该区显示的是表达式操作对象物体列表。

03 进入表达式操作对象选择区,在对象列表中选择物体,从属性列表中选择属性,相应的表达式会出现在表达式编辑区中,或者通过菜单操作,控制Selection (选择)栏中显示场景中所有表达式,从中选择需要修改的表达式。

04 修改表达式,单击Edit (编辑)按钮,确认修改操作。在修改模式下,Create (创建)按钮会变为Edit (编辑)按钮。

2.3 表达式基本元素

下图所示的表达式包括了表达式中的必备元素。

tu= 15. Okcosd (frame);

◎属性名

表达式中引用物体的属性名时,无论是用该属性值参与计算,还是给该属性赋值,都应该使用全称一物体名加属性名, 其格式为“物体名属性名”,物体名与属性名之间一定要用“”隔开。如果使用的属性是当前选择物体的属性,则可以省略物体名,在生成表达式的过程中系统会自动添加物体名。属性名的书写必须与属性的标准名一致,不能以操作界面中的名称,包括Attribute Editor (属性编辑器)或Channel Box (通道盒)。在Channel Box (通道盒)中属性名的显示有3种方式: Long(长)、Short( 短)和Nice (友好),其中Long (长)和Short (短)都是标准名,而Nice (友好)为非标准名。Channel Box (通道盒)默认显示的是Nice (友好),如下图所示。

Maya中MEL脚本和表达式的应用解析(三)

ChannelBox(通道盒)中切换属性名的显示方式可以使用菜单命令Edit>ChannelNames>Long/ShortNice (编辑>通道名称>长/短/友好)完成。

在Attribute Editor (属性编辑器)中属性名也是按Nice(友好)方式显示的。Attribute Editor (属性编辑器)不能切换属性的显示方式,因此有大量属性在操作界面上看不到标准名,这就要借助于帮助文件,将光标置于Maya窗口中,按F1键打开Maya的帮助文件,从栏目左录中选择[节点(Nodes) ],然后从右栏中选择要查看的节点类型名,浏览器会显示出该节点的所有属性,如下图所示。

Maya中MEL脚本和表达式的应用解析(三)

场景时间

在书写表达式的过程中经常会使用场景时间,将节点某属性的变化同场景时间联系 起来,从而得到相应的动画。场景时间有两种表示方式: time (时间和frame (帧)。

time(时间)是用秒表示当前时间。如果系统当前的播放帧速率为24fps,当播放到第24帧时,time (时间)参数值为1 (秒)。

frame(帧)是用帧表示当前场景时间。

time (时间)和frame (帧)都是系统变量,用户无权改动。

赋值号(=)

虽然表达式使用了一个等号(=) ,但这是一个赋值语句,而不是数学课本上出现的等式。等式是指等号两边的内容是相等的,因此可以互换,而表达式中“=”两边的内容并不相等,不能互换。赋值语句是先对“=”右边的内容进行计算,无论“=”左边是什么一变量或属性名, 也无论它原来的参数值是多少,都强令它等于右边计算式计算的结果,即将右边的计算结果赋予左边。

运算符

表达式中总是会出现各种运算符,依靠这些运算符才能将时间与动画属性或动画属性与另一个属性之间建立各种不同的关联关系。常用的运算符有:加+、减-、乘*、除1、求余%、括号0等。当一个表达式出现多种运算符时,括号有最高优先权,其次是乘、除和求余运算,最后是加、减运算,多个优先级相同的运算符连续出现时按从左向右的顺序进行计算。

分号(;)

当表达式不只一句时,每一句都必 须用一个分号结束。如果表达式只有句,结尾是否加分号都不会产生影响,但是,养成一个良好的习惯可以大大降低错误出现的概率,因此建议在编写表达式时,无论是一句还是多句,每一句都应以分号结束。

15与15.0

虽然在数学计算式中15.0可以简写成15,但在编写计算机程序的过程中,15 与15.0通常是不同的,因此要特别注意。需要用整数的时候最好写成15,需要用到小数的时候最好写成15.0。

函数

cosd(和sind0等都是Maya预设的函数,用来计算正弦值和余弦值。Maya中有很多这样的预设函数。

2.4 数据类型

表达式的控制对象为节点属性,节点属性值具有不同的特性。例如,transform (变换)节点的visibility (可见性)属性只有on和ff两个值; translate (平移)属性由3个子属性translateXYIZ (平移XYIZ )构成;节点名记录的是文字;粒子的particleld属性只能是整数。不同的属性应使用不同类型的数据,因此了解数据类型对于书写表达式很重要,Maya中常用的数据类型有以下几种。

float (浮点)

float (浮点)型数据为包含小数位的数字型数据,如1.33、 3.02等。

int(整数)

int (整数)型为不包含小数的数字型数据,其中包括正整数、负整数和零。

vector(向量)

vector (向量)型数据为三元数据,即只有3个数字一起使用才能表示某-完整内容的数据。例如,空间坐标、空间比例或RGB颜色等。一般表示方法为将3个用逗号分开的数字一起放入一对双尖括号中,如<<1.0, 3.6, 5.2>>。

string (字符串)

string (字符串)型数据记录一个字符或- 串字符,这些字符可以是字母也可以是符号,如“。”、“%”或“2”。字符型变量的内容要用引号与其他内容分隔开。e

boolean (布尔)

boolean (布尔)型数据的值只能取0和1或on和off。如果给boolean (布尔)型属性强行赋值非0或1的数,系统会自动转成0或1保存。

以上数据类型与Add Attribute (添加属性)命令窗口中的Data Type (数据类型)是一致的。

2.5 函数

Maya为用户提供了50多个预定义的内部函数,这些函数大致可以分为6类:数学函数、随机函数、向量函数、转换函数、阵列函数和曲线函数,如图所示。

Maya中MEL脚本和表达式的应用解析(三)

math functions (数学函数)

数学函数是最大的一类函数,菜单中共列出了28个函数,这28个函数并不是完全不同的,有几个函数只是其他函数的“变种”,即同一种计算方法在不同具体情况下的使用形式。这28个函数又可以分成3个子类:三角函数(包括反三角函数)、指数函数(包括对数函数)和限制函数。

这3类函数对应初等数学的数学函数。

random number functions (随机函数)

随机函数共有6个,此类函数以用户给定的值为基础,产生不规则的随机数,通常用来模拟一些杂乱效果。不同的随机函数采用不同的算法,具有不同的变化特征。

vector functions (向量函数)

向量函数有6个,用来解决向量代数中的一些计算问题,不过只限于解决三维向量的计算问题。

conversion functions (转换函数)

转换函数有4个,是两对可逆的转换,用来解决同一对象的不同表达方式的统-问题。例如:衡量角的大小可以用角度也可以用弧度,这二者之间如何转化;颜色可以用RGB表示也可以用HSV表示,这二者之间如何转化。

array functions (阵列函数)

阵列函数有3个,用来对数组变量进行专门操作。

Refresh File Listing (刷新文件列表 )

刷新标签显示列表。

Refresh Selected Swatches (刷新选定的样式)

刷新选择的样本。

Refresh All Swatches (刷新所有的样式 )

刷新所有的样本。

Generate Swatch Files for Current Images (为目前的图像生成样式文件)

当从Projects (项目)选项卡中打开一张图片时,就会将其保存为一个| *.mayaSwatches格式文件,当下次再打开时,会节省大量时间。

2.1.7 Graph (图表) 

该菜单与工具栏中的命令是对应的,下面将结合工具栏图标进行统一讲解。 Graph (图表)菜单如下图所示。

Maya中MEL脚本和表达式的应用解析(三)

2.1.7.1 Graph Materials on Selected Objects (所选对象的图表材质)

功能说明:在材质编辑器中查看所选模型的材质。在众多材质球中快速准确地找到所选模型的材质,并在Work Area (工作区)中显示所选模型的材质节点网络。该命令在工具栏中对应的图标是。

操作方法:选择场景中的模型,单击执行。

2.1.7.2 Clear Graph (清除图表)

功能说明:删除Work Area (工作区)中的材质节点网络,释放出更多的工作区空间来编辑材质节点。该命令在工具栏中对应的图标是,。

TIPS:这种删除方式只是将材质网络节点从Work Area(工作区)中去除而并不是彻底删除,它实际还存在于材质编辑器中, 不同于按键盘上的Delete健。

2.1.7.3 Input and Output Connections (输入和输出连接)

功能说明:在Work Area (工作区)中,显示所选节点的上下游的节点网络(即输入和输出节点)。该命令在工具栏中对应的图标是国。

应用效果:如下图(左)所示。

Maya中MEL脚本和表达式的应用解析(三)

学员作品赏析
  • 2101期学员李思庭作品

    2101期学员李思庭作品

  • 2104期学员林雪茹作品

    2104期学员林雪茹作品

  • 2107期学员赵凌作品

    2107期学员赵凌作品

  • 2107期学员赵燃作品

    2107期学员赵燃作品

  • 2106期学员徐正浩作品

    2106期学员徐正浩作品

  • 2106期学员弓莉作品

    2106期学员弓莉作品

  • 2105期学员白羽新作品

    2105期学员白羽新作品

  • 2107期学员王佳蕊作品

    2107期学员王佳蕊作品

专业问题咨询

你担心的问题,火星帮你解答
×

确定