基于粒子系统的实时模糊场景实现

2011-05-08 02:09顾大晔
电子科技 2011年8期
关键词:粒子系统坦克像素

顾大晔

(西安电子科技大学电子工程学院,陕西西安 710071)

从 Reeves在 1983年首先提出粒子系统的概念到现在,基于粒子系统的图形生成算法,在计算机图形学的发展中做出了较大贡献[1]。尤其在不规则模糊景物生成方面,粒子系统的最大优点就是,采用单个粒子形式的基本图像实体的大量组合来描述不规则景物,由于可以对每个粒子进行有效控制,所以较易实现雨、雪、烟、雾等模糊的自然场景,而这些是传统计算机图形学难以构造的复杂形体,同时具有较强的真实感和实时性。

本文旨在完成DSP平台下的场景模拟,由于硬件的限制,无法完成较复杂的算法运算,以及使用时下很多流行的图像API获得更好的效果。本文选用了两个典型的不规则场景,飞机干扰弹和坦克干扰弹爆炸进行讨论,重点介绍一些既快又能较真实地实现场景的方法。本文在 PC机上,使用 Watcom C进行了C语言编程实现。

1 粒子系统简述

粒子系统是由大量粒子组成,每个粒子都是一个独立的图元实体。它具有一定的属性,这些属性一般有速度、位置、加速度、灰度、存活时间等,对于不同的系统,粒子还有其自己相应的属性[2]。

粒子系统中每一个粒子都要经历产生、发展、运动到消亡的过程。粒子系统使用大量粒子按一定规则运动模拟自然场景,它所要解决的问题基本上有:粒子怎样生成,即粒子初始化的问题;粒子如何变化,也就是粒子的运动问题;运动过程中的粒子如何退出,粒子的消亡问题。总结起来,粒子系统的内部运动可由下面的框图说明,如图 1所示。

图1 粒子系统结构框图

2 飞机红外干扰弹的生成

(1)观察场景。飞机通过发射红外干扰弹来干扰敌方导弹的导引头。它的作用原理不是本文讨论范围,主要观察红外干扰弹从发射开始的运动场景。在现实场景中,红外干扰弹从飞机上发射,刚开始是一个快速燃烧的燃烧体。燃烧体燃烧时候很亮,而且产生浓烟。此外,燃烧体从飞机上释放,具有一定向前的速度,而且受重力影响不断下落。同时,燃烧体和其尾部拖起的烟随着时间不断消失。

(2)建模详述。根据观察,可以用粒子系统建模。模拟干扰弹的运动要使用大量粒子。这些粒子可分为两类:一类是组成燃烧体的粒子;一类是组成尾烟的粒子。这两类粒子并不是不同的粒子,而是粒子运动过程中的两个部分。当粒子刚生成时,其产生于干扰弹的头部,是组成燃烧体的粒子。组成燃烧体粒子的最重要属性是像素值最大。这是模拟干扰弹头部亮度高的关键。为模拟燃烧过程,粒子的像素从生成后逐渐降低。粒子群具有一定的初速度,同时又由于重力的影响,粒子群又具有向下的加速度。

(3)根据步骤(2)中的详述,可以进行粒子的运动建模:

首先可得粒子运动的方程为

(4)粒子系统建模。运动方程建立后,可以确定粒子系统的初始化,粒子初始化所要求的属性。此干扰弹的形成可用一个粒子系统来建模。粒子的结构体可定义如下:

(5)贴图处理。在此之前定义的粒子系统中每个粒子只是确定了那个粒子当前位置的像素以及速度的变化,如果仅把这样的粒子绘制出来,得到的只是一些离散像素点的运动,没有任何真实感和模糊感。因此采用贴图的方法来解决这个问题。采用简单的贴图方法:取贴图大小为 4×4,设粒子位置为(x,y),则以粒子为中心给出 4×4区域大小的像素值。计算方法为

其中,P(i)为粒子像素值;Ptex为贴图中像素值;(x0,y0)为粒子位置。算出阈值为 255。

(6)代码实现。飞机干扰弹场景计算实现由以下几个函数实现:void Particle SysInit(PARTICLESYS * particlesys)进行粒子系统的初始化;void SysMotion-Update(PARTICLESYS * particlesys,short timedelta)完成粒子系统的运动更新;void Particle Sys Update(PARTICLESYS* particlesys,short timedelta)完成粒子系统属性的更新,主要是活动粒子数的更新;char Particle Update(PARTICLES*particle,short timedelta)完成粒子属性的更新。

3 坦克干扰弹的生成

(1)观察场景。坦克干扰弹不同于飞机干扰弹。坦克干扰弹发射后通过在坦克前方爆炸形成雾墙来干扰敌方。观察其爆炸过程可以分成 3个阶段。第一个阶段是燃烧占主导地位,此时的干扰弹快速燃烧,形成很亮很小的圆形区域;第二阶段是爆炸为主导,此时的干扰弹内部膨胀,快速向四周扩散,形成很大的烟雾区域;第三阶段主要是爆炸动作完成,烟雾慢慢消散的阶段。前两个阶段都为快速突变实现阶段,后一个为慢速渐变阶段。

(2)建模详述。要用粒子系统模拟(1)中观察到的场景,需要大量的粒子。在第一阶段,产生的粒子一开始要具有最大的像素值,但像素衰减很快,具有一定大小向任意方向的加速度,模拟干扰弹的快速燃烧,形成小的亮斑。组成第二阶段的粒子由于要模拟干扰弹从小到大的快速膨胀,所以此时的粒子一产生就要具有很大的向任意方向加速度,并且在较短的时间内降低为 0。由于形成的雾墙消散慢,因此,这个阶段的粒子的像素衰减慢。第三阶段,在此过程中的粒子只要具有较小的运动速度,一定的像素衰减,而没有加速运动。

(3)运动建模。根据步骤(1)的观察和步骤(2)中的分析,将坦克干扰弹的运动建模分为 3个阶段。

第一个阶段:亮斑形成和慢慢消散阶段。此阶段在此阶段中粒子运动方程为

ax(t),ay(t)先是在一定范围内生成一个随机值,经过短时间变为较小。vp(t)先是保持较小的值,然后变为一个较大的值,保证亮斑很快消失。

第二阶段:迅速爆炸和形成雾墙阶段。此阶段的粒子运动方程为

ax(t),ay(t)先是在一个大范围内生成的随机值,经过一定时间,爆炸完成后变为零。

第三阶段:爆炸完成,烟雾慢慢扩散的过程。此阶段的运动方程为

(4)粒子系统的建模。由于此爆炸分为 3个阶段,而且实现需要大量的粒子。如果使用一个粒子系统则无法很好地控制爆炸过程,而且会造成大量粒子贴图的重合,不仅不能很好地表达场景,而且使得运算量加大。为解决上述问题,采用多粒子系统的方案。具体实现如下,针对第一阶段,构建一个粒子系统,完成第一阶段后,由第一个粒子系统触发 N个粒子系统,而第一个系统死亡。触发方式是由第一个粒子系统中选用 N个向不同方向运动的粒子,根据这N个粒子的不同属性来生成具有不同初始值的 N个粒子系统。然后由这 N个粒子系统完成第二阶段。进入第三阶段,这 N个粒子系统开始衰减,直到死亡。粒子与粒子系统的结构体定义飞机干扰弹的基本相同,但加入了初始化标志和触发粒子系统的补偿速度。

(5)贴图处理。针对坦克干扰弹的分阶段爆炸,采用分阶段贴图。在第一阶段,由于爆炸范围小,使用小贴图,在第二和第三阶段,使用的是大贴图。设贴图的大小为 m×n,具体贴图方式如下

其中:P(i)为粒子像素值;Ptex为贴图中像素值;(x0,y0)为粒子位置算出,阈值为 255;α为像素衰减因子。

(6)代码实现。坦克干扰弹的代码实现所需的函数与飞机干扰弹的函数基本相同,只是由于使用二级粒子系统,所以每个函数都是一对,针对不同的粒子系统完成不同的功能。

4 场景的实现效果

以下是在 PC机上,使用WATCOM C编译器编译生成的几帧图像。

5 结束语

从场景观察,运动建模、粒子建模等几方面介绍了粒子系统实现要求场景的步骤。这也是使用粒子系统模拟模糊、不规则场景的一般步骤。从图 4可以看出粒子系统很好地完成了干扰弹爆炸的模拟。但文中所要求平台是在嵌入式 DSP平台,而非实现上述图像帧的 PC平台。因此,在移植过程中,要考虑到算法的复杂度、粒子数、贴图大小等开销因素。

[1]高颖,金岩通,杨永强,等.虚拟视景系统中粒子系统的接口设计与实现[J].系统仿真学报,2006,18(2):384-386.

[2]EDWARD A.交互式计算机图形学——基于OpenGL的自顶向下的方法[M].5版.张荣华,译.北京:电子工业出版社,2009.

[3]彭群生,鲍虎军,金小刚.计算机真实感图形的算法基础[M].北京:科学出版社,1999.

[4]王兆红.基于云模型与粒子系统自然雨模拟[J].计算机应用与软件,2009,26(12):102-104.

[5]李松维,周晓光,王润杰,等.基于粒子系统烟雾的模拟[J].计算机仿真,2007,24(9):199-201,231.

猜你喜欢
粒子系统坦克像素
第一辆现代坦克的“前世今生”
像素前线之“幻影”2000
利用GPU加速的粒子系统全球流场可视化系统设计与实现
T-90 坦克
“像素”仙人掌
ÉVOLUTIONDIGAE Style de vie tactile
UE 4粒子系统与外部数据通信研究
超级坦克大乱斗
高像素不是全部
基于粒子系统的建模与仿真综述