摘 要:在粒子系统方法的基础上,提出了基于纹理球的快速导弹烟雾模拟方法。讨论了算法的数据结构、各参数设置及其对模拟效果的影响,其中关键参数主要包括纹理球的数量、大小、位置、偏移量、旋转和纹理贴图等。给出了具体的模拟步骤和实际的模拟效果,模拟的速度、效果等比较理想。
关键词:粒子系统; 导弹烟雾; 纹理球; 喷射现象
导弹发射时的烟雾特效是军事模拟和航天领域仿真技术中特殊效果的一个重要组成部分。近些年来,导弹、火箭和烟雾的计算机模拟方法很多,如基于粒子系统的模拟方法,虽然基于纯粹的粒子系统的方法已经不是主流方法,但是对该方法加以改进和运用的尝试一直都没有停止[1-2]。从视觉效果的角度出发,可以对大量的粒子加以纹理化,从而节省大量的系统资源,应运而生的是纹理贴图的模拟方法[3-6]。该方法的基本思路是,运用纹理映射的方法代替一定数量的粒子,从而达到一定的模拟效果。纹理方法在很大程度上都要进行视觉合成和变换,在实际应用的过程中需要附加额外的计算。
本文主要对传统的粒子系统方法中的参数设置进行了一定的改进,使其随机性得到了相应的降低,便于人们进行合理的控制。本文以模拟的实际效果为主要目标,结合快捷的纹理方法,直接采用纹理球进行导弹烟雾的模拟,并且在导弹的运动变化过程中进行形态和外观上的数学控制,取得了较好的视觉效果,基本能够达到实时模拟的要求。
1 基于纹理球的快速导弹烟雾模拟
1.1 烟雾外形
导弹烟雾的外形极其不规则,为了简化模拟过程、提高效率以及保持逼真的效果,本文简化了导弹烟雾的模型,并根据其形体和变化因素,将其分为导弹喷出的尾焰和气火焰产生的烟雾两部分。
导弹在发射时,发动机尾喷口会出现尾焰,扩散到一定程度后产生大量的烟雾,随着导弹的运动,这些火焰和烟雾在空气中形成航迹。可以认为航迹是由从导弹尾喷口连续不断喷出的一团团火焰球和烟雾球组成的,这样就可以将粒子发射源附着在导弹尾部,在导弹发射阶段连续不停地发射粒子团,每个粒子团在自己的存活期内按照一定的规律扩散以至消失。只要粒子的生命足够长,就能保证导弹消失在视野外之前保持整条航迹的形态。用带纹理的小球代替粒子,则可以大大提高系统速度,只需控制好纹理球的效果属性及变化即可。
1.2 烟雾的数据结构
基于纹理球的导弹烟雾模拟主要借助于传统粒子系统的基本原理,用具有一定大小的纹理球来代替传统粒子系统中的大量粒子。从视觉效果的角度看,任意一个纹理球都可以代替数目众多的粒子,因而节省了大量的存储空间。单个纹理球的数据结构如下:
Struct Texture{
float x,y,z //纹理球的中心坐标值
float r //纹理球的半径
float life //纹理球的生命期
float a //纹理球的透明度
float rp //纹理球与喷口的相对距离
float rl //纹理球与轴心的偏移量
*char pic //纹理球的纹理贴图
float roa //纹理球的旋转
........}TextureP
在实际模拟的过程中,系统不断产生纹理球并时刻变化其属性值,直到消亡为止。
1.3 粒子的数量和位置
要在给定导弹航迹区产生动态的火焰烟雾效果(本文中的导弹烟雾实际包含火焰和烟雾效果),粒子的初始数量很重要,它直接影响着模拟的整体效果。数目过小,整体效果就会出现“间隙”;数目过大,计算和控制的时间就长,影响实时性效果。粒子源的初始位置是由导弹口位置所决定的,绑定在导弹口的坐标处并随着导弹的运动而实时地改变位置。粒子球与粒子源之间保持相对位置的变化,以便于系统进行计算。
1.4 粒子生命期和透明度
系统中的所有纹理球都时刻处于运动变化之中,纹理球在粒子源产生以后,赋予它最大的生命,每经过一帧运算,其生命随之减少一定的数值,直到为零,该纹理球从显示列表中被清除。这个生命期的值和纹理球的运动速率共同决定了场景中烟雾的整体存在,即烟雾扩展范围的大小。从视觉效果上看,许多纹理球是叠加在一起的,单一的纹理球不能完整地描述烟雾的特征,因而将其设置为透明。纹理球纹理的叠加可以表现出烟雾细节和整体视觉效果。
当然,纹理球也需要有规律地变化。模拟初期,纹理球比较少,适合运用比较小的透明度;随着纹理球的不断增加,其叠加效应越加明显,因此应该采用比较大的透明度。 通过调控可以使中心轴附近的纹理球稍微多一些,以表现比较浓的烟雾效果;偏离中心轴较远的地方纹理球稍微少一些,以表现比较稀疏的烟雾效果。
在导弹烟雾的喷射过程中,由于所处航迹中的位置不同,粒子燃烧的时间也就不同。距离燃烧轴(参考轴)中心处越近,粒子温度较高,其生命期较长;而在距离较远的地方,温度比较低,其发光时间就短。引入的中心参考线近似于导弹烟雾的中心线,如图1所示。
1.5 纹理图片的选用
本文选用的纹理图片,分为4大类,应用于烟雾的火焰中心区、火焰扩展区、烟雾中心区和烟雾边远区4个区域,别有4、6、6、10张纹理图片。划分的依据为:在火焰的中心区域(该区域比较小),距离导弹口比较近,火焰温度比较高,形态变化不明显;在火焰的扩散区(主要指距离喷口略远与火焰边缘的区域),燃烧开始具有变化的细节;在烟雾中心区(火焰区域的后面,与火焰区域有10%的重叠),烟雾浓度大,区别不明显,但有一定的细节,主要靠纹理图片本身来表现;在烟雾边远区(烟雾的后半部分和边缘区域),烟雾的细节非常丰富。各区域的界定和划分主要依据实际的视觉效果,并没有严格地区分,相互之间有一定的重叠。本文采用的部分纹理图片如图2所示。
各种类型的图片具有一定的相似性,也有必要的互补性,边缘区的纹理图片主要取自实际烟雾的边缘和涡流区域,全部图片放在不同的序列之中(便于分类调节)。纹理图片显然是整个模拟过程和最终显示效果的一个重要因素之一。为了使表现力更加丰富,必要时也可以根据具体要求对图片库进行扩充与修改。
1.6 纹理球的旋转
现实中的烟雾效果细节丰富、不断变换,然而仔细分析导弹发射这个特殊现象发现,由于喷射的火焰和烟雾速度极高、范围相对比较集中,其细节在模拟表现时就显得不是那么突出了,但是纹理球在场景中的旋转也是不可或缺的,这样可以增加算法的通用性。本算法中的纹理球按照设计要求进行旋转,所表现出的形态更加丰富多彩,并能起到意想不到的理想效果。通过对TextureP->roa进行随机赋值,即可方便地加以实现(为了方便从不同的角度观察烟雾,本文采用3个轴向上的旋转),其控制过程需要实时地进行。
1.7 系统的变化
整个系统经历了粒子从喷口处产生、燃烧、变成烟雾、扩散直到消失的过程,其间要受到风力、重力、导弹运行等作用的影响,其状态随着时间的推移而不断改变。本文对导弹的运动采用直线或曲线轨迹的方法,粒子系统与喷口、中心线距离则采用相对距离的方法来模拟其变化效果。中心参考线在运动变化中起到了制约的作用,可以实时地改变中心参考线的形状,配合各控制参数的共同作用,以改变整个模拟系统的形状。
导弹喷射速度比较快,冲击力比较大,因此风力在系统中的影响可以暂且忽略不计,但在模拟其他烟雾效果时就必须重点考虑。
2 具体实现步骤和模拟结果
建立粒子系统及其运动控制模型以后,虽然可以模拟导弹烟雾运动规律,但是在视觉效果方面需要做很多的工作,同时需要解决仿真中显示速度的问题。具体的程序实现步骤如下。
(1)确定喷口位置及其变化路径上各点坐标(通常情况下取空间的一条直线或曲线);
(2)设置一定的生成机制,在粒子产生和消亡时能够及时更新粒子数目;
(3)模拟场景的每一帧;
(4)初始化粒子的各项控制参数;
(5)计算粒子与喷口的距离,以确定粒子此时处于火焰区还是烟雾区;
(6)计算粒子与中心线的偏移量,以确定粒子此时处于中心位置还是偏远位置,以便加载不同的纹理图片;
(7)根据步骤(5)和步骤(6)的结果并结合粒子的生命期调整各个控制参数;
(8)根据调整的结果绘制粒子并处理显示等视觉要素;
(9)删除消亡的粒子和超出绘制区域的粒子。
影响导弹烟雾外形的几个关键参数有life,a、pic、rp、pl等,控制好这些参数,模拟的整体形态也就得到了很好的控制。
3 烟雾模拟效果与比较
图3是本算法的主要效果。其中,图3(a)是模拟的初步效果,模拟的连续性比较好,火焰和烟雾的核心地带没有明显的“间隙”;图3(b)是添加运动模糊以后的效果;图3(c)是导弹沿着曲线运动的结果;图3(d)是导弹喷口附近的细节效果。由模拟的效果可以看到,通过对纹理球各要素的调整,模拟的效果比较真实自然。
粒子系统的模拟方法优点是计算简单,运动变化及其控制模式不复杂并且灵活性比较强;缺点主要体现在大量粒子比较消耗系统资源,并且后期的真实效果需要进行大量的渲染。数学物理的方法可以实现较为真实的模拟效果,但计算相对比较复杂,模拟速度的提升空间较小、应用范围比较有限。基于纹理表现的方法用纹理片或纹理球代替大量的粒子,因而比较节省系统资源,其时间复杂度主要体现在整个系统的运动控制和模拟效果的变换与真实性的合成上。纹理片的方法需要在真实的场景变换中不断调整其视觉角度,因而会出现一些扭曲和变形。纹理球的方法需要进行空间三维的分布与计算,但是可以表现立体的模拟效果,而无需进行实时的视角转换。
本文利用粒子系统和纹理球的方法模拟了导弹发射的烟雾效果,描述了纹理球的关键属性设置以及对于模拟效果的实际影响,在资源消耗、计算复杂程度、模拟效果和速度方面都具有一定的优势。所生成的烟雾特效不但形态、色彩比较真实,而且是三维立体的,这就使得用户得以在导弹发射过程中从各个角度对其进行观察。本算法允许用户根据实际情况通过调整某些参数,方便地对导弹烟雾的形态和色彩进行控制以适应具体需要。
将该方法灵活运用于模拟类似的喷发气体现象(如喷汽、喷泉、喷雾、喷火等),是今后可以探索的方向。
参考文献
[1] 张海山,吴家铸.基于粒子系统的火箭发射烟雾特效实现[J].微计算机信息(管控一体化),2008,24(12-3):248-249.
[2] 许春磊.基于粒子系统的尾焰实时模拟[J]. 临沂师范学 院学报,2010,32(3):129-133.
[3] 刘耀周,张锡恩.基于粒子系统的导弹飞行航迹及烟雾的特效生成[J].计算机工程,2004,30(1):174-176.
[4] 王继州,顾耀林.火焰的快速模拟[J].计算机辅助设计与图形学学报,2007,19(1):102-107.
[5] 袁雪霞,尹新富. 烟雾的快速模拟[J]. 计算机工程与设计,2008,29(9):2392-2393,2396.
[6] 许国玉,张梦,沈志峰.曲线运动导弹的尾焰模拟研究[J].工程图学学报,2008,29(6):57-61.