十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
[摘 要]本文针对具体的场景设计,引入MEL语言,详细阐述了Maya的二次开发的流程,通过比较进而说明基于三维设计软件平台的二次开发在三维设计建模中的可用性。 [关键词]MayaMEL语言场景设碧枣计
创新互联长期为近千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为武陵企业提供专业的成都网站制作、做网站,武陵网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。
[中图分类号]TP[文献标识码]A[文章编号]1007-9416(2010)03-0065-03
1 引言
Maya 作为Alias―Wavefront 的旗舰产品,现已成为国际3D 设计制作界的主流软件。它适用于专业角色动画、电影特技、影视广告等。并以其灵活、开放、高速和高效而备受推崇。
MEL 是Maya Embedded Language (Maya嵌入式语言)的缩写,是一种强大的命令和脚本语言,让你直接控制Maya 的特征、进程和工作流程。Maya界面的几乎每一个要点都是在MEL指令和脚本程序上建立的。由于Maya给出了对于MEL自身的完全的访问,你可以扩展和定制Maya。通过MEL,你可以进一步开发Maya使它成为你和你的项目的独特而创新的环境[1]。
2 MEL语言对Maya的进一步开发
目前的主流动画设计软件都或多或少的给用户提供了一个编程接口以进行开发。Maya则使用MEL语言对其进行开发。MEL作为一种脚本语言,受脚本解释器(Command Engine)和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就会运用的越好,在场景设计中也会更加得心应手。
3 MEL在场景设计中的应用
3.1 草地建模
场景设计中经常需要在户外铺设草地。草地的制作可以通过对单根小草建模,然后批量复制,在对其细节进行修改,但即便如此,同样是草地,由于区域不同,某个场景下完成的草地效果未必能适合其他场景的需要,所以必须重新建模。这种建模修改的工作非常繁琐,而且耗时。
3.1.1 通过MEL对草地建模提速
草地的特征是草的高度参差不齐,草的方向也会随生长长短倒向不同的方向,通过MEL对这些细节进行编写,可以制作各种样式的草地,由于草地的特征数据是可以手动修改的,这给与设计极大的灵活度,所以创建成后只需修改这些参数就能迅速生成场景设计中需要的样式。结果如图1所示。
3.1.2 基于MEL的草地建模流程
●制作一根草,加变形器
string $grassName[]=`polyCone -r $radius -h $height-sx3-sy 10-sz 0 -ax 0 1 0 -tx 1 -ch 1`;
setAttr ($grassName[0]+".translateY") ($height/2);
setAttr($grassName[0]+".scaleX") 0.25;
string $bendName[]=`nonLinear -type bend-lowBound 0 -highBound $height -curvature $curvature`;
setAttr($bendName[1]+".translateY")0;
草的模型是三棱锥,用polyCone建立单根草的模型,赋予其高度h,底面边数sx,棱划分数sz,再用缩放scaleX对其进行变形,令底面沿x轴方向由顶点向底边靠近,以体现草扁的特质,然后设置弯曲轨迹曲线curvature[2],显出草的弯折。效果如图2所示。
●随机放置每根草
global proc genGrass(float $minX,float $maxX,float $minZ,float $maxZ, int $num,string $style)
{
int $i;
for($i=0;$i 本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文 ●带入具体场景需求的参数,生成草地。
generateGrass(x方向最小值,x方向最大值,z方向最小值,z方向最大值,草的个数,“草的长短”)
genGrass(-10,10,-10,10,20,"long")
效果如图3所示。
经过以上流程,一块草地的设计就初步完成了。实际设计中还要对草地进行渲染,加上光线,这里重点在于介绍草地模型的建立,故不赘述。
可以看出,我们只要修改genGrass()中的参数即可生成各种样式的草地,但是这样在工作中,如果每次设计草地场景都要复制整段的MEL,再修改参数也是不人性化的。因为复制中如果漏了一个符号很可能导致整段MEL语言就无法运行,所以这里就要再次利用MEL对以上的模块进行封装。
3.1.3 基于MEL的草地建模脚本的封装
事实上,我们在使用Maya时,在菜单中创建某个物体,选择某个工具,对某项操作进行参数设置,在属性编辑器中对物体的属性进行调节,等等操作都是在Maya提供的用户图形界面上进行的。这些用户图形界面的使用方法已经以MEL命令的方式公开给了用户,使我们可以通过这些命令,创建自己的界面,在界面上输入或选择相关参数,调用编写好的脚本,起到封装的效果。
●定义图形界面框体
window -title "makeGrass" -w 400 -h 300 grassWin;
通过window命令建立了窗体的宽w,高h,以及formLayout的标题title。
●划分框体份数
string $form=`formLayout-numberOfDivisions 3`;
通过numberOfDivisions,将formLayout划分为3份,这在后面的用attachPosition定位时会起到作用。
●定义各参数按钮
floatSliderGrp -label "mindirectx" -field true -min -100 -max 0 minX;
floatSliderGrp -label "maxdirectx" -field true -min 0 -max 100 maxX;
floatSliderGrp -label "mindirecty" -field true -min -100 -max 0 minY;
floatSliderGrp -label "maxdirecty" -field true -min 0 -max 100 maxY;
floatSliderGrp -label "number" -field true -min 1 -max 1000 num;
radioButton -label "long" long;
radioButton -label "normal" normal;
radioButton -label "short" short;
string $but =`button -label "make grass" -command genGrass`;
根据设计需要,通过floatSliderGrp.生成拖动条,可以定义场景范围,快捷的选择场景需要的数据,通过radioButton生成单选按钮,选择草地的类型。最后设置功能按钮,用-command命令将生成草地genGrass模块与button按钮联系起来。
●显示封装模块操作窗口
showWindow makegrass;该命令将之前设置的按钮属性以图形界面显示出来,效果如图4所示。
通过以上阐述,繁琐重复的草地场景设计就可以通过几个拖动条,几个单选框方便的完成。
3.2 MEL运用的在场景设计中的收益
MEL的运用在设计过程中无疑大大节省了时间,降低了工作人员的工作强度,效率也得到极大的提高,制作人员可以将更多地精力投放到其他诸如场景灯光,道具设计等更重要的工作中去。与之前的重复建模,细节修改相比,运用MEL后一个同样规模的场景设计从之前的1个/2小时缩减到1个/10分钟,并且完成每个场景所需时间随着工作时间增长,前者所需时间会进一步增加,而后者则保持不变,可见MEL带来的不仅仅是单个任务的效率提高,对项目整体也是进一步的优化和提高。
3.3 MEL在场景设计中的应用扩展
MEL功能强大,上述草地场景只是其运用的很小一部分,但通过该设计,可以使我们了解到Maya出色的个性化控制, 其极大的灵活性和良好的开放性可见一斑。运用想象力, 改变上面的程序,还可以变化出更多更出色的效果[3]。MEL不仅在静态场景中表现出众,在设计动态场景如小溪缓缓流下高山,原子弹模拟爆炸,遨游太空行走一样表现不俗,Maya 为实现上述种种效果提供了一个丰富的工具库,而MEL使得动画师可以简便地设置模型或粒子关系,来精确地模拟真实世界中存在的一些作用力(如摩擦、重力和风),而这在过去用二维Flash 软件要花上几个小时的时间用关键帧方法才能实现。
4 结语
有效地使用MEL可以加深对Maya理解 。通过在Maya 的工作流程中使用MEL 语言进行开发工作,可以给你提供最大程度的流程简化,从而节省时间,降低强度,提高效率。同时,人机界面的改进也是亟待解决的问题,现有的工具在实现功能的前提下界面还不够友好,有的工具需要使用者进行简单的学习才能使用。创建简单易学,功能强大,适合设计师自身的界面也是工作的重要部分。MEL不是运用Maya必须精通的,但掌握MEL将会让Maya更好的为我们服务。
[参考文献]
[1] 陈绿春. Maya8.5从新手到高手[M].北京:清华大学出版社,2007.
[2] CompleteMayaProgrammingAnExtensiveGuide[M].北京:电子工业出版社.
[3] 陈汗青,吕杰锋.数码设计艺术[M].上海:人民美术出版社,2004.
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文
1、简单易学。
Go语言的作者本身就很懂C语言,所以同样Go语言也会有C语言的基因,所以对于程序员来说,Go语言天生就会让人很熟悉,容易上手。
2、并发性好。
Go语言天生支持并发,可以充分利用多核,轻松地使用并发。 这悄键是Go语言最大的特点。
描述
Go的语法接近C语言,但对于变量的声明有所不同。Go支持垃圾回收功能。Go的并行模型是以东尼·霍尔的通信顺序进程(CSP)为基础,采取类似模型的其他语言包括Occam和Limbo,但它也具有Pi运算的特征,比如通道传输。
在1.8版本中开放插件(Plugin)的支持,这意味着现在能从Go中动态加载部分函数。
与C++相比,Go并不包悉茄括如枚举、异常处理、继承、泛型、断言、虚函数等功能,但增加了 切片(Slice) 型、并发、管道、垃圾回收、接口(Interface)等特启陆巧性的语言级支持。
定义一个切片,然后让切片去引用一个已经创建好的数组。基本语法如下:
索引1:切片引用的起始元素位
索引2:切片只引用该元素位之前的元素
例程如下:
在该方法中,我们未指定容量cap,这里的值为5是系统定义的。
在方法一中,可以用arr数组名来操控数组中的元素,也可以通过slice切片来操控数组中的元素。切片是直接引用数组,数组是事先存在的,程序员是可见的。
通过 make 来创建切片,基本语法如下:
make函数第三个参数cap即容量是可选的,如果一定要悄旅自己注明的启毕凳话,要注意保证cap≥len。
用该方法可以 指定切片的大小(len)和容量(cap)
例程如下:
由于未赋值系统默认将元素值置为0,即:
数值类型数组: 默认值为 0
字符串数组: 默认值为 ""
bool数组: 默认值为 false
在方法二中,通过make方式创建的切片数吵对应的数组是由make底层维护,对外不可见,即只能通过slice去访问各个元素。
定义一个切片,直接就指定具体数组,使用原理类似于make的方式。
例程如下: