基于粒子系统的雨景模拟改进算法研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于粒子系统的雨景模拟改进算法研究
摘要:针对传统粒子系统技术生成虚拟场景速度太慢无法满足仿真系统实时性要求的缺点,在介绍粒子系统传统算法的基础上,以模拟自然界降雨过程为例,提出了基于粒子系统的雨景模拟改进算法,并最终取得了较为逼真的降雨过程视觉效果。该模型方法简单实用,可很方便地嵌入到现有的各种动画系统中。
关键词:计算机仿真;粒子系统;雨景模拟;实时生成
0引言
随着计算机图形学理论和图形硬件的飞速发展,自然景物的生成与模拟已经成为计算机图形学研究的热门课题之一。尤其是对如雨、雪等动态自然景物的模拟更是极具挑战性,这是由于在现实世界中的自然景物具有极其丰富的表面纹理细节和不规则的表面外形,它们的逻辑结构很难表达,若对在微机条件下的场景实时生成采用传统的计算机图形学方法来造型,再对场景进行实施渲染,巨大的计算量将成为图形生成显示难以逾越的瓶颈。因此,如何才能实时有效地模拟各种自然景物过程并提高虚拟场景的逼真性就成了计算机图形学研究的一个重要内容。
本文从视景仿真的实时性要求出发,首先介绍了粒子系统的传统算法,然后以模拟自然界降雨过程为例,分析了雨点的属性特点,提出了基于粒子系统模拟自然界降雨过程的实时生成改进算法,建立并实现了一种能够模拟降雨过程的粒子系统。该系统对雨水下降过程
中的物理模型等进行了适当简化,在保证粒子系统实时性的前提下,达到了较高的逼真度,并可方便地嵌入到现有的各种动画系统中去,应用前景十分广阔。
1基于传统粒子系统的雨景模拟算法
这里首先对坐标系及相关变量作出相应说明,假设系统中模型空间坐标系采用右手坐标系,摄像机的初始位置为(0,0,0),方向为z轴负方向。所用到的变量包括视距体参数、视窗尺寸、摄像机参数等。视距体参数包括水平视角与垂直视角α、β,近平面距离dnear,远平面距离dfar。视窗尺寸包括视窗高度hscreen、视窗宽度wscreen。当前摄像机的位置为(xv,yv,zv),摄像机绕x、y、z三坐标轴的转角为(h,p,r),由于在仿真中h、r约等于0,因此可简化为(0,p,0)。1.1新粒子数量的计算
在雨景模拟中,新的粒子由一个可控的随机过程产生,在某一时刻,进入系统的粒子数量为系统中设置的粒子数量预期值与系统中当前存在的粒子数量之差,加上一个由一随机过程定义的粒子数目。见下式:
ParticleNum=MeanNum+rand()×VarNum(1)
其中,MeanNum为产生粒子数量的平均值,VarNum为产生粒子数量的方差,rand()为[-1,1]间均匀分布的随机数,用于控制新粒子的实际生成数量。
1.2粒子的状态更新
粒子的属性是逐帧更新的,需要更新的属性有速度和位置。其中,
粒子X方向、Z方向的速度受当前风速方向、大小的影响,当风速改变时,粒子X方向、Z方向的速度亦会改变,计算方法与前述类似。然而,在粒子系统中,雨点粒子要在三维空间中运动,那么按照物体的运动规律,物体中粒子的速度v、加速度a、位置s和运动时间t 有如下的约束关系:v=v0+∫t0adt(2)
s=s0+∫t0vdt(3)1.3生命周期结束条件
粒子的生命周期常常以帧为单位。将粒子位置处于视距体之外或者粒子落在了地上作为系统中粒子生命结束的条件。
1.4粒子的绘制
粒子的状态设置完毕后,需要根据粒子的状态对其进行绘制。
综上,粒子系统整个生命周期流程可归纳如图1所示。
2基于粒子系统的雨景模拟改进算法
由于粒子系统考虑利用大量粒子单元来表现不规则物体,因而即使对于空间中一个不大的物体区域,构成它的粒子数目也是惊人的。前文所述的传统粒子系统算法对计算机的存储量和计算速度要求过高,使得图形实时交互显示在普通微机环境下实现起来比较困难,速度也较慢,不能满足3D场景实时渲染的要求。因此,针对粒子系统生成虚拟场景速度较慢的缺点,本文从以下几个方面对传统的基于粒子系统的雨景模拟算法进行了优化改进以实现系统响应的实时性。
2.1数据结构简化
粒子系统表达的自然景物越真实,所需粒子的数量就越多,计算开销就越大。因此,设计一个好的粒子系统的数据结构很重要,否
则将会大大地降低粒子系统的运行速度。为了尽可能地降低渲染这些粒子的时间,基于降雨场景的特征,本文在实现雨景模拟粒子系统建模时,使用短线(即一条线段)来表示雨点粒子,雨点粒子随着时间的推移,根据两个顶点所决定的方向向量,按照一定的速度下降。实时计算出它的具体位置,然后在该位置上将该粒子绘制出来。雨点粒子的结构构造如下:
//雨点粒子结构
struct RainParticle
{
float x,y,z;//位置
float fDspeed;//下降速度
};
RainParticle rain[PARTICLENUM];//雨点粒子数组
当然,雨点粒子也可以用小的四边形来表示,但在用小四边形来表示雨点粒子时,在系统运行时还要为它加上纹理,这将极大增加整个粒子系统运行的开销。此外,采用线段表示雨滴时还省去了反走样处理的繁琐。
2.2相对位置识别模型简化
由于对比场景中的景物,粒子本身的尺寸很小,因此,视距体关系与粒子位置的判断可简化为三维空间中“点”的裁剪问题。首先根据视距体参数计算构成视距体的6个面,其法向量指向视距体内侧。通过计算视距体的6个面与粒子中心的距离disi(i=1,2,…,6),
可判断6个面与粒子的位置关系。若粒子在所有6个面的内侧,则其在视距体之内,这时就需要再进一步进行粒子是否落地的判断,以确定其生命周期是否结束;若粒子在视距体的6个面中任意一个面之外,则视其在视距体之外,同时该粒子生命周期结束。要判断粒子是否落在了地上或场景中的其它景物上,需要遍历当前景物空间中模型的所有片元,并与粒子下落的轨迹求交。在3D系统中,由于场景复杂,该项操作的时间开销很大,难以实时完成。因此,算法将该条件简化为当粒子的垂向坐标值y小于其所在位置的地平面垂向坐标值时,粒子生命周期即告结束。2.3粒子系统物理模型简化在粒子系统的设计中,“从重力场的模拟、风的模拟”等各种环境的模拟到火焰、波浪、瀑布、喷泉、枝条的摆动,无一不是源于物理模型。利用式(2)和式(3)进行粒子运动状态积分运算的计算量是很有必要的,为此采用等加速度运动的方法来实现离散情况下物体运动状态的简化计算。
假设在雨点粒子的生命周期内,加速度保持不变。雨粒子的y方向速度仅受其初始加速度影响。由于帧间的时间间隔很小,为简化计算,把两帧之间粒子的运动看作匀速运动。粒子i的当前位置为:xi=xi0+∑m=Nm=1vxmTm(4)
yi=yi0+∑m=Nm=1vymTm(5)
zi=zi0+∑m=Nm=1vzmTm(6)其中,Tm是第m-1帧到第m帧的时间间隔,(vxm,vym,vzm)是粒子的年龄为m帧时的速度,N 是当前的粒子年龄(以帧为单位)。等加速度运动方法不仅精确率较