简介
粒子系统主要用来解决由大量按一定规则运动(变化)的微小物质组成的大物质 在计算机上的生成与显示的问题。
经常使用粒子系统模拟的现象有火、爆炸、烟、水流、火花、落叶、云、雾、雪、 尘、流星尾迹或者象发光轨迹这样的抽象视觉效果等等。
粒子系统是一步一步通过很基本的操作构造的。
基本思想
粒子系统的实现思路:
- 每个粒子是一个带纹理的三角形/多边形,粒子系统由多个粒子组成;
- 粒子按一定规则运动;
- 每个粒子有自己的属性,如位置、速度、质量、尺寸、年龄、运动轨迹斜率、颜色等;
- 粒子系统更新循环划分为两个不同的阶段:参数更新/模拟阶段以及渲染阶段。
- 参数更新/模拟阶段根据粒子系统信息更新每个粒子的速度、位置、尺寸、颜 色等信息;
- 渲染阶段根据粒子属性重新绘制粒子;
- 每个粒子都有自己的生命,年龄超过最大年龄的粒子会被销毁,系统会生成 新的粒子。
粒子系统可以说是一种基于物理模型来解决问题的方法,Imagic认为它的核心不 是在于如何显示,而是在于对微小物质模型的规则提取。比如在水波算法中, 能够总结出
X0'=(X1+X2+X3+X4)/2-X0
这个公式,才是整个算法的精华所在。只有基于物理模型的方法,才能模拟出随机而逼真的自然景象。
粒子的典型属性
每个粒子需要一些属性来和其他粒子区别。通常在一个系统中的所有粒子有一个 相同的属性集。
- 位置(Position):粒子在哪里。
处理运动粒子的每个粒子系统都需要知道每个粒子的位置。
- 速度(Velocity):包括速率(speed)和方向(direction)
位置的改变依赖于速度。速度是一个矢量表明系统由多快和粒子的运动方向。每一时间间隔,速度用于改变粒子位置。
- 加速度(Acceleration):
和速度作用于位置一样,加速度作用于速度。粒子的加速度通常适用于外力作用。外力经常是重力,或者是粒子间的引力或斥力。
- 生命值(Life):
每个粒子都有着自己的生命值,随着时间的推移,粒子的生命值不断减小,直到粒子死亡(生命值为0)。一个生命周期结束时,另一个生命周期随即开始,有时为了使粒子能够源源不断地涌出,必须使一部分粒子在初始后立即死亡。
- 衰减(Decay):
就象人会衰老一样,每个粒子也有它自己的生命周期,Decay就是用来控制粒子生命周期的一个物理量。
粒子系统的实现
通常粒子系统的位置与运动是由发射器控制的。发射器主要由一组粒子行为参数 以及自在二维/三维空间中的位置所表示。
典型的粒子系统更新循环可以划分为两个不同的阶段:参数更新/模拟阶段以及 渲染阶段。每个循环执行每一帧动画。
模拟阶段
在模拟阶段,根据生成速度以及更新间隔计算新粒子的数目,每个粒子根据发射 器的位置及给定的生成区域在特定的二维/三维空间位置生成,并且根据发射器 的参数初始化每个粒子的速度、颜色、生命周期等等参数。然后检查每个粒子是 否已经超出了生命周期,一旦超出就将这些粒子剔出模拟过程,否则就根据物理 模拟更改粒子的位置与特性,这些物理模拟可能象将速度加到当前位置或者调整 速度抵消摩擦这样简单,也可能象将外力考虑进取计算正确的物理抛射轨迹那样 复杂。另外,经常需要检查与特殊三维物体的碰撞以使粒子从障碍物弹回。由于 粒子之间的碰撞计算量很大并且对于大多数模拟来说没有必要,所以很少使用粒 子之间的碰撞。
渲染阶段
在更新完成之后,通常每个例子用经过纹理映射的四边形sprite进行渲染,也就 是说四边形总是面向观察者。但是,这个过程不是必须的,在一些低分辨率或者 处理能力有限的场合粒子可能仅仅渲染成一个像素,在离线渲染中甚至渲染成一 个元球,从粒子元球计算出的等值面可以得到相当好的液体表面。
性能问题
高级粒子系统可能会需要大量的代码,所以设计好数据结构是非常重要的。此外 必须牢记如果设计欠佳,粒子系统会大幅降低刷新率,并且大多数的性能问题是 由粒子系统带来的内存管理问题引起的。
设计粒子系统时首先应该明白粒子系统大大增加每帧的可见多边形数量。每个粒 子可能需要四个顶点和两个三角形。以此计算,一个场景中的2,000个可见的雪 花粒子将增加4,000个可见的三角形。又因为大多数粒子是运动的,我们不能预 先计算顶点缓冲,所以每一帧,定点缓冲都需要被改变。
技巧在于只执行尽量少的内存操作(分配和释放)。这样,如果一个粒子在一定时 间后消亡,不要急着从内存中释放。相反,用一个标志来记录它是死亡还是重生 (重新初始化)。然后当所有的粒子都被标为死亡时,释放整个粒子系统。(包括 系统中的所有粒子),如果系统是定常的,那么使系统保持存活。如果你想要重 建系统或只想假入一个新的粒子,你应该根据粒子所属的系统使用相应的默认设 置/属性来自动初始化粒子。
粒子系统工具
在许多三维建模及渲染包内部就可以创建、修改粒子系统,如 3D Studio Max、 Maya 以及 Blender 等。这些编辑程序使艺术家能够立即看到他们设定的特性或 者规则下粒子系统的表现,另外还有一些插件能够提供增强的粒子系统效果,例 如 AfterBurn 以及用于流体的 RealFlow。而2D的粒子特效软件中 particleIllusion最为出色,因為他的渲染比一般的3D软件快较为平面化。 Combustion 这样的多用途软件或者只能用于粒子系统的 Particle Studio 等都 可以用来生成电影或者视频中的粒子系统。
JGE 游戏引擎粒子系统实现分析
JGE 游戏引擎提供了一个粒子系统,它的粒子的系统基本是从 HGE 游戏引擎搬 过来的。参考资料3对该粒子系统的实现做了深入剖析。