|
作者 钱麟
在上一个例子中我们简单接触了一下结合Biped使用的群体动画,现在我们将运用已经学过的基础知识做一个更复杂的群体动画,如果你能顺利地完成这个例子的话,那就说明你已经初步掌握了Crowd模块以及Biped的动画流程编辑了。
打开cs_tut08_lesson7.max文件,这里有两组面对面对峙的代理物体,每一组后面都有一个球体(sphere),当中有一个crowd物体,如图所示。我们的动画目标就是假设将这两边的六个代理物体分为A组和B组,它们各自要设法跑到对方身后的球体位置。A组的人昂首阔步,一往无前地走向他们的目标,而B组的人见了他们的气势,有些胆怯,躲躲闪闪地避过他们后才敢跑向他们的目标。
场景中delegate01、02、03较另一组排列得比较紧,我们把他们设置为大步向前的A组,对面的delegate04、05、06我们把他们设置为B组。我们选择当中的crowd物体开始制作。在Setup展卷栏内,按Behavior
Assignments按钮,为A组的三个代理物体一个设置Seek beavior,点取对象为对面的绿球;再为B组的三个代理物体设置一个Seek
behavior,点取对象为对面的红球;最后再为所有的代理物体设置一个Avoid behavior。(做到这里应该已经非常熟悉基本的操作了,因此具体方法不再赘述。)
在Behavior Assignments and Teams对话框里把左边的相应的代理物体和行为都送到右边去,然后再去计算,初步结果就出来了。
之后我们在场景中新建一个Biped,大约80个单位高,复制5个,也就是让场景中总共有六个Biped。在Setup展卷栏中按Biped/Delegate
Associations按钮,在Biped列表中把所有的Biped都加进去,在Delegate列表中把所有的代理物体都加进去,按下面的associate按钮完成。
同样地,接下来我们要设置一个共享动画流程(shared motion flow),不过要建立共享流程,必须先建立一个单个的流程,然后才能建立共享。选择任何一个Biped的任何一个部分,进入motion面板,按Motion
Flow Mode按钮进入运动流程编辑模式,再按Show Graph按钮,进入Motion Flow Graph对话框,我们按Create
Multiple Clips按钮,然后按住键盘上的Ctrl点击walk_start.bip(开始走)、walk_stopt.bip(止步)、walk.bip(走)、walk_L90.bip(左转90度走)、walk_R90.bip(右转90度走)、walk_180.bip(倒转180度走)、loiter.bip(散步)这七个文件,把它们一起调出来。这样在图表上我们就有了七个图标。
现在我们就要来确定它们之间的关系和运动的过渡,再重复一遍有关过渡的概念——两个动画片段放在一起播放,它们的首尾不一定平滑地连接在一起,要把它们平滑地连起来的话中间必须要添加一个过渡的动作,才能做到。此外这个例子中因为有七个图标,大家可要看着点,别搞错了!为此我们可以排列一下它们的位置,结果如图所示。

在动画流程图表中(Motion Flow Graph),按Create Transition按钮,然后在walk图标上点击一下,这样我们创建了一个walk的循环过渡(如图所示),也就是说walk这个动作就会无限地进行下去,第一步和第二步之间也会有平滑地过渡动作,角色会走得很流畅。
在一个图标上按下鼠标向另一个图标拖曳就会生成第一个动作到第二个动作之间的过渡,在动画流程图表中就会出现一个箭头,我们用这个方法为所有的动作都设置它们的过渡效果,结果如图所示:

我们把它存起来,在Motion Flow展卷栏内用Save File按钮把这个流程存为my_Lesson7.mfe文件。再按边上的Shared
Motion Flow按钮,弹出Shared Motion Flow对话框架,按new按钮新建一个新的共享动画流程。用Load
.mfe按钮调出刚才的my_Lesson7.mfe文件。再在Shared Motion Flows对话框内,用Add按钮调把所有的Biped全部调进来,再用Put
Multiple bipeds in Motion Flow按钮把所有的Biped调入动画流程模式。
我们还要设置一个随机的开始动画,在Motion Flow Graph对话框内按Select
Random Start Clips按钮,再在图表中点击walk_start图标,让整个动画都以它开始生成随机的群体动画。
同样我们还要把刚才设置的随机动画的设置赋予场景中的Biped。我们选择场景中的crowd物体,按Multiple
Delegate Editing按钮,弹出相应的对话框,在Delegates to Edit组内,用Add按钮调出所有的Biped,然后在Biped组内选择Random
Start Clip并打开边上的SET。按最后的Apply按钮完成。
回到modifier面板,开始计算结果,可是我们发现B组的Biped并有正确地躲避对方,而且Biped之间有重合现象。这是因为所有的Biped都在同时计算,没有一个先后顺序,我们可以利用Priority优先计算功能来解决这一问题。
选择crowd物体,在Priority展卷栏最下面打开Display Priorities,场景中所有的Biped边都出现了一个0,这时说明没有排过先后顺序。我们曾经介绍过,排先后顺序的话Start
Priority值越小越先开始计算,比如0就比1先开始。我们现在就为六个代理物体排序,最好在顶视图中,我们分别把Start Priority设置为0、1、2,然后用下面的Pick/Assign按钮分别点取A组的三个代理物体(0的那个是缺省的,我们可以让A组当中那个代理物体成为“领头羊”,让他先走),然后为B组的三个代理物体赋予3、4、5的值(把3赋予当中那个)。
我们还要在Solve展卷栏的Bipeds组内,打开Biped/Delegates
Only、Use Priorities和Backtracking,打开Delete Keys Before Solve,因为必须消除以前的错误计算。
现在我们再计算,虽然速度上慢了许多,不过效果还是令人满意的。
|