粒子系统中最常用也最重要的一种使用场景是实现天气效果。只需要做很少修改,场景就能很快从蓝天白云变成雪花飘舞。
和之前看到的粒子系统从一个源头发出粒子的情况不同,天气效果完全围绕着场景。
新增和放置一个新的粒子系统
为了创建下雨或下雪的天气效果,首先我们要创建一个新的粒子系统物体,并将其放到天空中,让其粒子从天空朝向地面发出。
1. 在项目窗口中,进入Assets > CreativeCore_VFX > Scenes,打开TutorialScene_VFX_Outdoor场景。
2. 在Hierarchy窗口中,点击右键,选择Effects -> Particls System
默认情况下,这会创建一个向天空发射粒子的粒子系统。
3. 在Hierarchy中,右键点击新建的粒子系统,选择Rename,将其重命名为FX_Snow或FX_Rain。
FX是Effects的简称。我们还可能会看到SFX,表示Special Effects。
4. 我们要让例子系统从天空朝向地面。在粒子系统游戏物体的Transform组件中,设置它的Position到X=0,Y=10,Z=0,并且将Rotation设置为X=90,Y=0,Z=0。
5. 点击运行按钮,预览一下效果。目前这个效果看起来有那么一点点像一个天气效果了,但还需要做些细微调整。
配置主模块属性
一个粒子系统由一些列不同的模块所控制,每一个模块控制粒子系统不同方面的效果。在Inspector中,第一个模块是主模块(main module)。这是我们第一个要编辑的模块,它包含了最重要的粒子属性比如大小、速度和生命周期。
1. 主模块是Particle System组件的第一个模块,其名字和游戏物体的名字(本例是FX_Snow)是一样的,点击它将其展开。
2. 为了修改粒子的大小,在主模块里调整Start Size属性,案例中设置为0.1用于小雪花。
这里的名字里有Start,表示我们还有能力随着时间调整粒子的大小。下图是Start Size为1.0和0.1时的效果对比
3. 我们可以使用Start Speed来修改粒子的速度。例子中我们将其从5降为了1,让其看起来好像是缓慢飘落,如果对于雨滴,则可以适当增加这个速度。
但是现在我们会看到一个问题,“雪花”飘落的速度是减慢了,但是好像它们没办法落到地面了。
如果我们增加Start Speed,比如修改为10,此时雪花还会以较快速度穿出地面
4. 为了解决这个问题,我们需要调整粒子的生命周期(lifetime)属性。我们还是将粒子速度调低,然后将Start Lifetime从5秒调整到更大的值,让“雪花”看起来正好能飘落到地上(可能会稍微穿过地面一点)。
点击运行按钮,看看效果,此时我们会发现一个严重的问题。场景运行后,我们要等较长的时间来看到雪花效果。这是因为粒子从高处产生,慢慢落下。
5. 在主模块中,我们启用Prewarm属性。这个属性表示在场景启动的时候,粒子系统预先会走完一个完整的周期。勾选后再次看看效果。
接下来,我们要去配置一下其它模块,让粒子以相同的方向向下运动。
配置Shape和Emiision模块
首先我们来看在新建粒子系统的时候,默认就启用的Shape和Emission模块。
这两个模块一起工作,用来控制有多少粒子被发射(Emission),以及产生粒子的容器的形状(Shape)。
首先,我们将粒子的形状修改为平坦的、矩形的、类似于一片云的形状。
1. 展开Shape模块,此时注意观察场景视图,我们会看到一个锥形的东西。我们将Shape属性从Cone改为Box。
编辑现在锥形的东西已经变成了一个盒子,注意此时雪花掉落的大小和方向也有了变化。但现在这个盒子还是太小,我们要调整一下它的大小。
注意:如果我们无法看到这个锥形或盒子的外观,需要启用场景视图的右上角的Gizmos。
2. 增加这个盒子的大小,通过改变Shape的Scale属性,将其设置为X=10,Y=10,Z=1
此时,“雪花”飘落的更加分散了,但看起来也更稀疏了。我们要增加粒子系统的发射速率。
3. 展开Emission模块,增加Rate Over Time属性,从每秒10个例子增加到一个150-1000左右个例子,这个值根据我们要表现的效果来调整。
此时我们可以看到,“雪花”变密集了,但是又出现了一个新问题。“雪花”的出现变成了一段一段的,看起来非常奇怪。
这是因为屏幕上粒子的数量已经超出了粒子系统限制的粒子最大数量导致的。
4. 在主模块中,将Max Particle属性从1000改到10000,这样就能解决上面的问题了。
现在看起来似乎解决了问题,但Emission Rate和Max Particles的值很大。在实际项目中,这样做的性能消耗会让运行的机器足够喝一壶了。在实际项目中,VFX艺术家的一个非常大的工作是要确保在视觉效果足够好的情况下,还能做到性能最优。目前我们所使用的这种解决方案显然会降低应用的性能(关于VFX性能优化的东西不在本笔记讨论范围内)。
目前,“雪花”看起来比较好了,但观察单片雪花的形状是一个圆形,并不像雪花的形状。
下面我们使用Renderer模块来解决这个问题。
配置Renderer模块
最后一个要修改的模块(也是默认启用的模块)是Renderer。这个模块控制了粒子如何被绘制,包括它的纹理。
当前我们的“雪花”所使用的是默认的ParticlsUnit材质。
1. 展开Renderer模块,然后在Material属性处,点击圆形选择按钮,选择SnowMaterial(如果是雨滴效果选择RaindropMaterial)。
修改后,看看效果。