三维建模过程复用MEL脚本研究
2018-04-21胡晓辉郭建平
胡晓辉 郭建平
摘 要:三维建模过程复用是动画制作过程中常见的操作,传统的方式是手工建模和手工复制,大量的重复性操作造成了时间和精力的巨大浪费。文中以动画场景中创建一组旋转喷泉群为例,通过Maya MEL语言对三维建模过程复用的操作进行程序开发,此外还开发了该MEL脚本的可视化操作界面。经调试,该MEL脚本可快捷实现旋转喷泉群的参数化建模,对其它三维建模过程复用的MEL脚本开发提供了设计思路。
关键词:Maya;三维建模;复用;MEL语言;模块
中图分类号:TP391.4 文献标志码:A 文章编号:2095-2945(2018)10-0005-03
Abstract: The reuse of 3D modeling process is a common operation in animation production. The traditional way is manual modeling and manual copying. A large number of repetitive operations have caused a huge waste of time and energy. Taking the creation of a group of rotating fountains in the animation scene as an example, a program is developed for the reuse of 3D modeling process using Maya MEL language. In addition, the visual operation interface of the MEL script is also developed. After debugging, the MEL script can quickly realize the parameterized modeling of the rotating fountain group, and provides the design idea for the MEL script development of other 3D modeling process reuse.
Keywords: Maya; 3D modeling; reusing; MEL language; module
引言
随着计算机软硬件技术和计算机图形学的快速发展,三维动画制作已经在多个领域推广开来。Autodesk公司的三维动画软件Maya在动画设计和制作中应用广泛。Maya的可扩展性较强,MEL语言可以进行Maya命令的扩展和模块的开发,通过编制MEL脚本,可以大大简化一些动画制作过程中的重复性操作,提高了动画制作效率,节约了大量的人力物体。动画制作中三维建模过程复用的情况非常常见,完全可以利用MEL脚本实现重复建模和模型的多次重复调用。
1 MEL语言在Maya中的应用
MEL语言和其它程序設计语言一样是通过命令来实现程序控制的。三维制作软件Maya可以看作是由MEL命令集与节点组合而成,MEL用来动态的控制过程,节点是静态的来表现结果。虽然在Maya软件操作界面中,一般用户察觉不到在操作过程中对MEL语言的调用和执行,但是实际上所有的Maya操作都离不开MEL语言。
因为MEL语言的单独命令都只能执行一条程序操作,很少有操作仅仅靠一个独一的MEL语言命令就能实现的,所以在Maya中,MEL语言的调用都是以MEL脚本的形式进行。根据需要的操作而将多个MEL语言命令组合起来放在一起就构成了一个MEL脚本。将执行特定操作的MEL语言命令集写入一个数据文件中,那么这个数据文件就是一个脚本文件。MEL脚本的设计者可以定义一个命令来调用和执行这个脚本文件,这个命令是一个Maya中新的命令,也叫做脚本命令,脚本命令和Maya中自带的命令一样,还能在其它脚本中调用。Maya中调用这种新的MEL脚本程序,除了可以使用自定义命令来执行,还可以将这个自定义命令添加编辑到Maya系统菜单中,通过鼠标点击菜单中的该自定义命令关联到MEL脚本程序执行所需要的操作。
可以通过两种方法运行MEL脚本,一种是对于那些没有进行模块化设计的MEL脚本,这种脚本只是单独的标准命令集文件,通过调用该脚本直接执行其中的MEL命令,这种MEL脚本多用于功能单一、需要执行的操作不存在动态设置的情况。另一种是可视化脚本调用。将写成标准命令的MEL脚本通过可视化操作界面执行调用。这样虽然需要另行制作可视化模块界面,但是可以通过MEL脚本中的变量设置与关联,实现在模块化调用MEL脚本时的动态参数调整和输入,适合于执行的MEL脚本需要用户参与变量设置的情况。
2 三维建模过程复用模块的开发
三维建模过程复用是动画制作过程中常见的操作。例如在一个动画制作项目中,剧本中的场景需要创建一组旋转喷泉群。这组旋转喷泉群是由多个结构和外形相同的单独喷泉组成,其中中间的一个喷泉稍大一些,其余喷泉作为小喷泉圆形均布环绕这个大喷泉,这些喷泉在场景中需要一直喷射水花,然后水花落进喷泉的水池里。
这组旋转喷泉如果在Maya中逐个建模,再手工复制到指定位置费时费力,通过MEL语言编制一段脚本可以实现这个建模过程复用。主要思路和过程是先制作一个三维喷泉模型,把它作为一个整体建模,放置到场景中特定位置,再复制若干个喷泉模型围绕在这个中央喷泉周围。建模效果如图1所示。
创建如图1中的一组旋转喷泉群,在这个小场景中,其中的第一个喷泉底座的模型直接建模,周围的其它喷泉底座模型是通过命令阵列复制而来。喷泉的底座大小、层数都可能变化,喷泉的水流向上喷射的花型、速度、高度也可能不同,这些都需要设置变量参数。这些变量参数可以依据用户的设计需要输入,用户可以快捷方便的通过操作输入界面创建不同的旋转喷泉群。
喷泉喷出的水花是向上发射的,圆形扩散,然后在重力的作用下自由落体。这些水花可以用粒子实现,场景中创建一个向上的粒子发射器,扩散的形状和速度可以通过变量参数控制,喷泉水喷出后,要给粒子增加重力,使得水粒子在重力作用下落回到喷泉池子中。此外,在水落下时还需要设置水粒子与水池中的水进行碰撞。通过上述方式就创建出模拟现实生活场景的喷泉水池。
发射器可以通过以下MEL语句实现:
emitter -pos 0 0 0 -type direction -sro 0 -r 200 -nuv 0 - cye none -spd -cyi l $Fountain_Speed -srn 0 -nsp l - mxd 0 -tsp 0 -mnd 0 -dx 0 -dy l -dz 0 -sp $Fountain_Spread -n myEmitter;
particle -n myParticle;
connectdynamic -em myEmitter myParticle;
语句中的变量$Fountain_Speed用来存储喷泉水柱喷出的速度值,变量$Fountain_Spread用来存储喷泉水柱的扩散值,这两个变量都由用户在程序脚本模块的操作界面输入。
在Maya场景中设置基本重力,定义水粒子运动受重力场影响。水粒子与水池中的水进行碰撞可以利用循环语句来反复调用,保证喷泉不断水流不断,关键性脚本语句是:
int $j=0;
for ($j=0;$j<5;$j++)
{select -r myParticle;
select -add ("surface"+$j);
collision -r l -f 0 ("surface"+$j);
connectdynamic -c ("surface"+$j) myParticle;
event -n ("event"+$j) -die 0 -count 0 myParticle;
event -name ("event"+$j) -e -die l myPartical;}
制作完单一的喷泉模型之后,再利用MEL语言实现多个喷泉的阵列圆形环绕,同样采用一个for循环来实现,关键性脚本语句是:
int $j;
for ($j=1;$j<13;$j++)
{$Exp=$Exp+"group"+$j+".rotateY"="+$Rotate_Speed+"*frame+"+($j-1)*(360/$num)+";\nif ("+($j%2)+"==0)\n{\nif(frame%(10/"+$Glitter_Speed+")<("+$Glitter_Speed+"*2)))\ngroup"+$j+".visibility=0;\nelse\ngroup"+$j+".visibility=1;\n}\nelse\ngroup"+$j+"..visibility=1;\n";}
expression -s $exp -o "" -uc all -ae 1 -n experssionl;
这段语句可以根据用户设置,实现旋转喷泉群的建模,喷泉可以实现旋转。语句中的变量$Rotate_Speed控制旋转速度。
旋转喷泉群建模脚本制作完成之后,再创建一个可视化模块界面与这段脚本程序相互关联,通过该模块界面可直接调用和运行旋转喷泉群建模脚本。旋转喷泉群的建模效果都可以通过界面进行直观快捷的設置,创建的旋转喷泉群模型经过测试如果不符合要求,还可以对参数进行修改重新建模,直至满意。旋转喷泉群建模的制作界面如图2所示。
这个可视化界面中的radius参数用来控制喷泉阵列的圆周半径,fountain Speed参数用来控制水柱的喷射速度,fountain Spread参数控制水的扩散范围,num参数控制喷泉阵列的数量。设置好这些参数后点击“create”即可创建旋转喷泉群,“delete”按钮可以删除不满意的模型。Rotate Speed用来控制圆周的喷泉旋转速度,glitter Speed用来控制喷泉群的动作频率。设置好之后点击“anim”可以运行动画。
3 结束语
文中利用MEL语言制作了三维建模过程的复用的Maya二次开发脚本,该脚本可以实现旋转喷泉群模型的批量建模,总结步骤如下:
首先,根据场景需要对建模过程进行分析;其次,运用MEL脚本实现建模和模型的复用,一些模型的动态数据可以设计成变量由用户控制;最后,制作这个三维建模过程复用模块的可视化制作界面,通过这个界面实现最终的三维建模。
在动画制作过程中遇到的其它类型的模型需要建模和复用的,都可以通过这个思路编写MEL脚本模块来实现。
参考文献:
[1]Mark R. Wilkins. Maya动画师MEL脚本编程全攻略[M].北京:电子工业出版社,2004.
[2]陈清,韩杰,杨娟.电脑动画设计与制作[M].济南:山东美术出版社,2006.
[3]戴健文.面向真实感渲染的材质转换系统与优化[D].杭州:浙江大学,2016.
[4]何伟.MEL脚本语言在数字集群动画中的设计与实现[D].北京:北京工业大学,2012.
[5]贺瞿.基于动力学原理的Maya粒子特效插件[D].上海:上海交通大学,2011.
[6]李志豪,李才应.Maya命令参考大全[M].北京:兵器工业出版社,2006.
[7]刘娟娟.基于MayaMEL语言的数字媒体动画控制技术的研究[J].电子技术与软件工程,2015(1):115.
[8]罗汉.MayaMEL动画编程从入门到精通[M].北京:兵器工业出版社,2005.
[9]孟诗涵.创意材质在Maya动画创作中的表现研究[D].长春:东北师范大学,2016.
[10]田玉婷.Maya的MEL语言在项目中的开发应用[J].黑龙江科技信息,2007(22):100.
[11]王澄宇.Maya脚本应用手册:表达式与MEL语言[M].北京:人民邮电出版社,2013.
[12]吴文哲.MEL语言在Maya场景设计中的应用[J].数字技术与应用,2010(3):65-67.
[13]夏航.MAYA软件中使用MEL脚本设计粒子碰撞[J].中国现代教育装备,2010(17):31-34.
[14]徐冰.数字媒体动画控制技术研究[J].电子制作,2015(4):109-110.
[15]于海雯.Maya编程技术[J].电脑知识与技术,2013(36):8409-8410.
[16]胡晓辉,万嵩.基于软件工程及其模型的课件开发研究[J].高教学刊,2015(23):95-96.