基于大规模粒子系统的实时喷泉模拟

上传人:飞*** 文档编号:42894458 上传时间:2018-06-04 格式:DOC 页数:7 大小:139.50KB
返回 下载 相关 举报
基于大规模粒子系统的实时喷泉模拟_第1页
第1页 / 共7页
基于大规模粒子系统的实时喷泉模拟_第2页
第2页 / 共7页
基于大规模粒子系统的实时喷泉模拟_第3页
第3页 / 共7页
基于大规模粒子系统的实时喷泉模拟_第4页
第4页 / 共7页
基于大规模粒子系统的实时喷泉模拟_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《基于大规模粒子系统的实时喷泉模拟》由会员分享,可在线阅读,更多相关《基于大规模粒子系统的实时喷泉模拟(7页珍藏版)》请在金锄头文库上搜索。

1、基于大规模粒子系统的实时喷泉模拟基于大规模粒子系统的实时喷泉模拟罗军 王玲(四川师范大学计算机科学学院,成都 610068)摘摘 要要 本文实现了一种新的喷泉模拟方法,与传统的在 CPU 上实现算法不同的是,本文算法完全基于计算机图形硬件(GPU)来实现,利用图形硬件的大规模并行计算能力,显著的增加了模拟喷泉的粒子数量,提高了渲染速度,同时减轻了 CPU 的负载,使整个三维场景的绘制更加高效。关键词关键词 粒子系统;GPU;实时;喷泉模拟 0 0 引言引言自然景物的模拟一直是计算机图形学的研究热点之一。粒子系统被公认为是模拟自然景物中运动模糊物体非常有效的一种图形生成算法。目前,在这一领域已经

2、有较多的算法和理论,1983 年,Reeves 首先提出了粒子系统为模糊物体建模的方法1。1990 年,Karl Sims 在超级计算机上实现了粒子系统的并行算法2。随着计算机图形硬件的快速发展,图形处理器(GPU)的计算能力大大增强,在 GPU 上进行大规模的并行计算成为可能3。 2004 年,Lutz latta 在个人计算机的 GPU 上实现了并行的粒子系统,能实时处理 1,000,000 个粒子,并首次提出了大规模粒子系统的概念4,5。 2006 年,许楠等也在 GPU 上实现了大规模的粒子系统,用 26 万个粒子实现了对雨景的模拟6。喷泉的模拟是粒子系统的典型应用,最近对喷泉的研究比

3、较活跃,马骏等利用粒子系统,采用离线渲染的方法来模拟喷泉7,8,赵静谧以粒子系统为基础,采用 Line 方式渲染粒子,结合纹理映射实现了喷泉的实时模拟,其实现的喷泉,粒子数量较小,速度只有 20 帧/秒9。方建文等利用了 GPU 的硬件加速功能,以 CPU 和 GPU 相结合,实现了对喷泉的实时模拟,在粒子规模小于 10,000 个的情况下能满足实时的要求10。在做虚拟校园时,我们要模拟一个较大的喷泉,由三组喷泉组成,共 72 个水柱,为了逼真的模拟喷泉效果,本文采用完全基于 GPU 的大规模粒子系统,在普通的计算机上,用了大约 76,500 个粒子,利用GPU 大规模并行计算的能力,实现了喷

4、泉的实时模拟。1 1 粒子系统简介粒子系统简介1.11.1 经典粒子系统介绍经典粒子系统介绍11粒子系统的绘制包括以下几个步骤: (1)粒子的产生:产生新的粒子加入系统中;(2)粒子的初始化:设置每个粒子的属性,如初始位置、方向、颜色、透明度、生命周期等;(3)粒子的消亡:从系统中删除那些已经超过生命周期的粒子;(4)粒子的运动:按粒子的动态属性改变位置和其它属性;(5)粒子的绘制:绘制并显示由有生命的粒子组成的图形。上述几个步骤不停循环,形成了物体动态变化过程。1.21.2 大规模粒子系统介绍大规模粒子系统介绍大规模粒子系统是相对经典的粒子系统而言,由于经典的粒子系统在数量上受到 10,00

5、0 个粒子的限制,而完全在图形硬件(GPU)上实现的粒子系统,在处理 1,000,000 个粒子的时候仍能满足实时的要求,这种完全在图形硬件上实现的粒子系统被称为大规模粒子系统。大规模的粒子系统采用并行算法,提高了并行处理能力,主要在 GPU 上实现,减轻了 CPU 的负载,提高了 GPU 的利用率,大大减小了 CPU 到 GPU 的数据传输,从而极大的改善了粒子系统的实时性。下面详细介绍如何用大规模粒子系统来实时模拟一个真实的喷泉。2 2 喷泉的模拟喷泉的模拟喷泉由多个水柱组成,每个水柱可看成由很多个小水珠组成,每个小水珠可由一个粒子来模拟,本文称之为喷泉粒子。喷泉的模拟按图 1 所示的步骤

6、进行:图 1 喷泉粒子处理流程图2.12.1 喷泉粒子的属性和存储喷泉粒子的属性和存储喷泉粒子由位置(Position)、生存时间(Tol)、速度(Velocity)、颜色组成。图 2 粒子属性存储示意图这些属性如图 2 所示,均以 Texture 的形式存储在显存中,Texture 是由 Pixel 组成的矩阵,每个Pixel 由 RGRB 四个浮点数分量组成,GPU 处理数据时,一次可以输入一个或多个 Texture,处理后输出一个 Texture,结合硬件的特点,便于并行处理,我们把这三组数据保存在不同的 Texture 中,就有了图 2所示的三组 Texture。每组两个 Textur

7、e,循环的用做输入和输出,称之为双缓存。2.22.2 喷泉粒子的产生喷泉粒子的产生在 GPU 编程中,存储空间的分配和回收不如 CPU 对内存的管理那么方便,不太适合动态分配,因此创建固定大小的 Texture,比如 1024 * 256 个像素,先在内存中建立一个索引表,为 Texture 的每一个Pixel 设置一个标志,表示这个 Pixel 是否保存有效的粒子信息。这个索引表的初始值全部为零,表示场景中没有任何粒子,分配新粒子时,从索引表中找到为零的值,然后设置各个 Texture 对应的 Pixel 的值,再把索引标志的值设为 1。产生新粒子时,按预先设置的产生粒子的速度和与上次产生粒

8、子的时间间隔,可计算出本次应该产生的粒子数。2.32.3 喷泉粒子的初始化喷泉粒子的初始化如图 3 所示,喷泉从 P1 喷出,初始的方向是指向 P2 的,为了让喷泉看起来更真实,我们在设置初始的速度时,让 P2 在一个以 R 为直径的球内随机分布,这样的喷泉看起来是一个水柱而不是一条线。在运行过程中,要受到重力等力的作用,方向会不断改变,最后到达 P3 的位置。喷泉粒子的初始方向Direction为:Direction.j = (P2.j P1.j) / ( ); j = x, y, z.喷泉粒子的初始速度为:Velocity = Direction * Speed其中 Speed 为喷泉粒子

9、运动的速率,可以让它在一定范围内波动,以增加喷泉的动感。由于一次要产生多个粒子,因此,这些粒子的初始位置是:Position = P1 + Rand(0, t) * Velocity其中,t为两次产生粒子的间隔时间。这样才能确保喷泉的连续。喷泉粒子是白色水珠,并且通过喷泉还能看到后面的物体,因此把初始色彩设置为白色,透明度设置为半透明。如果设为其它的值,则可以制作彩色喷泉。喷泉粒子的生命周期设置一个平均值T,再设置一个波动的区间t,生命周期为:TimeofLive = T + Rand(-t, t)其中Rand(-t, t)为取值在(-t, t)之间的一个随机值。这样做能增加其动态性。2.42

10、.4 喷泉粒子的运动喷泉粒子的运动2.4.12.4.1 喷泉粒子的速度更新喷泉粒子的速度更新为了让喷泉的运动轨迹看起来更真实,首先考虑它的受力模型,粒子一直受重力的吸引,因此一直会有一个向下的重力的加速度 9.8。还可以考虑风力等,最终用运动方程合成一个最后的加速度。然后用下面的方程计算当前的速度:V = V0 + a.(t t0)其中,V指现在的速度,V0是上次更新时的速度,t是当前的时间,t0是上次更新时的时间。喷泉粒子速度的更新方法与在 CPU 上更新不同,速度存储在 Texture 上,加速度和原来的速度的合成是在 Pixel Shader 编程中实现,执行时,把记录着粒子上次的速度的

11、 Texture 作为输入,GPU 对所有Pixel 进行并行处理,输出到另一个 Texture。下面的其它属性的更新方式与此相似。2.4.22.4.2 喷泉粒子的位置和生命周期更新喷泉粒子的位置和生命周期更新两次喷泉粒子更新的时间间隔记为 t, 喷泉粒子的生命周期为上次更新后的值,减去时间间隔。喷泉粒子的新的位置为:其中, x,y,z是喷泉粒子的位置,x1, y1, z1是喷泉粒子上次更新时的位置,vx,,vy,vz是喷泉粒子的速度。2.52.5 喷泉粒子的消亡喷泉粒子的消亡当粒子的生命周期小于或者等于零时,喷泉粒子应该从场景中移除。处理消亡的粒子,要做两方面的工作,一是从位置 Textue

12、 中,把位置移到无限远处,在绘制时把此粒子裁剪掉。另一个工作就是要把索引表中对应的索引项的值设为 0,以便分配新粒子用。2.62.6 喷泉的绘制喷泉的绘制喷泉的粒子在绘制时,可以采用点绘制、三角形面片或多边形面片绘制,本文采用 Dirext3D9 的Point Sprite 的方法来绘制粒子,这种方法提供一个顶点坐标,以给定的顶点为中心,进行纹理贴图,这样我们可以准备多种不同的水珠的图片,实现不同的喷泉效果,比用三角形或多边形绘制减少了需要的顶点数量和计算时间。要完成点绘制,必须把顶点数据放在顶点缓存(Vertex Buffer)中。粒子属性的存储和处理都是在Texture 中进行的,因此我们

13、要通过编程把 Texture 中的属性值复制到 Vertex Buffer 中。喷泉粒子在转化为顶点信息后,通过普通的渲染过程绘制到帧缓存中即可。 实验结果实验结果根据上面所述算法,在普通计算机(P43.0G 处理器, Geforce MX 6200 显卡,512M 内存)上进行实验。喷泉由 72 条水柱组成,约 75600 个粒子。我们对本算法在以下三种情况下进行了场景绘制时的帧率测试,测试结果如下:表 场景绘制帧率测试结果 场景内容帧率 FPS 场景中公有喷泉95 复杂的三维场景(不包 括喷泉)85复杂的三维场景 (包括 喷泉)70从表 1 可以看出,用本算法实现的喷泉达到了较好的实时性,

14、把喷泉应用于复杂的三维场景时,帧率的下降较小,能应用于复杂的三维场景中。本算法还可以推广到更多的利用粒子系统的场景中,比如火焰、爆炸、雨、雪的模拟等,具有一定的推广价值。 图 4 展示了与喷泉与三维场景融合后的远景和近景。图 4 喷泉在三维场景中的截图4 4 结论结论采用大规模粒子系统来模拟喷泉,突破了经典粒子系统 10,000 个粒子的限制。在提高粒子处理规模的同时,提高了绘制的效率,从而保证了绘制的实时。在具体的实现中,对速度,位置,生存时间等让其在某个小范围内随机波动,增加了喷泉的动感。参考文献参考文献1 Reeves,William T Particle SystemsTechniqu

15、e for Modeling a Class of Fuzzy ObjectsC SIGGRAPH Proceeding,19832 Karl Sims Particle Animation and Rendering Using Data Parallel ComputationJComputer Graphics, 24(4):405413, 19903 Ian BuckData Parallel Computing on Graphics Hardware Stanford University, 20034 Lutz LattaBuilding a Million Particle S

16、ystemA Game Developers ConferenceC, 20045 Andreas Kold,Lutz Latta,Christof Rezk-SalamaHardware-based Simulation and Collision Detection for Large Particle SystemsAThe Eurographics Association 2004C, 20046 许楠等,郝爱民,王莉莉一种基于 GPU 的粒子系统J计算机工程与应用,2006,(19):77-797 马骏,朱衡君,龚建华基于矢量控制法和 LOD 的音乐喷泉模拟J系统仿真学报, July, 2005,17(7):1674-16798 马骏,朱衡君基于动态纹理和粒子系统的喷泉模拟J北京交通大学学报,2005, 29(1):90-959 赵静谧,张慧,郑国勤基于

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号