基于OSG粒子系统的飞行器发射特效的技术实现*

2015-12-17 03:59杨永国
舰船电子工程 2015年3期
关键词:尾迹烟雾飞行器

杨永国

(91550部队指控中心 大连 116023)



基于OSG粒子系统的飞行器发射特效的技术实现*

杨永国

(91550部队指控中心 大连 116023)

实时三维虚拟场景中,较好的特效如火焰、烟雾等能够增加场景的真实感和沉浸感。论文首先简要介绍了粒子系统的基本原理,分析了飞行器的发射环境及烟雾的形态特征,通过设置三个不同的粒子系统实例实现了基于OSG的飞行器发射过程特效的模拟,达到了较好的视觉效果。

OSG; 粒子系统; 飞行器; 特效; 烟雾; 粒子操作器

Class Number V27

1 引言

飞行器发射时,发动机尾喷口会出现尾焰,同时产生大量的烟雾,随着飞行器的运动,这些烟雾在空气中扩散形成明显的飞行器航迹。在模拟飞行器的发射过程时,进行航迹再现使指挥员对飞行器的运动过程有直观的认识,也有助于提高仿真软件的真实感和沉浸感[1]。因为飞行器发射环境的不同,使用粒子系统生成的火焰、烟雾等特效的形态、颜色、所受作用力等因素会有很大的差别。文献[2]将火箭发射烟雾形体简化为两部分,一是火箭喷出的尾焰部分,二是气流冲击地面形成的烟尘部分,简化了模拟过程,提高效率,对本文有很大的借鉴作用。

OpenSceneGraph(OSG)使用OpenGL技术开发,是一套基于C++平台的应用程序接口,它让程序员能够更加快速、便捷地创建高性能、跨平台的交互式图形程序。它所具有的强大功能使其在虚拟现实、军事仿真、三维动画等方面得到了越来越广泛的应用[3]。本文利用OSG的强大渲染功能和粒子系统方法,实现了对飞行器发射特效的实时渲染。

2 粒子系统原理

随着计算机技术的发展,研究人员发现多边形建模方法在模拟自然景观时存在很大的局限性。因此1983年Reevs W.T.提出了使用粒子系统的方法用于模糊景物的模拟,如烟、云、火光等自然景物[4~5]。粒子系统是一种基于物理的建模方法,这是一种让图形对象遵守物理规律的建模方法。有两种相关的方法建立这种模型。一种方法是模拟底层处理过程的物理规律,并利用这种物理规律来控制图形对象的行为[6]。虽然这种方法可以使用物理学、热力学等方面的专业知识进行精确求解,但复杂度太高不能应用到实时渲染中。另一种方法是把基本的物理原理和数学约束条件结合起来控制对象的行为。OSG的粒子系统就是采用的后一种方法来对粒子进行建模。

粒子系统不同于其他的静态模型,它由很多的粒子组成,每个粒子都有一个由出生到灭亡的过程,因此才能够模拟烟雾、水流等具有不规则形态和变化的图形对象。粒子的属性主要包括位置、速度、加速度、衰减、质量、颜色、纹理、大小和生命周期等[7~8]。尾迹和烟雾特效的每个粒子由发射器产生时,都会有一个初始位置即发射器的位置,随着时间的变化,粒子的位置可以通过加速度求得。每个粒子可以随机产生初始速度,由于受空气阻力或重力等的影响粒子速度不断变化。在自然环境仿真系统中,粒子离开发射器后它的加速度为重力加速度。粒子的质量大小需要根据空气的物理特性进行设置。粒子的颜色、大小和纹理属于粒子的外观,通过设置纹理可以增强尾迹和烟雾的真实感。

3 飞行器发射特效的形态分析

飞行器发射后形成的航迹和烟雾具有不规则的几何外形和内在的不确定性,因此应根据飞行器发射环境的实际情况对烟雾的形态和受力情况进行具体分析,从中找到尾迹和烟雾的运动规律,建立烟雾的粒子模型,为粒子系统建模提供数据支持。

3.1 发射平台影响

飞行器的发射方式决定了仿真系统中飞行器尾迹特别是烟雾特效的表现形式。目前飞行器发射形式主要包括以下几种: 1) 利用地下井进行发射的地下发射; 2) 利用各种舰载发射系统实施发射的水面发射; 3) 利用潜艇发射系统实施飞行器发射的水下发射; 4) 各种机载发射系统在空中实施飞行器发射。飞行器发射姿态包括水平发射、倾斜发射和垂直发射。不同的发射平台和发射姿态产生的烟雾千差万别,我们取其共性发现烟雾的形态主要有三种: 1) 地面、地下或海面垂直发射; 2) 车载、发射架或水下的倾斜发射; 3) 空中机载发射。本文主要实现第一种状态水下发射条件下产生的烟雾特效,其他两种效果可在第一种的前提下进行实现,这里不再详细介绍。

3.2 烟雾的特性分析

模拟烟雾的行为,其基础是研究与烟雾行为相关的因素[2]。烟雾有三种基本属性:烟雾的运动速度、温度和风的作用[5]。烟雾的运动速度由粒子发射器设置,为了模拟烟雾的湍流效果,将粒子的发射速度限制在一定的范围内。为了体现温度对烟雾的影响,可以设置粒子系统的阻尼系数,阻尼是指阻碍物体的相对运动、并把运动能量转化为热能或其他可以耗散能量的一种作用。影响烟雾的第三个因素是风的作用,OSG粒子系统中对风设置比较简单,但需要考虑风力的大小和方向,想要实现较好的效果就需要通过不断实践获得。

通过以上分析本文将飞行器发射过程需要模拟的特效分解为三个部分: 1) 飞行器发动机喷射的火焰,由于产生火焰的动力较高,环境对它的影响可以忽略不计。 2) 尾焰与空气摩擦形成的飞行器航迹,形成尾迹的烟雾有其自身的特点,随着飞行器的位置不断变化,主要受空气浮力、重力和风力风向的作用不断向外扩散。 3) 垂直或倾斜发射初始时火焰喷向地面或水面,使大量的烟雾及粉尘反卷上扬形成一圈不规则形态的烟团,主要受重力、浮力和风力的影响。

4 用OSG粒子系统实现特效

OSG中关于粒子系统的操作都在osgParticale命名空间中,其中大部分的粒子系统模拟都采用的是Billboard技术与色彩融合技术生成粒子。OSG的粒子系统强大易用,有两种使用方式,一种是OSG预定义的特效类,如火焰、烟雾、雨雪等。另外一种就是自定义特效类,只要清楚OSG粒子系统的基本原理和创建步骤,可以很轻易地创建符合特定要求的粒子系统[9]。在构建比较复杂的粒子特效时通常采用第二种方式,自定义粒子系统通过定义osgParticle::Program类实现对粒子的操作,即对粒子的运动进行控制,能够高效地模拟空气、水流等自然现象,生成非常真实的效果[10]。图1为OSG粒子系统协同工作流程图。

图1 OSG粒子系统协同工作流程图

4.1 通过自定义粒子系统模拟飞行器尾焰特效

1) 使用osg::Particle命名空间中的Particle类建立粒子模板,模板的作用是在粒子系统产生新粒子时为其设置基本属性,包括粒子的生命周期、尺寸,透明度、颜色、粒子半径和质量等属性,其中粒子生命周期的大小决定了粒子从产生后到消亡的时间,从尾焰特效上显现出来的效果是火焰变长或变短。尺寸、Alpha和颜色属性设置了粒子的图形形态。粒子半径和质量设置了粒子的物理属性,以此来计算粒子的速度等物理量。

表1 粒子模板参数设置

2) 使用osgParticle::ParticleSystem粒子系统类生成粒子系统的实例,通过ParticleSystem成员函数setDefaultAttributes设置粒子的纹理smoke.rgb、不使用放射性粒子、不使用灯光和纹理单元参数使用默认。将1)中设置好的粒子模板作为参数添加到粒子系统中,以初始化粒子参数。

3) 使用osgParticle::ModularEmitter定义一个模块发射器,用于控制粒子的创建。模块发射器的属性由发射的随机数目范围、发射形状与发射时的速度取向三个要素组成,即使不设置这三个要素的值,OSG会创建一个缺省的发射器[5]。为了保证飞行器尾焰效果采用恒定速率的方式发射粒子数目。Placer类控制发射器的发射形状,如点形、圆形、环形等。本例中Placer使用圆形,粒子将在圆形的范围内以一定的角度产生。发射时的速度取向通过类osgParticle::RadialShooter进行设置,在只需要重力环境的情况下可将发射速度设置为零,不设置发射角度。

表2 模块发射器参数设置

4) 使用osgParticle::ModularProgram建立模块化程序实例,用于为粒子系统添加自定义操作。建立AccelOperator操作器模拟重力加速度,根据实际效果设置尾焰受两倍重力的作用。

设置好粒子系统的各项参数后,将粒子系统添加到粒子更新器中,将之绑定到飞行器模型后加入到场景根节点进行渲染。

图2 自定义粒子系统生成的尾焰效果

4.2 使用osgParticle预定义smoke类生成航迹特效

OSG粒子系统针对现实中经常用到的粒子效果,如火光(FireEffect)、烟雾(SmokeEffect)、爆炸(ExplosionEffect)及爆炸碎片(ExplosionDebrisEffect)等进行了封装,直接将这些类创建实例加入到场景中就有不错的效果。本例中使用的飞行器尾迹特效就是在类SmokeEffect的基础上,根据上述烟雾模型的特性对其进行参数设置,达到了较好的模拟效果。

图3 SmokeEffect类生成尾迹效果

4.3 自定义UserSmoke类生成烟雾特效

定义继承自SmokeEffect类的UserSmoke类,它能够继承烟雾模型相关的参数,可以提高程序的研制效率,根据之前对烟雾的分析设置参数,调整烟雾的基本属性以达到满意的效果。自定义继承自osg::Operator类的粒子操作器smokeOperator用于实现对粒子的操作,控制粒子系统的每一粒子实时绘制,模拟烟雾上下翻腾的效果。实现粒子操作是通过重写operate函数实现的,Operate函数包含particle对象实例p参数,p表示任一粒子,通过对p进行操作,可以控制场景中的每一个粒子[10]。这里主要是对粒子的方向、产生速度进行控制。首先在合适的位置建立UserSmoke类实例userSomke,通过getParticleSystem获得粒子系统,使用osgParticle::ModularProgram类建立空气动力程序类指针program,生成的自定义操作器smokeOperator类实例通过addOperator函数将其加入到program实例中,这样UserSmoke类产生的每一个粒子都要经过smokeOperator类的处理。生成烟雾效果如图4所示。

图4 自定义UserSmoke类生成烟雾效果

5 结语

本文所述系统环境的硬件平台为Intel Core i7-2600 CPU 3.40 GHZ,GT Force430 GPU,内存3G,所使用操作系统win7旗舰版,开发环境为VS2010,OSG版本为3.01,此环境下的实时渲染帧率可以达到57~59帧/秒,可以满足大多数仿真软件的要求。本文通过OSG粒子系统的预定义特效和自定义特效两种方法相结合的方式实现了飞行器发射过程的特效模拟,达到了很好的预期效果,具有一定的参考价值和实际运用意义。

[1] 刘耀周,张锡恩.基于粒子系统的飞行器飞行航迹及烟雾的特效生成[J].计算机工程,2004,(1):174-176.

[2] 张海山,吴家铸.基于粒子系统的火箭发射烟雾特效实现[J].微计算机信息,2008,12-3:248-249.

[3] Paul Martz.王锐,钱学雷译.OpenSceneGraph快速入门指导[M].1-10.

[4] Reeves W T. Particle System- A technique for modeling a class of fuzzy objects[J]. Computer Graphics,1983,17(30):359-371.

[5] 范乃梅,马军霞.基于粒子系统的烟雾和爆炸模拟[J].郑州轻工业学院学报,2009,24(5):77-80.

[6] Edward Angel, Dave Shreiner.张荣华,宋雨,刘书刚译.交互式计算机图形学—基于OpenGL着色器的自顶向下方法[M].北京:电子工业出版社,2012:328-329.

[7] 徐利明,姜昱明.基于粒子系统与OpenGL的实时雨雪模拟[J].计算机仿真,2005,22(7):242-245.

[8] 尹勇,金一丞,任鸿翔,等.自然现象的实时仿真[J].系统仿真学报,2002,14(9):1217-1219.

[9] 杨化斌,于振华,林中.OpenSceneGraph3.0三维视景仿真技术开发详解[M].北京:国防工业出版社,2012:244-253.

[10] 李露,陈定方.基于OSG的粒子系统特效控制的研究[J].湖北工业大学学报,2009,24(4):51-53.

Realization of Special Effect Technology of Aircraft Launching Based on OSG

YANG Yongguo

(Control Center, No. 91550 Troops of PLA, Dalian 116023)

The sense of reality and immersion is increased by better special effects, including fire, smoke, etc in real-time simulant scenes. This article gives a brief on principle of particle system, analyzes characteristics of surroundings of aircraft launching and the smoke, realizes some special effects by building three different osgParticle instances based on OSG in order to reach preferable visual effects.

OSG, particle system, aircraft, special effects, smoke, particle operator

2014年9月15日,

2014年11月10日

杨永国,男,高级工程师,研究方向:地理信息系统,虚拟现实。

V27

10.3969/j.issn1672-9730.2015.03.014

猜你喜欢
尾迹烟雾飞行器
基于本征正交分解的水平轴风力机非定常尾迹特性分析
一种基于Radon 变换和尾迹模型的尾迹检测算法
高超声速飞行器
薄如蝉翼轻若烟雾
影视剧“烟雾缭绕”就该取消评优
复杂飞行器的容错控制
咸阳锁紧烟雾与尘土
基于EEMD-Hilbert谱的涡街流量计尾迹振荡特性
神秘的飞行器
会下沉的烟雾