APP下载

MAYA软件中使用MEL脚本设计粒子碰撞

2010-10-12

中国现代教育装备 2010年17期
关键词:发射器脚本命令

夏 航

北京联合大学 北京 100095

MAYA软件中使用MEL脚本设计粒子碰撞

夏 航

北京联合大学 北京 100095

目前,随着三维技术的普及与进步,MAYA软件在三维动画、影视特效中的应用越来越广泛。但是,作为MAYA软件核心技术之一的MEL脚本在国内成功运用的案例还非常有限。本论文从艺术设计人员的角度和思维方式出发,将三维动画中频繁使用的粒子碰撞效果运用MEL脚本进行设计,从而带来制作时间的缩短和成本的降低。

MAYA软件;粒子碰撞;MEL脚本

在影视特效中,粒子碰撞效果经常会被用来模拟一些自然现象,比如:流水、火焰、落石等。这主要由于如果采取实际拍摄的手法需要昂贵的高速摄像机和微距镜头等设备才能实现,且其中的细节表现始终是一项难度较高的技术。在一些成本、条件有限且精度要求较高的片断中,影视业界经常会采用三维软件模拟的创作手法来加以表现。

在MAYA软件中为了逼真地模拟出自然界物体的运动效果,往往需要设计师使用上百个命令,还需要不断地进行调整和测试才能够逐步接近。而且,这种效果经常会需要在不同作品中反复使用到,只是为了不同场景需要进行细微调整,如果每一次都要凭借经验进行庞杂的设定过程则会大大降低工作效率。那么,如果能够将这些复杂的操作使用MEL脚本,编辑成为可以“一键式”执行的程序化命令将会大大简化设计师的工作时间和精力。这种脚本的设计与开发在国内外都是有着很好的需求和市场前景的。

一、创建场景

粒子特效在MAYA软件中经常用于模拟很多自然现象和场面镜头,如:电影《指环王》一片中魔兽军团攻城镜头。在使用该项功能时,往往还需要搭配动力学的部分功能,使得场景效果更加逼真。

在脚本中,主要设计粒子对象的基础形态,以及如何使它们与表面产生相互作用的力,还有就是指定系统中的一个或多个粒子与一个或一组表面碰撞并产生相互作用。

首先,在场景中,利用MEL脚本命令创建出一个平面:

polyPlane -name Floor -width 1 -height 1-subdivisionsX 4 -subdivisionsY 4 -axis 0 1 0;

然后,使用setAttr命令重命名并放大该平面:

setAttr Floor.scaleX 6;

setAttr Floor.scaleZ 6;

现在需要在场景中添加一个设定方向的发射器并将其命名为Emit,并将发射器类型设定为Directional,频率Rate为30,方向为X=0,Y=-1.0,Z=0,扩散度为0.2。由于是对于发射器创建的测试阶段,为了减小计算量粒子的频率仅设置成为30个/秒。将发射器沿着Y轴移动4个单位,使得被发射粒子在穿越Floor对象前需经过一段时间。下面创建发射器的MEL代码:

string $eObject [] =`emitter -name waterEmit -position 0 26 0 -type direction-rate 100 -speed 0.2 -spread 0.2 -dx 0 -dy -1-dz 0`;

在命令中,通过使用单引号将命令字符串括起来,也能够创建一个包含创建发射器命令返回结束的字符串数变量。通过这个操作,字符串数组将包含被创建节点的名称。发射器名称Emit将存入数组第0个位置,并且它的形状节点名称EmitShape将存入数组第1个位置。

由于在MAYA软件中,粒子的发射器和粒子是两个独立开来的节点,创建发射器并不能产生出粒子,因此要创建一个粒子对象。完成操作后,还需要将这一结果存入另一个字符串数组变量,然后利用connectDynamic命令将存储在两个字符串中的结果用动力学的方式连接起来。这样做的目的是明确地指出发射器应该发射哪些粒子:

string $pObject [] =`particle`;

connectDynamic –emitters $eObject [0]$pObject [0];

现在将场景动画的默认时间更改为1000帧以便使粒子能够充分解算,并观察效果(如图1所示):

playbackOptions –min 1 –max 1000;

图1 创建场景

二、碰撞粒子

通过上一步的命令,虽然创建出来了被碰撞物体Floor和模拟水流的Particle1,但仔细观察会看到,粒子穿透了平面而并没有与之发生碰撞。因此,需要添加碰撞节点,并通过这个节点将粒子与平面连接,以使其落到平面后产生应有的反弹效果:

collision –resilience 1.0 –friction 0.0 Floor;

connectDynamic –collisions Floor particle1;

使用collision命令后,场景中会创建出一个geoConnector节点,该节点会为Floor对象提供额外的与碰撞相关的动力学属性。然后,connectDynamic命令会将particle1对象与Floor相连接,以使得粒子与Floor对象所构成的地板发生碰撞。此节点可以通过在软件的Hypergraph超图窗口中选中Floor对象,并单击Input and Output Connections(显示上下游节点)命令的图标查看到结果(如图2所示)。

图2 Floor平面节点链接图

确定成功后,重放场景以使软件重新对动力学进行结算,可以看particle1对象从地板反弹而不是穿越它的情况(如图3所示)。

图3 修改后的粒子反弹效果

三、利用geoConnector节点控制弹力和摩擦

刚才提到geoConnector节点会提供一些动力学特有的控制选项,其中比较重要的有Resilience(弹力)和Friction(摩擦力)。这里可以将弹力理解为“反弹”的控制,把摩擦力理解为粒子在发生碰撞后在Floor表面“滑动”的控制。如果想模拟的水流比较粘稠可以将弹力改小,将摩擦力增大;反之,则需要弹力加大,摩擦力减小。

这里可以通过输入如下MEL命令进行设置:

setAttr geoConnector1. resilience 0.0;

setAttr geoConnector1. friction 0.2;

图4 显示了动画重新解算结果,可以看到Particle1所发射出的粒子在碰撞到Floor表面后会在上面滚动。

图4 利用geoConnector节点控制粒子效果

如果使用软件自身面板命令操作需要首先对geoConnector节点有一定的认识,而这个节点属于上层节点需要通过不断展开物体的连接关系才能够找到(如图5所示)。使用MEL脚本命令加入这一控制更加便捷。

图5 属性编辑器窗口中geoConnector1节点位置

四、进一步改善场景

现在来完成粒子碰撞部分的测试工作。在真实环境中,水流发生碰撞后经常会沿物体倾斜的方向流动,接着就有可能与第二个平面产生碰撞。在MEL脚本中首先将Floor物体沿X轴倾斜-30°:

rotate -30 0 0 Floor;

预览动画,结果如图6所示,可以看到,粒子在与平面发生碰撞后,会沿平面倾斜方向滑落。

图6 平面倾斜

下面添加第二个平面对象取名Floor1并旋转它,使得particle1粒子产生从一个地板滑落到另一个地板并发生碰撞的效果。具体实现可以复制原有的Floor对象,并将新产生出来的平面沿Z轴移动3.0个单位,沿Y轴移动-3.0个单位。然后沿着X轴倾斜30.0°:

duplicate -name Floor1 Floor;

move 0 -3 -7 Floor1;

rotate 30 0 0 Floor1;

接下来需要使原有particle1粒子与新的Floor1平面发生碰撞,因此需要加入第二个geoConnector节点,考虑到力的衰减将它的resilience和friction属性在geoConnector1的基础上略微加大:

collision -resilience 0 -friction 0.25 Floor1;

connectDynamic - collisions Floor1 particle1;

效果如图7所示。

图7 使粒子与新产生的Floor1平面发生碰撞

可以看到,当粒子与新的名为Floor1平面发生碰撞时会向上滚动,而不是像真实环境的下落效果。这主要是由于目前场景中的粒子仅仅受到了发射器和碰撞两种力的作用,在与Floor1发生碰撞时发射的速度快、力度大,现在需要将一个重力场加于particle1上,以使粒子受到重力控制而滑落:

gravity –magnitude 2 –attenuation 0;

connectDynamic –fields gravityField1 particle1;

效果如图8所示。

图8 重力场添加后粒子运动的变化

最后,为了制作材质效果,需要将particle1对象的效果渲染类型设置为球体,并将其半径设置为0.2,以便可以清楚地看到粒子的效果:

setAttr particle1.particleRenderType 4;

addAttr -longName radius -defaultValue 0.2 particleShape1;

图9显示了重新进行动力学解算后的效果。

图9 将粒子渲染类型设置为球体

在这一部分的设计中,重点使用MEL命令设计了粒子的基本形态,粒子与多个物体产生碰撞,相关节点控制被碰撞物与粒子的相互作用,以及场如何去完善粒子的效果。

五、结束语

脚本设计时,在保证艺术效果的前提下,尽量简练命令语言以优化执行速度的原则。根据日常MAYA软件应用经验,脚本的最终效果设置为使用频率较高的参数内容,使实际应用尽可能便利。尤其在创建粒子、碰撞物体时,省去了多余的属性设置,这样可以降低程序运算负担提升脚本的执行速度。MEL脚本的探索在国内还处于一个起步阶段,可以被借鉴和参考的资料非常有限,本设计也需要不断地完善。

[1]汤晓山.计算机三维动画[M].北京:清华大学出版社,2007

[2]罗汉.Maya MEL动画编程从入门到精通[M].北京:兵器工业出版社,2005

[3]Mark R. Wilkins, Chris Kazmier, Stephan Osterburg,唐俊东,王东安译.MAYA动画师MEL脚本编程全攻略[M].北京:电子工业出版社,2004

Design the particle collision used MEL script in MAYA

Xia Hang
Beijing union university, Beijing, 100095, China

Along with the popularity and development of 3D technology, the use of MAYA in 3D animation and visual effects has been growing. However, as a core technology in MAYA, MEL script has received limited success in China. From the view of an art designer, the thesis focuses on utilizing MEL script to design the often-used the effect of particle collisions in 3D animation, which could reduces production time and cost.

MAYA; particle collisions; MEL script

2010-06-01

夏航,硕士,讲师,艺术设计系副主任。

猜你喜欢

发射器脚本命令
酒驾
只听主人的命令
安奇奇与小cool 龙(第二回)
中国LG6型40毫米半自动榴弹发射器
2012款汉兰达车遥控发射器识别码注册方法
数据库系统shell脚本应用
蜘蛛丝发射器
移防命令下达后
雷电发射器
快乐假期