来自当知百科
跳转到: 导航搜索
  

目录

基本概念

mel能做的

  mel有一个很重要的功能是编写界面,Maya的整个界面是用mel编写的,Maya中的所有界面元素都可以编写到你自己的mel程序界面中,你可以用mel跟据自己的习惯定制自己的操作界面。

  Maya中的所有的按钮命令都是通过mel来调用的,你可以记录并把其中一些命令组合起来,通过一键或按钮来自动执行这一组命令,就像PhotoShop里的Actions一样。

  Maya中的每一步操作都是在执行mel,因此Maya的任何一个功能,能做的任何一项操作,都可以加到你自己的mel程序中。

  mel有着和c语言类似的语法,有强大的字符串处理功能,还包含一些较为低层的命令(比如说获取选择物体的名称和获取点在空间中的坐标值等命令),可以编写一些Maya中没有的,较为复杂的功能。

mel不能做的

  mel是一种脚本语言,受脚本解释器(Command Engine)和Maya内置命令的影响,还是有很多局限的。

  mel不能使用ActiveX插件。

  mel只能根据Maya中已有的命令(dll或mll中注册过的命令)进行扩展,无法直接调用dll模块中的函数。

  我们平常使用的dll或exe程序文件是经过编译器优化的二进制文件,命令的执行速度非常快。mel脚本语言是文本,有一个脚本解释器分析的过程,命令的执行速度较慢,大约要慢20倍。

  mel不支持指针,不能对内存进行直接操作。这就导致了很多方面的效率超级低下,对内存的间接操作可能会使运行速度降低100倍甚至1000倍以上。不过这样也有一个不容争辩的好处,就是不会产生内存泄漏,保障了Maya的稳定性。

  mel不能读写二进制文件。既然mel不支持指针,不支持数据结构,就算能够读写二进制文件意义也不大。

  mel不能编写程序渲染器、播放器;不能编写Maya中不存在的界面元素,如TreeView、RichEdit、透明窗口等;不能编写读取二进制文件的程序,如3dmax(*.max)、LightWave(*.lwo,*.lw)等。

  有人问过mel能不能编写病毒问题。答案是肯定的。编写mel病毒不需要什么高超的技能,只要通过mel调用dos命令或JavaScript/VBScript命令就行了。编写病毒是一件损人不利己的事,mel病毒绝对不能代表编写者的技术高深,只能说明他的素质低劣。mel病毒极其罕见,只听说国内有人编过,并害了自己人。如果万一你被mel病毒格式了硬盘或删除了文件,可以用EasyRecover之类的程序来恢复,但有一点一定要记住,就是在恢复文件之前千万不要对受损的硬盘进行写操作!包括不能把恢复的数据存到受损的硬盘上!否则再厉害的高手也救不了你。

学Maya一定要学mel吗?

  不一定非要学mel。但由于Maya与mel的关系太密切了,Maya的用户界面就是用mel编写的,你在Maya中的每一步操作都是在执行mel,你也经常会在表达式里用到mel,或使用别人编写的外部mel程序,这一切都要求你至少要对mel有一个初步的了解。

可以先学mel再学Maya吗?

  不可以。只有先熟悉的Maya的操作后才可以学mel。一般至少学两个月以上的Maya,才可以学mel。

  学mel是否要有编程基础?是否应该先学C语言再学mel?

  有编程基础的确会对学mel有很大帮助,但这并不是说学mel一定要有编程基础。C语言和Java语言虽然在语法上与mel很相似,但在编程的思路方面有很大差距,mel更注重代码的简洁而非代码运行的高效率。由于mel是不需要编译的脚本语言,对一些编程的规范要求不是很严格,学习起来会比C或Java更简单一些。

学mel是否要学好数学?是否要学好图形学?

  如果你是学理科的,而且以后打算在3D图形编程这方面发展,那么学好数学和图形学是必须的。如果你是搞艺术的,学mel只是为了辅助Maya作图,那么你就少在数学和图形学上浪费时间。mel是比较高层的脚本语言,一般都是直接调用Maya中已经编好的算法,你只要熟练掌握Maya的操作就行了。如果你有比较好的图形学基础,可能反而会不喜欢使用mel,因为很多优秀的算法无法用mel实现- mel的速度太慢了。

如何编写mel?

  mel是脚本语言,这就意味着你可以用任何文本编辑器来编写,比如写字板、记事本等。Maya自带的编辑器不好用,所以我们一般使用外部编辑器来编写mel。比较专业的编辑器有:TextPad、UltraEditor、EditPlus等,有了这些编辑器后还要在网上(比如Highend3d)下载一个mel语法加亮文件,配置好后,才好用。

如何使用mel?

  mel编辑器单行的mel命令,可以直接在命令行(Command Line)执行,也可以在Window > GeneralEditors > Command Shell执行。

  多行的mel代码,可以在Script Editor中按Ctrl+Enter执行。

  shelf

  在Shelf中执行mel。把要执行的代码选中,用鼠标拖放到Shelf上,Shelf上多了一个mel图标,点这个图标,就可以执行你的mel代码了。

  使用textToShelf命令。比如:textToShelf "cube""polyCube";可以在当前Shelf上建一个polyCube命令的图标。

  使用Shelf Editor,添加、编辑你的mel代码,或更改图标。

  mel文件

  mel文件的名字必须取与文件中的主函数相同的名字。要把mel文件复制到我的文档/Maya/5.0/scripts目录中,然后在命令行输入主函数名就可以执行这个函数命令。

  源化脚本(Source Script)

  Source Script可以使mel文件中的代码或命令立即生效。有几种方法可以SourceScript,比如说可以在命令行执行source yourScript.mel,或用Script Editor的File >Source Script...,或直接把你的mel文件拖放到Maya的视窗中。

  启动文件userSetup.mel

  要想在Maya每次启动时都执行某一段代码,需要把这段代码加到Maya的启动文件userSetup.mel中。

  具体方法是在我的文档/Maya/5.0/scripts目录中新建一个文本文件并重命名为userSetup.mel,然后把你的代码加到这个文件中。如果scripts目录中已经存在了userSetup.mel,就把你的代码加到这个文件的结尾。

  其它

  也可以通过快捷键、菜单、Marking Menu、mll插件、外部程序文件、JavaScript等方法来调用mel。

如何学习mel?

  学mel最好的参考手册就是Maya的帮助文档,遇到问题时,应首先从这些文档中找答案。我把文档中的Mel CommandReference部分做成了chm文件便于查询,可以点此处下载。

  要想提高自己的水平,需要多看别人编写的mel代码。<disk>:\\Alias\\Maya6.0\\scripts目录中存放着所有Maya自带的mel,这些mel可以随意抄写,修改并发布,无版权限制,是我们学习的范本。另外在Maya官方网站和Highend3d也可以下载到大量有用的mel供我们学习。

什么是表达式?mel与表达式有什么关系?

  mel与表达式的关系,Maya帮助文档中讲得很清楚:

  Expressions have a different purpose from MEL commands and MELscripts. You enter a MEL command to do a single action, forexample, to create a sphere.

  A MEL script is a list of commands you create to do a sequence ofactions, for instance, create a wall-shaped object and apply abrick texture to it.

  Because you store a MEL script in a file on disk, you can run ascript in different scenes and different work sessions, whethertoday or next year.

  An expression animates one or more attributes over time in asingle scene. By default, an expression executes each frame as ananimation plays. After you create an expression, it executeswhenever you play the animation-including when you play theanimation after saving, closing, and reopening the scene.

  A MEL command or script is not part of a scene after you executeit. You must execute it again to repeat the action.

补充说明

  mel是用户与Maya内部机制交流的通道。mel不能直接编写节点和属性,因此往往要使用表达式才能对物体进行实时控制。

  表达式是与动画不可分割的,表达式与动画的时间(time或frame)有密切的关系,表达式对动画的每一帧都要进行计算。

  在表达式中可以使用mel,但很多mel用在表达式中是没有意义的,比如说一般不会把编写界面的mel用在表达式中。

  mel脚本可以用于任何场景。表达式只能用于一个场景,另一个场景即使用到相同的表达式,也要重新创建。

  表达式主要是对物体的属性进行控制,可以用等号对物体的属性直接取值或赋值,例如:

  cone.translateX = 3;

  而mel就必须用getAttr或setAttr来做同样的事情了,例如:

  setAttr cone.translateX 3;

  什么是MayaAPI?与mel有什么关系?

  API - Application ProgrammerInterface(应用程序界面)。也有人称作SDK,是一种专门给程序员使用的界面或接口。

  MayaAPI提供了Maya的5个dll文件。这些dll中包含控制Maya的大量类和函数,我们通过这些类和函数用vc++编写自己的dll(mll)文件,这些函数通过Maya的方式(比如用mel命令的形式)来调用。

  我们常用到的*.mll插件都是通过MayaAPI编写的。

  MayaAPI比mel更强大,更复杂,效率更高,能做到许多mel做不到的事情,运行速度在mel的十倍以上。MayaAPI的功能主要体现在以下几点:

  编写mel命令。

  执行mel命令。

  进行创建物体,选择、缩放、删除等基本操作。

  编写manipulator。

  编写contexts(tool)。

  编写属性节点。

  编写材质节点。

  文件输入输出。

  编写独立的exe控制台程序。

  MayaAPI程序因为使用vc++,可以使用MayaAPI,MFC,还有很多SDK,几乎是无所限制。不过不能改动Maya底层的东西,不能更改Maya的运作方式。

  使用MayaAPI,需要有vc++的编程经验,并具有图形学基础。mayamaya

个人工具
名字空间

变换
查看
操作
导航
工具箱