第八篇 模拟轮船航行时的水花效果
本课我们想要达到的效果是轮船在水中航行时产生的水花拖尾的效果。要想实现真实场景中的轮船拖尾的效果,首先,我们需要创建一个粒子流系统,只要轮船在运动,粒子就应该存在。我们需要对所有的粒子进行测试,来确定它是否与水面产生碰撞,如果它们与水面产生碰撞,则每一个测试的粒子将会继续发射出新的粒子,为了达到真实的效果,在实际制作过程中需要设置两种类型的粒子,也就是说刚开始时,轮船航行会产生较大体积的水花,还有一部分将会发射出较小的象薄雾一样的粒子,这种象薄雾一样的粒子将会随着风慢慢吹散,最终消亡,下面我们就来看一下实际的操作步骤。
1、打开范例场景。单击此处(37K, winzip压缩文件)打开我们提供的一个场景文件,在这个场景中,我们制作好了一个简易的小船模型,使用平面对象创建的水面,三个空间扭曲对象:风、阻力和重力,主要用来控制粒子也就是轮船航行时水花的效果。另外,场景中还有一个全导向器 (UDeflector01) 以及一个已经设置好了动画效果的用来跟随船船运动的摄影机,按下屏幕下方的播放动画按钮观察摄影机视图,我们会发现当小船随着波浪的运动上下起伏,如图1-1所示。

图1-1
2、创建粒子流。激活摄影机视图,然后按下键盘上的P键将摄影机视图切换至为透视图,选择场景中的小船,然后按下鼠标右键,在弹出的菜单中选择hide unselected(隐藏未选择对象),这样场景中除了小船以外其它的对象都被隐藏了。单击Create(建立)/Geometry(物体)钮,在其下拉列表中选择Particle Systems(粒子系统)选项,然后在命令面板上单击PF Source在视图中创建一个粒子流,其大小如图1-2所示。

图1-2
3、将粒子流系统的图标链接到小船。在工具栏上单击Select and Link(选择并链接)按钮,然后拖动粒子流图标到小船上释放,这样粒子流就会作为船的子对象,当我们把粒子流系统的图标与小船对齐后,它们将会一起运动,单击选择粒子流图标,然后使用工具栏上的“Align(对齐)”工具在所有三个轴上对齐图标和小船的对象的中心和方向,这样做的好处是粒子流中的大多数基于速度的控制都不依赖于粒子流发射器的几何体的位置,通过使粒子流图标居于小船中心,会为我们对粒子的控制提供非常大的灵活性和方便性,如图1-3所示。

图1-3
4、按下键盘上的6键或者是在Modify(修改)命令面板中单击Particle View(粒子视图)以打开粒子视图设置窗口,在名为“Event 01”的事件中,首先选择除“Birth”和“Display”操作符之外的其它的操作符,然后按下键盘上的删除键,如图1-4所示。

图1-4
5、在“Event 01”事件中,单击“Birth”操作符的名称使其高亮显示,然后在其右侧的命令面板上,我们将“发射停止”设置为 0,并将“数量”值设置为 300,这样就会使粒子流在动画的第一帧内同时发射 出300 个粒子,如图1-5所示。

图1-5
6、为事件添加新的操作符。为了创建粒子粘贴在船体上的效果,我们需要使用定义粒子最初位置的操作符,这里我们将使用“Position Object”操作符来实现这种效果,它的具体的含义请参看前面的文章。在粒子视图下方的仓库中,按下鼠标左键将“Position Object”操作符拖动到“Event 01”事件的下方,在光标位置出现蓝线的时候松开鼠标,这样我们就将新的操作符插入到了当前的位置,此操作符的作用可用来将网格对象用作发射器,在本例中我们将通过使用它把船体作为发射的对象。如图1-6所示。

图1-6
7、在“Event 01”事件中,单击“Position Object”操作符的名称使其高亮显示,在其右侧的命令面板上,在卷展栏中的控件分为两个主要组,即“发射器对象”和“位置”,在这里我们可以将多个网格对象定义为发射对象。“位置”组可用于定义对象上发射粒子的位置,因为我们要从船对象发射粒子,因此需要将其添加为发射器对象,在“发射器对象”列表下,单击“添加”按钮,然后选择小船对象,这样其名称将会出现在列表当中,如图1-7所示。

图1-7
8、设置粒子出现在小船上的位置。在模拟水花的时候,粒子不应该完全覆盖船体,而只需要从小船的底部发射即可,因此我们要把它们限制到小船的底面上,使用旋转工具旋转透视图,以便我们可以从小船的底部看到船,然后在Modify(修改)命令面板中单击进入Polygon(多边形)子对象层级中并选择船体的底部部分,如图1-8所示。

图1-8
9、按下键盘上的6键返回到粒子视图对话框当中,在“位置”组下拉列表中,选择“选定面”,此时我们如果向前拖动时间滑块,将会看到粒子会出现在我们选定的多边形上,但是它们并不会粘在船上,因为迄今为止只定义了粒子出生的位置,而没有定义粒子在其寿命期间如何移动,现在播放动画,我们会发现粒子将粘在船的底部随船一起移动,如图1-9所示。

图1-9
10、创建水花飞溅的效果。这里我们将使用“Collision”测试来实现,在“Event 01”底部添加“Collision Spawn”测试,从仓库中拖动此测试到Event 01的底部,如图1-10所示。

图1-10
11、在事件窗口中单击“Collision Spawn”测试以选择它,“Collision Spawn”是一种混合性的测试,它拥有“Spawn”测试和“Collision”测试的大部分功能。我们先来看一下“Collision Spawn”测试,“Event 01”事件定义了粒子的出生并且粘在了小船的底面的粒子,面且在每一帧都测试它是否与水发生碰撞。当粒子与水发生碰撞时,则测试为真,粒子有资格继续执行下一个事件,如果粒子没有与水发生碰撞,则测试为假,粒子将不会继续执行下一步的操作。使用“Collision Spawn”测试,我们可以选择只将原始的粒子发送至下一事件,或者只发送繁殖出的新粒子,或是两者同时发送,这里我们将使用默认选项,这种设置只会将繁殖的粒子发送到下一个事件当中,单击“Add(添加)”或“By List(按列表)”按钮将 UDeflector01 空间扭曲添加到导向器列表中,此时事件中的测试名称将会由“Collision Spawn 01 (无)”更改为“Collision Spawn 01 (UDeflector01)”,这是粒子流的动态名功能,即在事件中动作名称包括动作最重要的参数,如图1-11所示。

图1-11
12、在粒子视图右侧的命令面板上,在“Spawn Rate And Amount(繁殖速率和数量)”组中勾选“Spawn On Each Collision(每次碰撞时繁殖)”,这时“Until(次数上限)”参数将变为可用,它主要用来定义父粒子接受碰撞测试的最大次数,我们需要将默认值更改为任意较大数字,以确保每次船起伏时都发射粒子,这里我们将“Until(次数上限)”值设置为 100,同时,还要确保卷展栏顶部已勾选了为以下项测试真值>繁殖粒子的复选框,这样就会使繁殖的粒子在出生后立即有资格重定向到下一事件当中。将“Spawnable(可繁殖) %”设置为 25.0,它表示将实际繁殖粒子的现有粒子或父粒子的百分比,将“Offspring(子孙数)”设置为 15,它会会告知粒子流从与 WaterMover 对象碰撞的每个原始粒子发射15个粒子。将“Variation(变化) %”设置为 15.0,如图1-12所示。

图1-12
13、设置繁殖粒子的速度。在“Speed(速度)”组设置中可用于指定受测试影响或由测试创建的粒子的速度和方向。在其下拉列表中可用来设置父粒子和繁殖的粒子在碰撞时的反应。选项包括“Continue(继续)”和“Bounce(反弹)”。“Continue(继续)”将忽略导向器的效果,使粒子继续它们的运动,就像没有发生任何事情一样。在此场景中,父粒子将永远不会测试为真,因此此设置对它们没有任何影响。我们希望繁殖的粒子反弹离开导向器,因此可以保留“Offspring(子孙)”设置为“Bounce(反弹)”,我们还要考虑导向器的粒子反弹的参数,较高的数值将会使繁殖的粒子反弹得更远,“Collision Spawn”测试可用两种方法来控制繁殖粒子的初始速度,一种是“In Units(使用单位)”,另一种是“Inherited(继承)”,其中前者是粒子发射的绝对速度值,与父粒子的运动无关。在本例中我们将使用“Inherited(继承)”,也就是船在航行时,与水面接触得越剧烈,子孙粒子运动的速度就越快,“Inherited(继承)”是默认值,在实际使用过程中需要将其值减小至四分之一左右,这里我们设置“Inherited(继承) %”值为 25.0,将“Variation(变化) %”值设置为 15.0,将“Divergence(散度)”设置为 15.0,“Divergence(散度)”类似于“Variation(变化)”,但它并不能随机改变速度,而只影响方向,如图1-13所示。

图1-13
14、创建一个新事件到场景当中。在当在事件显示的空白区域添加“Speed”操作符,将它放在现有事件下面,此时粒子流将会创建一个包括“Speed”操作符和“Display”操作符的新事件,由于“Display”操作符可以用来控制粒子在视图中的显示方式,所以非常重要,当我们使用分支事件时,怎样判断测试结果何时为真?这就要通过更改分支事件中的“Display”操作符,便可以轻松地查看系统如何在视图中流动,我们还可以限制该事件中所显示粒子的百分比,以及显示每个粒子的 ID号,在新事件中,我们通过单击“Speed”操作符的图标禁用它,此时操作符变成灰色,表示其禁用状态。如图1-14所示。

图1-14
15、将“Collision Spawn”测试的输出连接到新事件的输入。使用鼠标拖动Collision Spawn测试到Event02事件上的小圆上,此时会在两个连接器之间出现一条蓝色连线,并带有显示流动方向的箭头。如图1-15所示。

图1-15
16、在创建的新事件中单击“Display”操作符,在其右侧的命令面板上更改其显示类型和颜色,单击操作符名称旁边的彩色圆点,也可以不进入操作符参数直接更改显示颜色,我们将它们变成绿色线,播放动画我们会发现,当船与水碰撞时,会发射粒子,由于我们已经为新粒子定义了不同于父粒子的显示方式,因此可以轻松识别这些新粒子,即视图中显示为绿色短线的即是,如图1-16所示。

图1-16
17、重新启用“Speed”操作符,方法是单击其图标即可,也可以使用鼠标右键单击操作符并从菜单中选择Turn On(启用),“Speed”操作符是根据粒子流的图标来创建速度,前面我们已经将图标与船对象对齐并链接到了船对象上,下面我们需要对其进行设置以创建径向力,此径向力将施加到粒子使其远离中心。单击“Speed”操作符,在其右侧的参数命令面板上,将“Direction(方向)”设置为“Along Icon Arrow(图标中心朝外)”,将“Speed(速度)”设置为 30.0,将“Variation(变化)”设置为 15.0 以使速度随机化,将“Divergence(散度)”设置为 45.0,如图1-17所示。

图1-17
18、添加外力作用。如果要添加像重力那样的力,我们需要使用“Force”操作符在事件中定义它们。但为获得更大的灵活性,我们将使用两个“Force”操作符,以便为每个“Force”操作符指定不同的强度,在“Speed”操作符下添加两个“Force”操作符,如图1-18所示。

图1-18
19、在第一个操作符中,使用“添加”按钮将 Gravity01 空间扭曲添加至其列表当中,将此“Force”操作符的“Influence(影响) %”值设置为 150.0,它表示此事件中的粒子将受到Gravity01 空间扭曲的影响,影响程度是其强度的 150%,这样设置以后将使这些飞溅粒子看起来比它后面的的薄雾具有更大的质量,而薄雾将会使用相同的“重力”空间扭曲,但是受到的影响确较小,如图1-19所示。

图1-19
20、向第二个“Force”操作符添加 Wind01 空间扭曲,并将其“Influence(影响) %”值设置为 5.0,设置较小的影响值是因为飞溅效果要模拟质量较大的水,所以它们受到的风的影响不应该像细微的海洋喷雾那么大,如图1-20所示。

图1-20
21、设置粒子寿命。此时如果播放动画,我们会看到正确形成的飞溅粒子,但是存在的问题是它们永远不会消失,只是受重力影响在水中持续下落,这是由于我们没有为粒子指定寿命。为粒子指定寿命我们可以使用“Delete”操作符,此操作符主要删除传递给它的粒子,我们在第二个“Force”操作符下面添加“Delete”操作符,并将其“Remove(移除)”选项设置为“By Particle Age(按粒子年龄)”,保持其默认的“Life Span(寿命)”值为60 帧以及“Variation(变化)”值为10帧,此时如果播放动画,我们会看到飞溅粒子在约 60 帧后消亡,如图1-21所示。

图1-21
叶子树:www.webshu.net