|
作者 钱麟
使用群体动画的步骤一般是先将行为(Behavior)赋予代理物体(Delegate),再赋予角色模型或Biped,角色模型或Biped可以带有它们原来的动作设置,因为代理物体能以多种方式将新老动作融合。
让我们开始我们的旅程,不过刚上来我们先给大家看两个比较简单的例子,熟悉一下它的制作流程。
我们先在场景中(顶视图)建立一个Crowd物体和一个Delegate物体,它们的位置大小并不重要,只要你自己看起来方便(如图所示)。

我们先为Crowd物体施加行为(Behavior),注意这都是常规的操作步骤。选择crowd物体进入modifier面板,在Setup展卷栏中按New按钮,弹出Select
Behavior Type对话框,我们先使用一个最简单的动作——wander Behavior(漫步),如图所示。
 
按OK后退出,保留其全部缺省参数。我们要把行为赋予代理物体,在Setup展卷栏中,按Behavior
Assignments按钮,弹出Behavior Assignments and Teams对话框,在左边我们选择Delegate01和Wander
Behavior(必须要同时选择一个Behavior和一个代理物体),然后利用当中一排箭头,把两个东西送到右边去,如图所示。

按OK退出,下面我们就要来开始解算了,在Crowd command面板,Solve展卷栏上,保留缺省设置,按下Solve按钮。结果Delegate物体无序在地面上移动,如果换成是个人的话就会随意地散步了。如图所示。

好了,以上是Crowd的基本操作,是让大家上手的,下面我们来接触更加难的了!刚才我们使用了一个Behavior和一个代理物体,现在我们要用多个来混合使用。先建立如下场景——一个代理物体和一个crowd物体,再在场景正中建立一个box和一个大的sphere将box包住,如图所示。

下面我们用Scatter Objects(播洒物体)工具将delegate物体随机复制在sphere的表面。选中crowd物体,在Setup展卷栏中,按Scatter
Objects按钮,弹出Scatter Objects对话框。在Clone面板上按Object to Clone下的按钮,点取场景中的代理物体,把下面的How
many设置为9,按最下面的Generate Clones按钮,这样加上原来的那个场景中共有10个代理物体,因为重叠在一起,因此从表面上看只有一个。
仍然在Scatter Objects对话框里,在Position面板,Placement
Relative to Object组下,选择On Surface.,再按下面的none按钮选择场景中的sphere。最后按最下面的Generate
Locations按钮,代理物体就会随机地分布在球体表面了,效果如图所示。

虽然已经随机分布了,但我们希望能使所有的代理物体都能朝向当中的box(球体的中心位置),在Scatter
Objects对话框的Rotation面板内, Look At Target组中,选择Selected Object,再用none按钮选取box物体。最后按下Generate
Orientations按钮,达成了效果,如图所示。

接下来我们把那个sphere球体删除,并储存成cs_tut08_lesson4a.max文件,先别管为什么,我们今后会用到。现在我们要为这些代理物体设置两种不同的行为:Seek和Repel(寻找和排斥),让一半代理物体向box靠近(寻找),而另一半远离box(排斥)。
选择crowd物体,进入modifier面板,在Setup展卷栏上,添加一个Seek行为,再在下面的Seek
Behavior展卷栏上用none按钮点取box物体,即去寻找box物体。
然后我们把行为赋予代理物体,在Setup展卷栏上按Behavior Assignments按钮,弹出Behavior
Assignments and Teams对话框。对于多个代理物体,我们不必一个个地为其设置行为,而可以将这些代理物体编个组,然后一起设置一个行为。方法是在Team组内按New
Team,我们把它命名为Seek Team,然后按Add Members按钮,在弹出的Select Delegates对话框配合Shift键选择Delegate01到Delegate05这五个代理物体,OK。
在左边同时选择Seek Team和Seek Behavior,用当中的箭头按钮把它们送到右边去。
前面我们是在modifier面板上为crowd物体施加行为的,我们还可以在Behavior
Assignments and Teams对话框内为其赋予行为,就是那个New Behavior按钮,我们用它为我们的crowd物体赋予一个Repel
Behavior。不过要修改它的话还得回到modifier面板,我们在Setup展卷栏中,指定场景中的box为排斥物体并关闭Use
Radii。这样排斥行为的影响力就不受距离限制。
同样我们把行为赋予代理物体,在Behavior Assignments and
Teams对话框里,在Team组内按New Team,我们把它命名为Repel Team,然后按Add Members按钮,在弹出的Select
Delegates对话框配合Shift键选择Delegate06到Delegate10这五个代理物体,OK。
在左边同时选择Repel Team和Repel Behavior,用当中的箭头按钮把它们送到右边去。
退出对话框,在Crowd command面板,Solve展卷栏上,保留缺省设置,按下Solve按钮。我们得到了我们想要的效果,但是这些代理物体的运动都是在一个平面上进行的,我们接下来希望能让它们在三维空间内运动。
选择crowd物体,进入modifier面板,在Setup展卷栏内,按Multiple
Delegate Editing按钮,弹出Edit Multiple Delegates对话框,在Delegates to Edit组中按Add按钮,选择所有的代理物体。
在Gneral组,关闭Constrain to XY Plane。再打开边上的SET,确保退出对话框后修改能够起作用。然后按Apply
Edit按钮完成。再计算一次,可是,几个向box接近的代理物体有重合碰撞现象,而这个例子中我们就要设法解决这一问题并设置一定的运动方向。
我们在为Crowd物体施加一个Aviod(避免)行为。选择crowd物体进入modifier面板,在Setup展卷栏中按New按钮,弹出Select
Behavior Type对话框,我们选择Aviod Behavior。在Avoid Behavior展卷栏中,用Multiple
Selection选择场景中所有的物体(包括代理物体和box)。
进入Behavior Assignment对话框,把Avoid behavior和Seek
Team同时选中,一起送到右边去。之后就是退出去计算,我们看到代理物体们不会相互碰撞了。
|