预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

go语言应用场景_MEL语言在Maya场景设计中的应用[摘要]本文针对具体的场景设计,引入MEL语言,详细阐述了Maya的二次开发的流程,通过比较进而说明基于三维设计软件平台的二次开发在三维设计建模中的可用性。[关键词]MayaMEL语言场景设计[中图分类号]TP[文献标识码]A[文章编号]1007-9416(2010)03-0065-031引言Maya作为Alias―Wavefront的旗舰产品,现已成为国际3D设计制作界的主流软件。它适用于专业角色动画、电影特技、影视广告等。并以其灵活、开放、高速和高效而备受推崇。MEL是MayaEmbeddedLanguage(Maya嵌入式语言)的缩写,是一种强大的命令和脚本语言,让你直接控制Maya的特征、进程和工作流程。Maya界面的几乎每一个要点都是在MEL指令和脚本程序上建立的。由于Maya给出了对于MEL自身的完全的访问,你可以扩展和定制Maya。通过MEL,你可以进一步开发Maya使它成为你和你的项目的独特而创新的环境[1]。2MEL语言对Maya的进一步开发目前的主流动画设计软件都或多或少的给用户提供了一个编程接口以进行开发。Maya则使用MEL语言对其进行开发。MEL作为一种脚本语言,受脚本解释器(CommandEngine)和Maya内置命令的影响,还是有很多局限的。MEL不能使用ActiveX插件,还只能根据Maya中已有的命令(dll或mll中注册过的命令)进行扩展,无法直接调用dll模块中的函数。我们平常使用的dll或exe程序文件是经过编译器优化的二进制文件,命令的执行速度非常快,而MEL脚本语言是文本,有一个脚本解释器分析的过程,命令的执行速度较慢,大约要慢20倍。MEL不支持指针,不能对内存进行直接操作。这就导致了很多方面的效率超级低下,对内存的间接操作可能会使运行速度降低100倍甚至1000倍以上。不过这样也有一个不容争辩的好处,就是不会产生内存泄漏,保障了Maya的稳定性。尽管如此,考虑到MEL在场景设计中的许多优势,如快速搭建重复的场景,MEL仍不失为一个公认的选择。2.1流程简化Maya中的所有的按钮命令都是通过MEL来调用的,你可以记录并把其中一些命令组合起来,通过一键或按钮来自动执行这一组命令,就像PhotoShop里的Actions一样。在场景设计中,有些环节步骤非常繁琐,通过MEL命令将这些步骤整的命令整合在一起,大大简化了操作的流程。2.2功能扩展对于一个项目来说,必然有各种特定的需求,这些是Maya库中的基本工具所不能满足的,但是MEL可以按用户需求编辑设计各种细微的场景并封装成块调用,这大大扩充了Maya的功能,使Maya运用起来更友好,更顺手。2.3界面友好MEL有一个很重要的功能是编写界面,Maya的整个界面是用MEL编写的,Maya中的所有界面元素都可以编写到你自己的MEL程序界面中,你可以用MEL跟据自己的习惯定制自己的操作界面。实际的应用使我们感到:MEL是Maya使用最方便和控制最灵活的编程接口。Maya中的每一步操作都是在执行MEL,因此Maya的任何一个功能,能做的任何一项操作,都可以加到你自己的MEL程序中。正如Maya的图形用户界面(GUI)也是由MEL来控制的。既然在Maya的每个角落都有MEL的存在,那么,对MEL了解得越是深入,Maya就会运用的越好,在场景设计中也会更加得心应手。3MEL在场景设计中的应用3.1草地建模场景设计中经常需要在户外铺设草地。草地的制作可以通过对单根小草建模,然后批量复制,在对其细节进行修改,但即便如此,同样是草地,由于区域不同,某个场景下完成的草地效果未必能适合其他场景的需要,所以必须重新建模。这种建模修改的工作非常繁琐,而且耗时。3.1.1通过MEL对草地建模提速草地的特征是草的高度参差不齐,草的方向也会随生长长短倒向不同的方向,通过MEL对这些细节进行编写,可以制作各种样式的草地,由于草地的特征数据是可以手动修改的,这给与设计极大的灵活度,所以创建成后只需修改这些参数就能迅速生成场景设计中需要的样式。结果如图1所示。3.1.2基于MEL的草地建模流程●制作一根草,加变形器string$grassName[]=`polyCone-r$radius-h$height-sx3-sy10-sz0-ax010-tx1-ch1`;setAttr($grassName[0]+".translateY")($height/2);setAttr($grassName[0]+".scaleX")0.25;string$bendName[]=`nonLinear-typebend-lowBound0-highBound$height-curvature$curvature`;setAttr($be