基于GPU粒子系统的大规模雨雪场景实时模拟

2012-05-04 08:09刘小玲杨红雨郭虎奇
计算机工程与设计 2012年6期
关键词:粒子系统雨雪立方体

刘小玲,杨红雨,2,郭虎奇

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

0 引 言

近年来,图形处理器(graphics processing unit,GPU)的相关硬件技术得到了飞速的发展,图形硬件的运算速度和功能得到了很大程度的提高[1]。在处理能力上,现在的图形处理器每秒能同时处理几千万个三角形顶点,光栅化几十亿个像素;在控制功能上,原本的固定渲染管线中的顶点处理和像素处理可以被其可编程的顶点着色器(vertex shader)和像素着色器(fragmanet shader)取代。同时,GLSL(opengl shading laguage),HLSL(high level language)和Cg(C for graphics)等高级着色语言的出现,使程序开发人员能更加高效的编写顶点着色器和像素着色器上的代码[2]。充分利用GPU的强大的并行计算能力和可编程功能,可以使算法的执行速度得到很大的提高,为在大规模场景中进行实时雨雪绘制提供了硬件基础。

自1983年Reeves首次提出用粒子系统模拟不规则对象组成的物体以来,粒子系统得到了广泛的研究和应用[3-10]。在粒子系统中,粒子的产生和控制可以只遵循简单的物理动力学定理,也可同时引入随机过程,其形状,颜色等外部特征也可满足随机性,这使得粒子系统能很真实地模拟各种自然现象,如云,烟,火焰,爆炸和雨雪等。作为粒子系统的典型应用之一的雨雪自然现象,在粒子系统中也得到了逼真的模拟。

在传统的基于粒子系统的雨雪模拟[11-13]中,CPU负责大部分的工作,包括粒子的产生,粒子速度的控制,位置的更新等。在这种模式下,CPU将计算得到的雨雪粒子的最终位置数据通过系统总线传给GPU,并最终由GPU来完成粒子的绘制工作。在这种绘制方式中,系统总线带宽成为了粒子系统绘制效率的瓶颈之一,只能实时模拟数万个雨雪粒子,不仅没有充分利用GPU强大的并行计算能力,而且无法达到在大规模场景中进行实时雨雪绘制的要求。

鉴于此,本文提出了一种完全基于GPU的雨雪粒子模拟系统,将粒子属性的更新工作交给GPU来完成,CPU只负责初始粒子的创建工作。这样既充分利用了GPU强大的并行运算能力,也最大程度地降低了CPU和系统总线的压力,使可实时绘制的雨雪粒子数量从数万个提升到了百万个。同时,本文以视点为中心,在视点空间中生成雨雪粒子,并将粒子位置控制在视点前的一个固定立方体区域内。这使粒子都是可见的,达到了以小规模粒子数量模拟大规模雨雪场景的效果,从而满足了在任意规模场景中进行雨雪效果的实时模拟。为了进一步提高GPU的效率,系统使用几何着色器(geometry shader)进行雨雪粒子由点到四边形的几何扩展。

1 粒子系统模型

在基于粒子系统的雨雪模拟系统中,每片雪花或每滴雨对应一个粒子。每个粒子的属性包括初始位置,速度,生存时间和尺寸等。粒子系统通过实时计算和更新粒子的属性来模拟雨雪的运动。粒子系统每帧具体的模拟过程主要分为以下几个步骤:

(1)产生新的雨雪粒子,并初始化新粒子属性;

(2)删除满足消亡条件的雨雪粒子;

(3)更新粒子属性;

(4)绘制粒子。

在传统的粒子系统中,(1)~(3)的工作在CPU上完成,即使在CPU没有其它负荷的情况下,最多也只能模拟几万粒子的运动。这对于大规模雨雪场景来说根本无法达到实时的效果。利用GPU强大的并行运算能力,将(2)和(3)的运算工作交给GPU来做,可将能实时绘制的粒子数从数万级提升到百万级。

2 算法思想

2.1 雨雪粒子的生成

雨雪粒子的初始位置由随机函数随机生成。在传统算法中,粒子的初始位置在世界坐标系下生成,这导致了一部分粒子在可视范围外,而系统在进行雨雪模拟的过程中,对于这部分粒子依然要进行正常的属性更新,从而造成了很大的系统开销浪费。本文在视点坐标系中生成粒子,以保证产生的粒子都是可见的。同时,将粒子的位置控制在视点前的一个立方体区域中,该立方体相对于视点的移动进行相应的移动,这使得所有的雨雪粒子始终在可观察范围内,最大限度地提高了粒子的使用效率,避免了系统资源的浪费。

2.2 消亡粒子的处理

在本文的基于GPU的雨雪模拟中,将雨雪粒子的消亡处理和更新操作从CPU移动到了GPU上,即由CPU负责新粒子的生成,GPU负责粒子的整个生命周期的控制操作,包括处理消亡粒子。在传统的粒子系统中,删除满足消亡条件的粒子,再产生新的粒子。而要在GPU中进行消亡粒子的删除和新粒子的生成操作就必须在GPU中维护一个动态的数据结构,这对于当前的GPU来说,无疑是一个很大的开销。本文通过赋予消亡粒子一个新的属性值的方式进行粒子的重复利用,既 “删除”了消亡粒子,生成了新粒子,也避免了在GPU中维护一个动态数据结构的工作,在很大程度上降低了GPU的开销,提高了系统的绘制效率。

2.3 雨雪粒子的位置更新

在一些雨雪模拟系统中,雨雪的运动由粒子的最初速度和风速在时间上的函数决定[14],即粒子速度和风速恒定不变。这种计算方法简单,但粒子的运动过于规则,不能很好地反应现实中风对粒子的影响。因为在现实中,风速并非恒定不变,其速度大小和方向随时间会有所变化。为了反应现实中外界环境的不稳定性,本文通过缓存每帧粒子属性的方式进行雨雪粒子的动态更新,即将每一帧的雨雪粒子位置保存在纹理中,以备下一帧的使用。在每帧的绘制中,GPU通过提取纹理数据得到上一帧的粒子位置数据,并根据当前帧的环境参数,如风速等,计算粒子在当前帧的位置。每帧雨雪粒子的更新都基于上一帧粒子的位置,可以满足风速的实时变化,增强了雨雪粒子运动轨迹的真实性。

2.4 雨雪粒子的扩展

雨雪粒子在逻辑上只是一个点,通过对各个点的更新来实现对雨雪粒子的更新。但绘制时,为了增强雨雪粒子的可视性,将各粒子点扩展为小矩形作为粒子,并对每个正方形进行雨雪图片的纹理映射。本文利用几何着色器(geometry shader)来完成雨雪粒子的扩展。即在顶点着色器中(vertex shader)对表示各个雨雪粒子的点进行粒子属性的更新计算,将更新后的点传入几何着色器,由几何着色器负责将粒子点扩展为矩形,最后进入像素着色器(fragment shader)完成绘制。

2.5 雨雪粒子的纹理映射

本文采用视线追踪技术(bill Boarding)[15]使雨雪粒子的纹理映射平面始终与视线垂直,从而到达了三维效果。同时,本文采用多张雪花形状纹理对雪粒子进行随机贴图,使系统中雪粒子的形状在一定程度上反应了现实中雪花形状的多样性和随机性,增强了雪粒子的真实性。而雨在现实中的形状相对单一,且在下落过程中大都呈线性,本文只采用了一张线状的雨滴纹理。

3 系统实现

3.1 雨雪粒子的生成

传统雨雪粒子的生成在世界坐标系中完成,使很多粒子不在可视范围内,造成了系统资源的浪费。本文直接在视点空间坐标系中生成粒子,即在使用随机函数生成粒子初始位置时,将x,y,z坐标值限定在 [0,1]范围内。同时,将生成的粒子放置在视点前的一个立方体区域内,使生成的雨雪粒子始终在视点前可视范围内。如图1所示。

在该过程中,粒子的创建由CPU完成,且这也是本系统中CPU唯一参与的工作。CPU将生成的初始粒子传入GPU,由GPU负责粒子属性的更新和绘制工作。

图1 粒子生成区域

3.2 雨雪粒子位置的更新

由于本文雨雪的模拟限定在视点前的一个立方体区域内,故雨雪粒子的位置由两部分决定,包括物理模型中雨雪粒子的位置和立方体区域相对于视点的位置。在物理模型中,雨雪粒子的受力如图2所示。

图2 粒子受力分析

其中,Fg表示雨雪粒子受到的重力,Ff表示雨雪粒子受到的空气浮力,Fwind表示雨雪粒子受到的风力。为了简化模型,本文将粒子受到的空气阻力和风力的影响合并,统一作为阻力对粒子运动的影响。由牛顿力学原理,粒子的速度方程如式(1)所示

式中:V1——当前帧的速度,Vo——上一帧的速度,V距——当前帧的风力和空气浮力对速度的总影响。Δt——两帧间的间隔时间。由于值很小,本文将Δt时间内粒子的运动看成速度为的匀速运动,则物理模型中粒子的位置方程如式(2)所示

式中:P1——粒 子 当 前 帧 的 位 置,Po——粒 子 上 一 帧的位置。

本文将雨雪粒子的运动限定在视点前的一个立方体区域中,当雨雪粒子的位置超出立方体区域时,雨雪粒子回到其在立方体区域中的初始位置,从而实现了粒子的重复利用。

3.3 雨雪粒子的扩展

在雨雪粒子的属性更新阶段,粒子被作为一个点进行更新计算,而在粒子的绘制阶段,粒子被扩展为一个矩形,以对其进行纹理贴图,增强雨雪粒子的真实性。本文采用顶点着色器和几何着色器配合使用的方式解决这一问题。在顶点着色器中进行点粒子的更新计算,并将计算得到的点的新位置传入几何着色器,由几何着色器基于点的新位置计算矩形的另外3个点位置,将一个点扩展为一个矩形。

3.4 雨雪粒子的纹理映射

在雨雪粒子的绘制阶段,本文采用视线追踪技术使粒子矩形始终面向用户。同时,对粒子矩形进行纹理贴图。为了提高雪粒子的真实性,本文采用了多张雪花纹理,在粒子的生成阶段随机决定粒子对应的雪花纹理,从而实现了三维场景中雪花形状的多样性和随机性。本文采用的雪花纹里如图3所示。而对于现实中的雨来说,下雨时,空中的雨呈线条状,其形状相对单一,本文对所有雨粒子采用同一张线条状的雨滴纹理,如图4所示。

图3 雪花形状纹理

图4 雨线纹理

4 实验结果

本文方法实现硬件环境为:Intel(R)Core(TM)2 Duo CPU E7500 2.93GHz处理器,2G内存,NVIDIA Ge-Force GTX 260显卡,显卡显存881MB,操作系统为 Windows 7SP1,开发工具为 VisualStudio2008与 OpenScene-Graph2.8.4,运行场景为首都机场三维模型在1500×1000的大小绘制。获得实验数据见表1。

表1 实验数据

从表1可以看出,本文的算法效率远远超过了基于CPU的粒子系统,且较传统GPU的粒子系统也有明显的优势。程序运行截图如图5所示。

图5 大规模场景雨雪实时仿真

5 结束语

本文在视点前的立方体区域内生成并绘制粒子且重复利用消亡粒子,使生成的粒子总是可见且有效,充分利用了粒子资源,最大限度地降低了系统资源的浪费。通过缓存每帧的粒子属性,使每帧粒子属性的更新都基于上一帧的粒子属性,更真实地模拟了雨雪粒子的运动规律。同时,本文通过顶点着色器进行粒子属性的更新,通过几何着色器将粒子扩展为矩形,充分利用了GPU强大的并行计算能力,使绘制速度得到了很大的提高。由于本文的粒子生产和绘制都在视点前的立方体区域内生成,视点运动时,立方体区域进行相应的运动,解决了文等人[12]的算法在视点运动时效果不真实的问题。

[1]HU Zhenghua.Rain rendering based on programmable GPU[D].Hangzhou:Zhejiang University,2010(in Chinese).[胡振华,基于可编程GPU的雨天特效绘制 [D].杭州:浙江大学硕士学位论文,2010.]

[2]DAI Xi.The implementation of real-time cloud rendring technology based on GPU [D].Chengdu:University of Electronic Science and Technology of China,2010(in Chinese).[戴玺.基于GPU的实时云景渲染技术的实现 [D].成都:电子科技大学硕士学位论文,2009.]

[3]Lutz K.Building a million particle system [C].Game Developers Conference,2004.

[4]WANG N,WADE B.Rendering falling rain and snow [C].ACM Siggraph Sketches,2004.

[5]LUO Yong,LIU Jianguo.The design of object oriented universal particle system and its implementation in Fire simulation[J].Science Technology and Engineering2008,8(15):4174-4178(in Chinese).[罗勇,刘建国.面向对象的通用粒子系统设计及其在火焰模拟中的应用 [J].科学技术与工程,2008,8(15):4174-4178.]

[6]LUO Weijia,DU Jinkang,XIE shunping.The real-time rain simulation based on particle system [J].Journal of Image and Graphics,2004,9(4):495-500(in Chinese).[罗维佳,都金康,谢顺平.基于粒子系统的三维场地降雨实时模拟 [J].中国图像图形学报,2004,9(4):495-500.]

[7]WANG Hongwei,LIU Yue,WANG Yongtian.The design of object oriented universal particle system [J].Journal of System Simulation,2006,18(S1):46-51(in Chinese).[王宏炜,刘越,王涌天.面向对象的通用粒子系统设计 [J].系统仿真学报,2006,18(S1):46-51.]

[8]YANG Bing,LU Min.The modeling technology of particle system based on scenery features [J].Application Research of Computers,2005,22(5):20-22(in Chinese).[杨 冰,鲁敏.基于景物特征的粒子系统建模技术 [J].计算机应用研究,2005,22(5):20-22.]

[9]Kolb A,Latta L.Hardware-based simulation and collision detection for large particle systems [C].Proceedings of the ACM SIGGRAPH/EUROGRAPHICS Conference on Graphics Hardware,2004.

[10]HAN Ruibo,DAI Shuling.The particle system with adjustable parameters and its implementation in flight simulation [J].Journal of System Simulation,2006,18(8):2296-2299(in Chinese).[韩瑞波,戴树岭.可调参数的粒子系统及其在飞行仿真中的应用[J].系统仿真学报,2006,18(8):2296-2299.]

[11]HE Hongyun,SU Hu.The rain and snow simulation in visual simulation of train operation [J].Journal of Southwest Jiaotong University,2008,43(5):610-615(in Chinese).[何鸿云,苏虎.列车运行视景仿真中雨雪的模拟 [J].西南交通大学学报,2008,43(5):610-615.]

[12]WANG Shunling,LI Xueqi,WANG Shanbing.The real-time snow model in virtual scene [J].Computer Technology and Development,2006,16(3):152-157(in Chinese).[王 顺领,李学庆,王善斌,等.虚拟场景中的实时降雪模型 [J].计算机技术与发展,2006,16(3):152-157.]

[13]WU Yingxia.The design and implementation of particle effects system based on OpenGL [D].Chengdu:University of Electronic Science and Technology of China,2009(in Chinese).[吴银霞.基于OpenGL的3D粒子特效系统设计与实现[D].成都:电子科技大学硕士学位论文,2009.]

[14]WEN Zhizhong,LIU Zhifang,LI Gang,et al.Realtime simulation of rain and snow in large-scale scene based on GPU particle system [J].Journal of Computer Applications,2010,30(5):1398-1401(in Chinese).[文治中,刘直芳,李纲,等.基于GPU粒子系统的大规模场景高效雨雪实时模拟 [J].计算机应用,2010,30(5):1398-1401.]

[15]WANG Wei,XING Guodong.Research of real-time fire rending method based on particle system [J].Microcomputer Information,2008,24(13):1-5(in Chinese).[王巍,辛国栋.基于粒子系统的实时火焰绘制方法研究 [J].微计算机信息,2008,24(13):1-5.]

猜你喜欢
粒子系统雨雪立方体
悲伤的事就不说了
利用GPU加速的粒子系统全球流场可视化系统设计与实现
新闺怨
The relationship between functional fabrics and fashion trends
内克尔立方体里的瓢虫
UE 4粒子系统与外部数据通信研究
图形前线
雨雪天气城际站防止旅客摔滑问题探讨
立方体星交会对接和空间飞行演示
折纸