为模拟现实中的水、火、雾、气等效果由各种三维软件开发的制作模块,原理是将无数的单个粒子组合使其呈现出固定形态,借由控制器,脚本来控制其整体或单个的运动,模拟出现真实的效果。(百度百科)
级联粒子系统编辑器,可以对粒子进行模块化的设计。一个粒子系统创建后只有很少的 最基础 的属性,以及一些行为模块。
每个模块代表了粒子行为的一个特定方面,并只对行为的该方面提供属性参数,比如颜色、生成的位置、移动行为、缩放行为,及其他等。用户可以在需要的时候添加或者删除一个模块,来进一步定义粒子的整体行为。由于这里的结果中只有必要的模块才会被添加进来,因此并没有额外的计算,也没有不需要的属性变量的参与。
在添加粒子发射器时,默认粒子模块为:
http://api.unrealengine.com/CHN/Engine/Rendering/ParticleSystems/Reference/index.html
在使用粒子模块工作的时候要对两个概念有所了解,他们是 初始状态 和 生命周期 或者叫 每次生命 属性。
如果将一个属性设置为 distribution 的类型,那么它就会在时间过程上发生变化,有些模块使用“相对时间”而有些模块使用“绝对时间”(下面的 distribution 部分有更多说明)。
在使用级联制作粒子效果的时候,需要始终记住每个对象之间的互相作用关系。在这篇文档中我们已经讨论了模块的概念,但模块只是粒子特效中的一个组件。总的来说,粒子系统的组件包括模块、发射器、粒子系统,以及发射器 Actor。可以用以下描述来记住这些概念之间的关系:
模块,定义粒子的行为,并且被放置在一个发射器中。
发射器,为展示效果发射特定行为的粒子,任意个发射器可以被同时放置在一个粒子系统内。
粒子系统,作为 内容浏览器 中的一个资源,可以被一个发射器 Actor 来引用。
发射器 Actor,是一个放置在关卡中的东西,用于定义粒子在场景中如何使用。
当使用粒子系统时,了解运算的次序也是很重要的。在级联编辑器中,列表区域的每列都代表了一个发射器,一列中的每个块代表一个模块。运算时的次序如下:
正如特效本身有各种不同的类型一样,发射器也分为不同的类型来制作各种特效。下面是目前可用的发射器类型:
需要注意的是,无论什么类型,发射器默认都是面片发射器。可以添加不同的发射器 类型数据 模块,改变发射器的类型。
特效系统中并不是每个部分都可以被预先定义下来。有时候,特效系统中一部分需要在运行时被控制及变化才能做到好的效果。比如,想要做一个魔法效果,该效果会随着能量的消耗而有变化,而能量消耗是基于施法行为的。在这种情形下,就需要向特效系统中添加参数。
一个 参数 是指一种能够将数据发送给其他系统,并从其他系统接受数据的属性,其他系统包括蓝图、Matinee、一个材质,或者其他来源。在级联中,几乎任何一个给定的属性都能够被设定到一个参数上,也就意味着属性能够从粒子系统外部来控制。
举个例子,将一个火焰特效的 Spawn Rate 设置成参数并在游戏中实时的根据玩家情况来增加或减小该数值,就能让玩家控制火焰特效的强度。
相反,在粒子系统中添加到模块中的参数,也能用来驱动其他系统。比如驱动一个在关卡中放置的给定材质的颜色。
在级联中,参数通常是通过 Distributions 的方式来建立的,这也是处理一个属性上数据的方式。可以在下文中找到 Distributions处看到概述,或者可以在 分布数据(Distributions)
页面了解更多信息。
粒子系统可以被设置为接受光照,这需要特别去设置。
要设置光照粒子的话:
遵循这些过程将使粒子在游戏中以光照模式显示。它们从发射器的位置接受光照,因此要移动原始的位置观察一下光照效果,或者在附近放置动态光源。
粒子系统很轻易的变得非常消耗性能。即使是使用 GPU 粒子时,虽然已经将大量的粒子运算转移到 GPU 上,但仍然需要考虑不同的粒子离玩家的远近以及它们产生的实际效果。
比如,假设有一堆营火,如果靠近看的话,可能会看见火焰的余烬和火花在烟雾中显现。然后,如果观察点在几百米远处,余烬的效果会小到比任何显示器一个像素的尺寸还小,那何必还在这上面进行运算?
这时就需要细节级别(LODs)的介入。LOD 系统能够自定义距离范围,超过一定距离后粒子系统则会自动简化。每个距离范围对应一个 LOD。简化的介入就是使用较低的数值,禁用一些模块,甚至禁用一些发射器。比如上面举的营火的例子中,最好就是一旦玩家远离了一定的距离后就彻底的禁用那些创建火花的发射器。
粒子系统可以有任意数量的 LODs,并且可以为每个 LOD 设定距离范围。
Distribution 是一组数据类型,以特殊的方式处理数据,比如为一个数值应用一个范围,或者使用曲线来对数值做插值操作。如果粒子系统需要任何随机属性,或者粒子需要随着时间进行变化时,就需要使用一个 distribution 来控制属性。
在级联中的很多模块的属性中都可以看到使用了各种不同的 distribution。属性的实际数值就是通过 distribution 来设置的。
有 5 种主要的 distribution 类型: