基于粒子系统的大规模漫游环境实时降雨模拟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于粒子系统的大规模漫游环境实时降雨模拟
李占利;吕淑丽
【摘要】降雨是一种重要的自然现象,对降雨的模拟可以大大提高虚拟场景的真实感,粒子系统是模拟降雨的一种有效方法。
针对已有降雨模拟方法的不足,提出一种应用于大规模漫游环境下实时降雨的新方法。
首先通过分析雨的行为,建立恰当的雨滴粒子模型;其次通过在极坐标内生成雨滴粒子,提高粒子的利用率;最后就风对于雨滴的干扰作用进行计算,模拟出了逼真的雨滴运动过程。
实验表明,该方法生成的大规模漫游环境下的雨景真实自然,实时性高,具有一定的实用价值。
%Raining is an important natural phenomenon.Simulation of raining will greatly improve the reality of virtual scene,and the particle system is an effective way to simulate raining.To solve the shortage of previous simulation method,we put forward a new approach for the simulation of raining in large-scale roaming terrain.First,a proper raindrop particle model is built by analysing the actions of the rain;then,the utilisation rate of particles is improved by generating the raindrop particles in polar coordinates.Finally,the interference of the wind on raindrops is calculated so that the verisimilar movement process of raindrops is
simulated.Experimental results show that the raining scene in large-scale roaming terrain generated with this method is real,natural and with high real-time performance,it has certain applied value.
【期刊名称】《计算机应用与软件》
【年(卷),期】2014(000)001
【总页数】5页(P214-217,228)
【关键词】粒子系统;雨滴粒子;模拟;大规模环境
【作者】李占利;吕淑丽
【作者单位】西安科技大学计算机科学与技术学院陕西西安710054;西安科技大学计算机科学与技术学院陕西西安710054
【正文语种】中文
【中图分类】TP391
自然景物的模拟一直是计算机仿真领域中既热门又具有挑战性的一个内容。
降雨是一种非常普遍的自然现象,对于降雨的模拟广泛应用于虚拟现实,计算机动画、广告设计,影视制作等方面。
所以对于降雨的模拟有着非常重要的实际意义。
Reeves在1983年提出了使用粒子系统[1]来模拟雨、雪、烟、火焰、爆炸等由不规则对象构成的实时系统。
该方法为不规则物体的模拟提供了一种强有力的方法,也是目前模拟雨的一种普遍且有效的方法。
粒子系统能较真实地模拟雨的效果,但是在大规模场景中由于场景的增大,构建雨景的粒子数量也会随之增加。
数量众多的粒子使得绘制的速率降低,最终将影响整个三维场景的漫游速度。
因此,如何解决大规模场景中粒子的数量与系统实时性之间的矛盾是研究大规模环境下降雨的一个关键所在。
目前对于降雨的模拟方法主要有基于传统的CPU方法和基于GPU的方法。
从生成的逼真度来看两者的效果相差不大,但就渲染速率来说基于GPU方法的渲染速率明显优于基于CPU的方法。
国外学者对降雨的模拟进行了不同程度的研究。
Anna等[2]通过多分辨率的应用在GPU上实现了基于粒子系统的降雨模拟,充分考虑了雨滴的物理属性,最终
生成了实时性高、真实感强的三维虚拟场景,但在漫游方面没有做过多的研究。
Bruno等[3]在研究雨滴产生的痕迹以及泼溅效果是也通过粒子系统来生成雨滴。
在国内,徐利明等[4]通过粒子系统实现雨雪的模拟,但是当系统中粒子数量达到360时,漫游速度为24帧/s,实时性低。
李苏军等[5]应用了精确的雨滴降落方程来求解雨滴的运动,通过显示列表来提高系统速率。
最终生成的图像在
500个粒子是帧率为100帧/s,实时性好,但是场景逼真度较低,且不能应用与大规模漫游场景。
郭震[6]等实现了一种大场景环境下实时降雨的新方法,该方法添加了雾化效果,同时也实现了雨滴降落地面时的泼溅效果,生成的场景逼真,但未实现漫游效果。
文治中等[7]通过GPU的方法实现了大规模场景高效雨雪
的模拟,该方法实时性高,生成的场景真实感强,即使对于万级数量的粒子也能达到百级的渲染速率。
但未实时漫游效果的处理。
最重要的是,上面的方法对于风场对整个雨景的干扰影响处理效果不明显,使得生成的雨景应用范围不广泛。
综合考虑实时性、逼真度、大规模漫游场景等情况下,本文在对粒子系统深入理解的基础上提出了一种应用于大规模漫游环境实时降雨模拟的新方法。
该方法主要通过雨滴粒子模型的建立、极坐标的应用、雨滴粒子的运动简化、雨滴粒子运动过程的精确计算等方法来实现降雨的模拟。
且对于雨滴受风力的影响效果处理逼真。
通过在场景漫游中场景移动而视点不动的方法来实现漫游。
在漫游的过程中通过使生成的雨景始终保持在屏幕上,且面向视点来提高生成雨滴粒子的利用率。
最终,该方法生成的场景真实感强,实时性高,即使在普通的PC机上也可以达到很好的雨景漫游速率。
一个粒子系统是由大量称为粒子的简单体素构成。
每个粒子有一组属性,如位置、速度、颜色和生命期。
一个粒子究竟有什么样的属性,主要取决于具体的应用。
将简单体素和复杂物体行为有机结合、易于实现、易于显示是粒子系统的优点。
这些也决定了粒子系统是构造火焰、水、雨、雪、草地和树林等自然景物的一种有效方
法。
粒子系统并不是简单的静态系统,它是不断进化的。
随着时间的推移,系统中已存在的粒子会不断改变形状,不断运动,直到其死亡。
当系统中旧粒子不断消亡的同时,会不断有新粒子的加入。
为了模拟粒子生长和死亡的过程。
每个粒子均有一定的生命周期,使其经历“产生”、“活动”、“死亡”这三个具有随机性的过程。
一般情况下,生成粒子系统某瞬间画面的基本步骤是:
(1)生成新的粒子。
(2)给每一新粒子赋予一定的属性。
(3)删除已经超过其生命周期的粒子。
(4)根据粒子的动态属性对粒子进行移动和变换。
(5)绘制并显示由有生命的粒子组成的图形。
实际观测表明,雨滴的最小直径为0.5 mm,最大直径不超过6mm,最大下降速度为9m/s。
高速闪光摄影观察到,一旦雨滴达到最大下降速度,底部就变平,形状似张开的降落伞顶部。
这是由雨滴下降时的空气阻力所致。
由于不同大小雨滴达到匀速下降时存在速度差,下降速度较快的大雨滴与下降速度较慢的小雨滴相遇就会聚合成更大的雨滴,但随着雨滴体积的增大,空气阻力也随之增大。
当雨滴直径大于6 mm时,空气阻力超过了使雨滴保持整体的分子内聚力。
大雨滴便又碎裂分解成小雨滴。
发生大雨或暴雨性天气时的降雨就会出现上述现象。
因此,实际雨滴的落地速度即可能已经达到匀速极限速度,也可能仍处在加速降落状态。
雨滴就是水滴,只是在下落过程中其中会夹有杂质,使得其透明度没有水滴高。
再者下雨天天空的颜色使得雨滴的颜色也呈现灰白色。
根据雨滴的这些行为特征在不影响真实感的情况下,对雨滴粒子的模型做了适当的简化,得到了适合大规模场景的雨滴粒子模型。
2.1 雨滴粒子的定义
通过对于雨滴的认识,定义雨滴粒子模型中其属性主要包括状态、位置、速度、加速度、颜色、透明度等。
所有这些属性都是时间t的函数。
随着时间的变化,每个雨滴粒子都要经历“产生”、“活动”和“死亡"三个过程。
根据雨滴粒子的这些特征,采用下面的结构体来表示雨滴粒子:
2.2 雨滴粒子的受力行为描述
雨滴不同时刻的状态由其动力学性质决定,如果不受外力作用,雨滴粒子将始终按初始速度匀速下降。
当受到外力的作用时,按牛顿第二定律,粒子将产生一定的加速度。
若对雨滴做较为详细的受力分析,其受到包含重力、空气对其的浮力、雨滴在流体中运动所受斯托克斯力和风力。
下落过程中在竖直方向上,因速度增加,其阻力也在增加,最后重力与阻力平衡,速度不发生改变,这一速度称为终极速度。
风力的方向和大小都有其随机性,会随着时间随机的变化,所以风力对于雨滴粒子的干扰结果也不确定。
综上,雨滴粒子的运动过程随机性强且复杂。
如果要对其运动进行精确的描述,势必将增加系统运算的复杂性,继而影响绘制速率。
所以在此对于雨滴粒子的运动进行了一定的简化。
文中对于雨滴粒子在竖直方向上的运动也简化为匀速直线来计算。
最终,对于雨滴粒子在水平方向和竖直方向上的运动做了如下的假设。
在水平方向上雨滴粒子只受到风力的作用,风力的方向一定,风力大小会随着时间在一定的范围内随机变化,且雨滴粒子在x方向的初始速度为零。
所以雨滴粒子在x方向的运动可以用如下公式来表示:
其中,St表示第t个时间单位末在水平方向雨滴的位置,ΔSt+1表示在第t+1个时间单位里雨滴位移的增量,Vt表示t时刻雨滴的速度,at表示雨滴粒子在第t 个时间单位里在水平方向上的加速度,Δt表示两帧之间的时间间隔。
在竖直方向上,设每个雨滴粒子都达到了终极的匀速运动。
则雨滴在y方向的运动过程可以如下公式表示:
其中,St表示t时刻雨滴的位置,ΔS表示在第t+1个时间单位雨滴位移的增量,V表示雨滴的速度,Δt表示两帧之间的时间间隔。
2.3 雨滴粒子的形状
胡忆默[8]在《水滴形状的真相》一文中提到,真实的雨滴不像泪珠,而是像一粒粒小馒头—上圆下扁。
邵雪辉等[9]在探讨雨滴相关问题时也提到了雨滴的形状,认为其应该为流线型。
但是在做模拟的时候主要是考虑整个雨景的真实感,是从整体上考虑的,所以可以对其形状做些必要的简化。
综合考虑雨滴在下落过程中形状的不确定性,将雨滴粒子简化为四边形面片,采用一种新的方法来生成雨滴的形状。
如图1中Ⅰ图所示的BMP图片作为最基础的雨滴粒子图,在绘制雨滴的过程中分别对图Ⅰ进行竖直方向上的等比例拉伸和非等比例拉伸来生成图Ⅱ和图Ⅲ的两种雨滴粒子效果。
然后采用OpenGL的纹理融合技术,将图Ⅱ或图Ⅲ所示的雨滴的二维纹理图片映射到四边形面片上,就生成了雨滴粒子。
当雨滴接近地面时、夏天大暴雨时、或者风力很大时的速度将会很快,再加上人眼的视觉残留效应,使得看到的雨滴呈流线型。
所以采用图1中Ⅱ图来表示雨滴纹理。
当雨滴速度不大且风速小到可以忽略不计的时候,采用图1中的Ⅲ图来表示雨滴纹理图片。
3.1 三维场景的生成
三维场景的生成是虚拟漫游场景构建中最基本的一个步骤。
三维场景的逼真度直接影响人对所生成三维场景真实程度的感知。
通常三维真实感的构建所需的数据量很大,对计算机的图形处理能力的要求很高,因此特别需要探索一些高效的算法。
尤其在虚拟漫游系统中,需要产生实时动画的效果,所以算法的效率更重要。
考虑到系统的运行时间和绘制效果之后选择纹理映射来生成三维的场景。
纹理映射技术是通过将图像粘贴在几何模型表面来增强图形真实感的常用方法,既能够增加场景真
实感又不影响几何图形本身几何复杂度。
对于整个三维场景的模拟是通过一个三棱锥来实现的。
其中三棱锥的底面作为地面,通过对三个侧面的再次细分来实现天空的模拟。
3.2 雨滴粒子的产生
雨滴粒子的产生是其生命周期的开始。
而对其产生区域选择的恰当与否会直接影响生成雨滴粒子的利用率。
生成雨滴粒子之后选用投影变换将其投影在屏幕上,生成最终的场景。
程序中选用透视投影来实现三维物体在屏幕上的映射。
透视投影基本符合人的视觉习惯,同样尺寸的物体离视点近的比离视点远的大,远到极点即消失。
为了实现透视投影的这种效果,透视投影的取景器被设计成一个被截去了顶的四面锥体,落在取景器内的物体朝着观察锥的顶点方向投影,而观察锥的顶点就是视点。
因此如果在世界坐标系中生成和更新雨滴粒子,就会有部分雨滴粒子不可见,造成资源的浪费。
本文在如图2所示的极坐标中来生成和更新雨滴
粒子,而极坐标的原点就是视点。
这样所生成的雨滴粒子始终是可见的,提高了雨滴粒子的利用率。
θ为取景器左边边界和右边边界的夹角,O点为视点。
视点到最远的裁剪平面和最近的裁剪平面之间的距离(即near和far之间的距离)是z的取值范围。
在极坐
标中得到雨滴粒子点的坐标之后,就可以用极坐标和世界坐标的转化关系求得雨滴粒子在世界坐标系中的值。
文中对雨滴粒子的初始化如下:
3.3 雨滴粒子的绘制
在确定了雨滴粒子的初始值以及运动方程之后就要对雨滴进行绘制。
本文采用的是四边形面片来表示雨滴粒子模型,利用OpenGL纹理映射和色彩融合技术生成真
实的雨滴。
所以在这一步最重要的是确定四边形面片的四个顶点,确定之后就可以将雨滴粒子图片的四个顶点和四边形面片的四个顶点对应起来。
如果某物体同时参与几个运动,那么这个物体实际的运动就是那几个分运动的合运
动。
分别研究各个分运动,然后将各个分运动合成来得到这个物体最终的运动。
通过分段直线运动逼近曲线运动使得复杂的运动简单化,这是研究复杂运动的一种有效方法。
如马骏等[10]提出用分段直线逼近的抛物线来模拟喷泉粒子水珠运动。
在本文中将雨滴粒子的运动考虑为水平方向的加速直线运动和竖直方向的匀速直线运动的合运动。
已知分运动,可以根据平行四边形法则来求解合运动。
文中在求解某一时刻的雨滴粒子运动时,根据如图3所示的原理来生成雨滴在某一时刻的位移。
设t时刻雨滴位于Pt这一点,在t到t+1的过程中雨滴在水平方向的位移为
Xt+1,在竖直方向的位移为Yt+1,则雨滴在t到t +1的过程中的位移可以用向
量来表示,即t+1时刻雨滴位于Pt+1这一点。
其中θ为雨滴在t到t+1的过程
中的位移与竖直方向的夹角。
随着雨滴的下落,雨滴的速度越来越大,再者人眼的视觉残留效果,使得人眼中的雨滴模型属于流线型。
有时候风速较大,看到的雨景整体呈一条斜的直线,而雨景的倾斜程度可以用雨滴受到的风力大小来衡量。
在文中根据雨滴不同时刻的θ值
来控制整个雨景的倾斜程度。
因为θ值为雨滴在t到t+1的过程中的位移与竖直
方向的夹角,它可以很好地反映雨滴偏离竖直方向的程度,即风力的大小,继而控制整个雨景的倾斜程度。
文中采用图4所示的方法来生成每帧图像中雨滴粒子的位置,由此位置来确定雨
滴粒子四边形面片顶点的坐标。
其中Pt点为t时刻雨滴的位置,θ为雨滴在水平方向与竖直方向的合位移与竖直
方向的位移夹角。
则我们可以根据几何关系确定出P1、P2、P3和P4各点的坐标。
3.4 雨滴粒子的消亡
雨滴的消亡即雨滴粒子生命周期的结束。
雨滴粒子处于其生命周期内就定义其为活动,生命周期结束就定义其为死亡。
在雨滴粒子结构体中用布尔型变量type来表
示雨滴是处于活动还是死亡。
在每个雨滴粒子初始化时设定粒子的type值为真,在绘制粒子时先判断粒子的type值,为真则绘制。
文中根据雨滴粒子所作用范围的地形高度值来动态设置雨雪粒子的生命周期,一旦当系统检测到雨滴粒子的高度值与地形的高度值大小相同时,则表示该粒子正好落到地面,此时这个雨滴粒子就处于死亡状态。
在程序中并没有显式地设定其为死亡状态,而是给已经死亡的这个雨滴粒子赋予新的生命周期。
重复利用消亡的粒子来生成新粒子,这便使得初始粒子一旦生成后,其生命周期为无限长,避免了重复删除已经消亡的旧粒子和产生新粒子所带来的额外开销。
3.5 大规模场景漫游的实现
在文中通过给鼠标和键盘上的四个方向键添加响应函数来分别控制整个场景的漫游。
文中采用视点不动,环境绕着视点移动的方法来实现漫游。
因为在大规模环境下场景很大,如果要在这样的环境下生成雨景,雨滴粒子数量巨大,系统运行速率将会很低。
所以在漫游的过程中视点不变,控制在视点范围内生成的雨景始终保持在屏幕范围内,且始终面向视点,而在漫游的过程中通过环境的移动来实现漫游。
这样在整个漫游的过程中,生成的雨景始终可见,有效节省了系统运行时间。
本文采用了图形开发库OpenGL和Visual C++6.0作为开发工具,Windows XP SP3操作系统作为开发平台,实现了大规模漫游场景下降雨的实时模拟。
该方法
在实验硬件环境为AMD Athlon(tm)64×2 Dual Core Processor
5000+2.61GHz处理器,2.00GB内存,NVID GeForce 8500 GT显卡,256MB 显存上实现。
在选择监视器可以正常显示的最高屏幕刷新频率75赫兹的显示模式下,生成的三维场景大小为2 000×2 000,由100个200×200的基本纹理贴图
拼接而成,最终生成的三维雨景漫游效果如图5所示,且漫游速率均达到75帧/s。
和之前的一些方法相比较实时性高,且分别使用图1中的Ⅱ和Ⅲ为雨滴粒子纹
理生成了不同的雨景漫游效果图。
通过该方法在屏幕刷新率为75时生成的雨滴粒子数量增大情况下帧率变化如表1所示,可以看出在雨滴粒子数量增大的时侯仍
然可以保持高的雨景漫游速率。
这使得该方法的应用范围较广,可以模拟不同粒子数量,即大雨、中雨到小雨不同效果的雨景漫游图。
图5中Ⅰ和Ⅱ是根据图1中Ⅲ作为雨滴粒子纹理来生成的1 000个粒子的无风场
干扰情况下黑夜和三维场景中的雨景截图。
Ⅳ、Ⅴ、Ⅵ、图Ⅶ是根据图1中Ⅱ作
为雨滴粒子纹理来生2 000个粒子的雨景漫游过程中的几帧截图。
其中,Ⅲ和Ⅳ
分别为风力方向相反时生成的雨景的截图。
本文在粒子系统的基础上提出了一种在大规模漫游环境下生成实时雨景的新方法。
从最终生成的三维雨景来看,提出的方法真实感强,对风力的干扰作用处理明显,在漫游的同时仍能保持高的渲染速率,是大规模漫游场景中模拟雨景的一种有效方法。
再者,通过表1可以看出在粒子数量增大时该方法也会保持高的渲染速率。
保证了该方法能够得到广泛的应用。
由于考虑到系统实时性的问题,文中还有一些不足之处,在以后的工作中有待改进。
首先对漫游同时雨景的变化处理得太过简单,在以后有待加强;再者可以进一步考虑雨滴落地时的特殊效果处理。
【相关文献】
[1]ReevesW T.Particle system:a technique formodeling a class of fuzzy objects
[J].Computer Graphics,1983,17(3):359- 376.
[2]Anna Puig-Centelles,Oscar Ripolles,Miguel Chover.Creation and control of rain in virtual environments[J].The Visual Computer:International Journal of Computer Graphics,2009,25(11):1037- 1052.
[3]Bruno Barcellos Coutinho,Antonio A F Oliveira,Yalmar Ponce Atencio,et al.Rain Scene Animation through Particle Systems and Surface Flow Simulation by SPH[C]//Proceedings of the 2010 23rd SIBGRAPIConference on Graphics,Patterns and Images,2010:255- 256.
[4]徐利明,姜昱明.基于粒子系统与OpenGL的实时雨雪模拟[J].计算机仿真,2008,22
(7):242- 245.
[5]李苏军,吴玲达.基于粒子系统的实时雨模拟[J].计算机工程,2007,33(18):236- 238.
[6]郭震,马小虎,陈恒金.一种大场景环境下实时降雨模拟的方法[J].苏州大学学报:工科版,2008,28(6):15- 19.
[7]文治中,等.基于GPU粒子系统的大规模场景高效雨雪实时模拟[J].计算机应用,2010,
30(5):1398- 1401.
[8]胡忆默.水滴形状的真相[J].大科学·科学之谜,2006(7):29 -30.
[9]邵雪辉,王宝钧,王建国.关于雨滴问题的几点思考[J].河北北方学院学报:自然科学版,2005,21(2):10- 11.
[10]马骏,朱衡君.基于动态纹理和粒子系统的喷泉模拟[J].北京交通大学学报,2005,29(1):90- 94.。