基于OSG粒子系统的雪景模拟

2012-11-30 03:18许金生宋万忠
计算机工程与设计 2012年4期
关键词:粒子系统雪景风速

许金生,宋万忠

(1.四川大学 计算机学院,四川 成都610064;2.四川大学 视觉合成图形图像技术国防重点学科实验室,四川 成都610064)

0 引 言

在虚拟现实仿真中,自然景物是不可或缺的场景组成内容。雪是常见的自然景观,雪的模拟可以提高视景的真实感,所以无论从现实意义的角度,还是从计算机仿真的角度,在视景中创建和研究雪景模拟均有重要的意义。目前,粒子系统是模拟自然环境中运动物体非常有效的方法,Reeves于1983年首先提出粒子系统建模仿真的方法并被广泛应用。OpenSceneGraph图形系统[1]是一个基于工业标准OpenGL的软件接口,封装并提供了数量众多的提高程序运行时性能的算法[2]。雪景模拟方面,研究者们已经做了一定量的研究工作,文献 [3]中,对雪粒子的受力进行了分析与建模,但是对雪粒子的运动学描述进行了相应的简化,没有考虑到风力对雪粒子的影响,而只是使用了随机速度来简化影响[3];文献 [4]中,利用与距离相关的概率函数考虑粒子的密度,只需要少量的粒子就可以模拟大量降雪的场景,但是粒子的属性设置过于简单,没有设置粒子的重力、生命周期等属性[4]。

本文基于粒子系统原理和OSG图形库,在分析粒子系统的一般原理基础上,利用OSG图形接口,提出了一种实时模拟雪景的算法。该算法分析了所采用的粒子模型的受力情况与初始属性等,同时实时的改变每帧中风速的大小和方向,并与前一帧中的风速形成合力对雪粒子产生影响,更加符合真实情况。

1 粒子系统简介

1.1 粒子系统的基本原理

粒子系统的基本思想是使用大量的、具有状态和属性的微小粒子来描述不规则的物体,通过对每个粒子属性和状态的改变进行不规则物体运动变化的仿真模拟。

粒子系统是一个动态的而非静态的系统,其动态变化过程就是众多新粒子产生和旧粒子消亡的过程。系统中各个新生粒子在出生时都有各自的属性 (如形状、颜色、初速度等),并且这些属性在各个粒子的生命周期中不断的发生着变化[5-7]。粒子系统的动态运行过程分为以下几个步骤[8-9]:

(1)新的粒子出生并加入到系统中;

(2)新出生的粒子获得各自的初始属性;

(3)粒子的属性动态更新;

(4)根据粒子的实时属性进行绘制并形成图形;

(5)删除死亡的旧粒子并取消显示。

粒子系统的关键点是确定粒子的动态变化规律、粒子的初始属性 (如形状、颜色、初速度等)和粒子的绘制与删除等。粒子系统中的这些关键点主要由各个具体的应用场景来确定[10-11]。

1.2 基于OSG的粒子系统简介

OSG中建立粒子系统一般有两种方式:一是读取OSG预定义粒子系统,加载具体的粒子效果至场景;另一种是建立自定义粒子系统,创建特定效果至场景中。

OSG预定义的粒子效果都是从类osgParticle::ParticleEffect派生而来的。类中关系图如图1所示。

图1 OSG预定义粒子系统类

这些类可以独立的使用,直接加入到场景中就可以显示相应的效果。其中ExplosionDebrisEffect是爆炸物四溅的效果模拟;ExplosionEffect是爆炸的模拟;FireEffect是关于火光的模拟;Smoke(Trail)Effect是关于烟雾的模拟。此外,OSG中添加了一个osgParticle::osgPrecipitation新类,可以使用雨效、雾效和雪效等。

OSG自定义粒子系统的建立分为以下步骤:

(1)确定自定义粒子系统的整体意图;

(2)使用osgParticle::Particle类,通过确定单个粒子的具体属性来建立粒子模板;

(3)使用osgParticle::ParticleSystem类,通过确定粒子总体数量、属性等来建立粒子系统;

(4)设置发射器,使用osgParticle::Counter、osg-Particle::Placer、osgParticle::Shooter 和 osgParticle::Emitter等类设置粒子的发射属性,出生地的位置方向,发射器的初速度,粒子发射的数目等;

(5)设置操作,利用osgParticle::Operator等类进行旋转度,风力等因素的设置;

(6)加入结点,更新。

关系图如图2所示。

2 基于OSG粒子系统的雪景模拟

2.1 基于OSG预定义粒子系统的雪景模拟

使用OSG预定义的粒子系统来描述雪景时,使用osg-Particle::PrecipitationEffect类的void snow (float intensity)来设置雪景的密度大小;使用void setWind(const osg::Vec3&wind)接口来设置场景中风速的方向和大小,同时可以利用接口osg::Fog*getFog()来设置场景雾效,增加场景效果。

图2 OSG自定义粒子系统类

利用osgParticle::PrecipitationEffect类,还可以设置粒子的大小、颜色、粒子出生速度、最大粒子密度、粒子透明度、雨模拟、雾的颜色等等。可以在实际使用中,加载需要的效果至场景中,例如可以在场景中同时添加雪效和雾效,并设置雪效和雾效不同的颜色、密度等。

2.2 基于OSG自定义粒子系统的雪景模拟

2.2.1 自定义OSG粒子数学模型分析

OSG环境中,坐标轴与OpenGL中坐标轴不同。粒子系统中,新生粒子位于屏幕上方的圆型区域内,如图3所示。粒子出生时赋予每个粒子不同的随机初始参数。对于每个粒子而言,其实际意义是其每帧的位置和速度,如图4所示。

式中:f1——粒子受到的重力,f2——粒子受到的浮力,f3——粒子受到的风力,f4——不同粒子之间的相互作用力,f5——粒子下降过程中受到的空气摩擦力。粒子所受其合力fsum决定了雪粒子的运动轨迹[12-14]。

粒子的当前速度可以通过粒子在上一帧中的速度和粒子当前的加速度求得,可以用式 (2),(3)对粒子在当前的速度和位置表达

式中:v0——上一帧的速度,v1——当前速度,p0——上一帧的位置,p1为粒子的当前位置,dt——一帧的时间间隔。若v0的方向角为 (θ1,θ2,θ3),则式 (2), (3)可展开为标量形式

粒子的实时位置由时间间隔和粒子的实时速度决定,其标量式如下

将式 (4)代入即可求得粒子的位置变化[15]。

2.2.2 自定义OSG粒子的具体设置

使用自定义的粒子系统来描述雪景的时候,需要设置粒子的各种基本属性,如粒子模板、发射器、粒子更新器等,将设置好的属性加入到场景中,实现自定义效果。其中,粒子的各种基本属性设置如下:

生命周期:void setLifeTime(double t),设置粒子生命周期,以秒为单位,若t小于0,则粒子永不消失。

粒子尺寸:void setSizeRange (const rangef &r),设置粒子的最大最小尺寸,只对多边形形态适用。

粒子透明度:void setAlphaRange (const rangef&r),设置粒子生命周期中透明度的变化范围。

粒子半径:void setRadius(flota r),设置粒子半径大小。

粒子颜 色:void setColorRange (const rangev4&r),设置粒子生命周期中颜色变化范围。

粒子重量:void setMass(float m),设置粒子的重量,在雪景模拟中配合重力显示雪效的下降过程。

粒子属性:void setDefaultAttributes,设置粒子的纹理、光滑度、发光度等属性来显示自定义的粒子系统,在模拟系统中使用自定义的纹理来显示雪花。

发射器:设置粒子系统的发射器,包括粒子系统的osgParticle::Counter、osgParticle::Placer、osgParticle::Shooter等类。设置粒子每秒产生的数目、粒子出生点的位置、粒子出生的范围和角度、粒子出生的初速度以及出生的朝向等。在本模拟场景中,使用SectorPlacer环形发射源和0-2*osg::PI的角度来模拟初生雪粒子,具体的初速度、粒子数目等参数来模拟雪效。

影响操作设置:设置粒子的向下引力、气流作用等。在本模拟场景中,void setToGravity()使用默认的重力值为9.80665f来模拟地球重力,使用void setFluidToAir()来模拟空气条件。

本文中具体的接口选择和参数设置如表1所示。

2.3 自定义雪景模拟中风的模拟

实际的自然现象中,雨雪天气常常伴随着风的吹动。雪的下降过程不是固定的方向和速度,雪的下降经常左右摆动,由于雪的重量很轻,有时候甚至会出现向上摆动的情况。OSG预定义场景中只能使用接口void setWind(const osg::vec3&wind)设置风向,这样设置的风向是固定不变的。因此需要在自定义的场景中,设置不同的风向和风速对雪粒子的下降过程产生影响。

在模拟程序的主循环中,在每一帧场景viewer.frame()前对风速进行设置。使用getOperator()得到之前设置风速的operator,同时利用随机函数进行风速的随机产生,将新产生的风速和通过接口getWind()得到的前桢风速进行叠加,叠加的风速通过接口setWind()添加至影响操作设置的osgParticle::Program中,这样产生的风速是随机风速和前帧风速的合力作用结果,符合现实情况,可以模拟出雪粒子下降过程中风对雪粒子的影响。

表1 自定义粒子参数

其中风速的随机产生对雪粒子的下降影响很大,经过实验,本模拟系统中利用osg::Vec3((((float)rand()/(float)RAND_MAX)-0.5)*0.5,(((float)rand ()/(float)RAND_MAX)-0.5)*0.5,(((float)rand ()/(float)RAND_MAX)-0.5)*0.2)来产生模拟的风速达到较好的效果。

3 实验结果及其分析

本文在CPU为Intel(R)Pentium (R)4 3.00GHz,内存DDR 1GB,显卡Intel(R)82946GExpress Chipest Family的普通PC上进行仿真模拟。图5、6为预定义雪景和自定义雪景的场景效果图。

图5 预定义雪景 (intensity为0.005)

可以看出,预定义的雪景模拟中,雪花的各种属性设置比较固定,效果相对自定义的雪景模拟不太逼真,优点是代码简单,生成快速,适合对细节要求不高的环境使用。自定义粒子系统中,各种属性设置参数较多,代码复杂,但是效果逼真,情景真实,适合对细节要求严格的环境使用。

图6 自定义雪景 (粒子参数见表1)

OSG环境下,设置其他不同的参数同样会导致不同的场景效果。例如,void setMass(float m)和void setToGravity ()分别设置粒子的重力和系统的重力,配合使用才能实现合适的效果;void setNumberOfParticlePerSecondToCreate (double numPerSecond)和void setLifeTime(double t)分别设置场景中每秒产生的粒子数目和粒子的生存时间,配合设置可以决定场景中的粒子总数等。因此,可以利用OSG丰富的接口来定义不同的例子模型,满足不同的场景需求,结果证实了该方法可以得到比较理想的效果。

4 结束语

基于粒子系统原理和OSG粒子系统的雪景仿真模拟是利用OSG粒子系统来进行仿真模拟的一个缩影。本文使用OSG图形开发包进行模拟仿真,利用自定义粒子系统,根据粒子物理运动规律,实时模拟降雪的效果,并在三维场景中实时应用,达到逼真的自然效果。三维仿真模拟是一项涉及面很广的复杂工程,而且还有许多理论知识需要完善、许多技术难题需要解决,例如随机函数的选择,粒子系统属性参数设定和具体实际情况相符合与否,场景的灯光、LOD等细节特效处理等,这些问题还有待深入研究。下一步的工作将根据本文中自定义的OSG粒子系统为总体框架,通过粒子系统中输入参数的实时改变,开发出交互式的、实时的仿真粒子系统,使之具有实际的现实应用。

[1]Martz P.Open scene graph quick start guide [M/OL].New York:Skew Matrix Software LLC http://www.lulu.com/content/1164927,2007.

[2]YANG Shixing,CAO Mingliang.Step into open scene graph [EB/OL]. [2008-12-05].http://www.vrchina.net/bbs/viewthread.php?tid=2708.

[3]YU Chunxuan,WANG Lei.Real-time simulation of rain and snow based on driving simulator [J].Computer Engineering and Design,2011,32 (1):324-327 (in Chinese). [余春暄,王雷.基于汽车驾驶模拟器的实时雨雪效果模拟 [J].计算机工程与设计,2011,32 (1):324-327.]

[4]HE Huaiqing,XUE Juntao.A new approach for simulation of snow falling and accumulating for large-scale terrain [J].Journal of Image and Graphics,2007,12 (9):1676-1681 (in Chinese).[贺怀清,薛军涛.一种大场景环境下降雪和积雪仿真的新方法[J].中国图象图形学报,2007,12 (9):1676-1681.]

[5]CHEN Huajie,YU Xiaoqing.Real-time simulation of rain and snow effect based on particle system and LOD [J].Computer Simulation,2008,25 (4):491-494 (in Chinese). [陈华杰,余小清.基于粒子系统与LOD技术的实时雨雪效果模拟 [J].计算机仿真,2008,25 (4):491-494.]

[6]XIAO He,HE Minggeng,BAI Zhongjian.Fountain simulation based on particle system in OpenGL [J].Computer Simulation,2007,24 (12):201-204 (in Chinese). [肖何,何明耕,白忠建.OpenGL中基于粒子系统的喷泉模拟实现 [J].计算机仿真,2007,24 (12):201-204.]

[7]WANG Jiwen,HU Wenping,JIN Yufeng.8-word dynamic fireworks simulation based on particle system [J].Computer Simulation,2010,27 (10):211-214 (in Chinese).[汪继文,胡文平,金余峰.基于粒子系统的8字动态烟花仿真 [J].计算机仿真,2010,27 (10):211-214.]

[8]XU Liming,JIANG Yuming.Realtime simulation of rain and snow based on particle system and OpenGL [J].Computer Simulation,2005,22 (7):242-245 (in Chinese).[徐利明,姜昱明.基于粒子系统与OpenGL的实时雨雪模拟 [J].计算机仿真,2005,22 (7):242-245.]

[9]WANG Jiwen,LU Hejun.Water droplet splashing down simulation based on particle system [J].Science Technology and Engineering,2010,10 (6):1547-1550 (in Chinese).[汪继文,陆和军.基于粒子系统的水滴溅落模拟 [J].科学技术与工程,2010,10 (6):1547-1550.]

[10]YANG Shuhua,LIAO Shouyi,WQNG Shicheng,et al.Realtime simulation of rain and snow based on particle system and Vega software [J].Journal of Computer Applications,2008,28 (6):238-240 (in Chinese).[杨述华,廖守亿,王仕成,等.基于粒子系统和Vega的实时雨雪模拟 [J].计算机应用,2008,28 (6):238-240.]

[11]HE Liang,BA Lideng.Dynamic simulation of snowscape based on particle system [J].Journal of Northwest University(Natural Science Edition),2010,40 (4):603-606 (in Chinese).[何亮,巴力登.基于粒子系统的动态雪景模拟 [J].西北大学学报 (自然科学版),2010,40 (4):603-606.]

[12]CHEN Lei,CHEN Hexin,WANG Runjie,et al.Real time snow simulation in flight simulator [J].Journal of Jilin University of Technology (Natural Science Edition),2005,35(2):164-166 (in Chinese).[陈蕾,陈贺新,王润杰,等.在飞行模拟器中实现雪的实时模拟 [J].吉林大学学报 (工学版),2005,35 (2):164-166.]

[13]YANG Cun,MAO Xuan,ZHU Fuquan,et al.Dynamic simulation of chemistry experimental phenomenon based on particle system [J].Journal of Computer Applications,2010,30(1):150-152 (in Chinese).[杨春,毛轩,朱福全,等.基于粒子系统的化学实验现象动态模拟 [J].计算机应用,2010,30 (1):150-152.]

[14]LI Sujun,WU Lingda.Real-time simulation of rain based on particle system [J].Computer Engineering,2007,33 (18):236-238(in Chinese).[李苏军,吴玲达.基于粒子系统的实时雨模拟 [J].计算机工程,2007,33 (18):236-238.]

[15] TAN Liang,LUO Yifan.Simulation of precipitation phenomenon based on particle system method [J].Computer Science,2010,37 (1):271-274 (in Chinese).[谭良,罗一帆.基于粒子系统方法的沉淀现象模拟 [J].计算机科学,2010,37 (1):271-274.]

猜你喜欢
粒子系统雪景风速
基于Kmeans-VMD-LSTM的短期风速预测
利用GPU加速的粒子系统全球流场可视化系统设计与实现
基于最优TS评分和频率匹配的江苏近海风速订正
《雪景山水图轴》
《雪景寒林图》
《雪景山水图》
UE 4粒子系统与外部数据通信研究
基于GARCH的短时风速预测方法
雪夜遇熊
考虑风速分布与日非平稳性的风速数据预处理方法研究