第30卷第5期 2010年5月 计算机应用 Journal of Computer Applications V0l_3O No.5 May 2010 文章编号:1001—9081(2010)05—1398—04 基于GPU粒子系统的大规模场景高效雨雪实时模拟 文治中 ,刘直芳 ,李 纲 ,粱(wzz_381024@163.com) 威 (1.四川大学计算机学院,成都610065;2.四川大学视觉合成图形图像技术国防重点学科实验室,成都610065) 摘要:粒子系统实现的雨雪效果能有效增强三维场景的真实感,传统基于中央处理器(CPU)运算模拟的粒子系 统占用了大量CPU运算时间,难以达到实时模拟的要求。为此提出了一种基于图形处理器的(GPU)运算的粒子系统 来模拟的雨雪场景。该方法通过在GPU中重复使用消亡粒子在视点坐标系内生成新粒子,并在几何着色器中将粒子 的点坐标转换为矩形坐标,将CPU从复杂庞大的几何运算中解放出来,从而大幅增加了场景绘制的微粒数,使雨雪场 景模拟的实时性和逼真度得到增强。 关键词:图形处理器;粒子系统;视点坐标系;几何着色器;雨雪场景 中图分类号:TP391.9 文献标志码:A Realtime simulation of rain and snow in large-scale scene based on GPU particle system WEN Zhi.zhong ,LIU Zhi.fang 一,LI Gang 一,LIANG Wei (1.College of Computer Science,Swhnan University,Chengdu S ̄huan 610065,China; 2.Key Laboratory of Fundamental Synthetic Vision Graphics and Image for National Defense,Sichuan University,Chengdu Sichuan 610065,China) Abstract:Three—dimensional effect of rain and snow scenery realized by means of particle system can be greatly enhanced.Traditionally,the particle system based on CPU will occupy a considerable amount of CPU operation time SO that it is hard to satisfy the need of reahime simulation.To resolve this problem,a particle system based on GPU was put forward to simulate rain and snow scenery.In this system,dead time particles were reused to form new particles in the eye coordinates. In the meantime,point position of particles was transformed to rectangle position in the Geometry Shader,SO as to relieve CPU from the complex voluminous geometry operation.The number of particles in the scenery was largely increased,and thus enhancing the reahime effect and fidelity of the simulation. Key words:Graphic Processing Unit(GPU);particle system;view coordinate;geometry shader;rain and snow scene 0 引言 近年来图形处理器(Graphics Processing Unit,GPU)的并 模拟。 本文提出一种完全基于GPU的雨雪粒子模拟系统。由 GPU负责粒子运动状态的更新和绘制,而CPU只负责初始粒 子的创建。一旦粒子被创建,所有的运算和绘制全部在GPU 行及浮点计算能力、数据传输带宽得到迅猛提升,其运算能力 已大大超过CPU。许多以前无法在CPU上实时计算的算法, 目前在GPU已经可以实现。 中完成,从而大大降低了CPU和系统总线的负荷,让CPU可 以空闲出来做其他仿真运算。同时,本文提出将粒子模拟放 在视点坐标系中进行,这样可以处理任意大规模场景下的雨 雪模拟。同时为了进一步提高GPU的模拟效率,使用了现代 Reeves在1983年所提出使用粒子系统来模拟雨、雪、烟、 火焰、爆炸等由不规则对象构成的实时系统…。雨雪现象的 模拟是粒子系统的一个典型应用。传统的雨雪粒子系统 。 都是通过CPU完成,粒子速度、位置等属性的更新都由CPU GPU所提供的几何着色器(Geomety Shader)来完成粒子的几 r何生成。 负责运算,占用大量CPU时间和系统资源。CPU完成计算 后,还需通过系统总线将粒子数据传输到GPU进行绘制,大 1 相关背景 本文提出基于GPU粒子系统的雨雪绘制算法,充分运用 大增加了总线传输的压力。传统方法中CPU的计算能力,系 统总线的带宽都是限制粒子系统效率的瓶颈,系统只能实时 模拟数万个粒子。 利用GPU强大的并行浮点运算能力,通过GPU可编程 GPU的可编程性和强大的运算能力,并通过始终将雨雪粒子 限制在视点坐标系,使得本算法特别适合于大规模场景的雨 雪绘制。为此,先简要介绍粒子系统、GPU的可编程技术和 Geometyr Shader几何生成技术。 1.1粒子系统模型 管线将粒子速度和位置更新等耗时的运算从CPU转移到 GPU,由GPU完成整个粒子系统的模拟和绘制,从而将三维 场景可生成的粒子数目提升至百万级 。 。张汉清等人 利 用GPU强大的浮点运算能力,可实现一百万个粒子的实时 收稿日期:2009—10—15;修回日期:2009—12—18。 对于基于粒子系统的雨雪绘制算法来说,每个粒子均包 含出现的位置、生存时问、速度等属性。粒子系统通过对上述 基金项目:国家863计划项目(2007AA01Z328;2009AA01Z332);国家自然科学基金资助项目(60832011)。 作者简介:文治中(1983一),男(朝鲜族),四川西昌人,硕士研究生,主要研究方向:虚拟现实、计算机仿真; 刘直芳(1974一),女,四川达 州人,副研究员,博士,主要研究方向:图像处理、视频监控、虚拟现实; 李纲(1978一),男,四川南充人,博士研究生,主要研究方向:三维绘 制、虚拟现实系统;粱威(1986一),女,四川大邑人,硕士研究生,主要研究方向:图像处理、视频监控。 第5期 文治中等:基于GPU粒子系统的大规模场景高效雨雪实时模拟 1399 的粒子属性进行实时运算更新来模拟雨、雪的运动。粒子系 统在每帧都需要进行如下运算: 1)产生新粒子并生成粒子的初始属性; 2)删除超过生存时间或符合消亡条件的粒子; 3)根据运动规律计算粒子的速度、位置等属性; 4)绘制粒子。 传统的粒子系统将步骤1)~3)交由CPU运算,导致 CPU负荷过大,即使在CPU没有其他负荷的条件下,其最大 而目前在GPU中维护一个动态数据结构的开销是相当大的, 从而限制了GPU粒子系统的效率。本文提出一种新的粒子 生命周期控制方法,重复利用消亡的粒子来生成新粒子,这便 使得初始粒子一旦生成后,其生命周期为无限长,避免了使用 动态数据结构来维护新粒子的生成和旧粒子的消亡。 3)粒子在逻辑上只是一个点,对粒子的属性的更新都只 需要对这个点进行即可。但在绘制的时候,粒子是由一个矩 形来表示。以前基于GPU的雨雪粒子系统在处理这种表达 可以模拟的粒子数目也只能达到数万。 1.2 GPU的可编程技术 在GPU中,渲染管线负责将由内存中读取的几何对象 (点、线和多边形)进行一系列的矩阵变换,最后将三维的几 何对象绘制至二维的图像输出端。绘制过程如图1所示。 图1 固定管线渲染过程 以前的渲染管线不具备可编程性,管线中所有的功能都 被固化到硬件上,用户只能通过一些简单的函数打开或关闭 渲染管线中的某个功能(例如,打开或关闭 混合)。而现代 的图形管线具备了很强的可编程性,用户可完全控制渲染管 线中的几个模块。渲染管线的可编程性极大扩展了GPU的 功能,使得将原来由CPU承担的运算迁移到GPU成为可能。 1.3 Geometry Shader几何生成技术 Geometyr Shader是现代GPU对渲染管线的可编程性的 又一次扩展。位于Vertex Shader和Fragment Shader之问的 Geometry Shader,可在输入顶点的基础上生成新的顶点甚至 新的图元,大大扩展了GPU的功能。 由于Vertex Shader每一次运行只能处理一个顶点数据, 并且每次只能输出一个顶点的结果。在绘制大规模场景时, 几何图形的绘制任务量非常庞大,如果仅仅依靠Vertex Shader来完成效率较低。Geometyr Shade能根据顶点的信息 来批量地处理几何图形,即可对Vertex Shader输出的顶点数 据进行函数处理,快速批量地产生出新的多边形的顶点数据, 从而将CPU从复杂庞大的几何运算中解放出来。大爆炸、粒 子效果、瀑布流水等复杂又关联的场景都可以用Geometyr Shader很逼真地表现出来。 2基于GPU粒子系统的雨雪绘制 2.1算法概要 本文提出一个适合于大规模场景的基于GPU的雨雪粒 子系统,相比已有的基于GPU的粒子系统来说,本文系统的 特点如下所示。 1)传统的粒子系统生成的粒子都生成在世界坐标系中。 这种方法在于经过投影变换后,最后落在视域内的粒子只是 整个场景中粒子的一小部分。这样即使整个粒子系统可以模 拟数百万的粒子,但对用户可见的粒子可能只有数万个。同 时,对于用户不可见的粒子,系统仍然需要在每帧对其属性进 行计算和更新,从而大大浪费了CPU/GPU的资源。本文提 出将粒子的生成限制在视点坐标系内,凡是生成的粒子都是 可见的粒子,从而大大节约了CPU/GPU的计算资源。 2)目前基于GPU的粒子系统只是简单的将1.1节中描 述的计算由CPU移植到GPU中,GPU需要负责粒子整个生 命周期的控制,即要负责新粒子的生成和消亡粒子的删除。 方式的不统一时,均采用矩形来表达粒子以适应绘制需要。 这种方法的缺点在于把一个逻辑上只需要一个点表达的粒子 使用矩形的四个顶点来表示,使得在更新粒子的属性时对矩 形的四个顶点都要进行重复的运算,从而大大增加了GPU的 计算量。本文通过使用Geometry Shader来解决粒子表达不 统一这个问题。粒子在进入Vertex Shader阶段使用点的表示 方法,在Vertex Shader中完成粒子属性的更新计算;再通过 Geometry Shader来将粒子的点表达转换为矩形表达,最后进 入Fragment Shader来完成绘制。 2.2粒子的生成 透视投影决定了观察者所能观察到的视野有限。传统的 基于粒子系统在世界坐标系中生成和更新粒子,造成了极大 的资源浪费。本文将粒子的生成和运动放在视点坐标系内, 使粒子系统中所有的粒子始终可见,避免粒子在不可见区域 内生成和更新所造成的资源浪费。具体实现思想如下。 1)在当前裁剪空间中随机地生成粒子:裁剪空间中任意 一点的坐标可以表示为( ,Y, ,1),其中 ,Y∈[一1,1], ∈ [0,1]。因此只需要在[一1,1]中随机生成 ,Y,在[0,1]中随 机生成z,即可构成一个当前裁剪空间中的一个随机粒子。 2)将裁剪空间中随机生成的粒子( ,Y,z,1)通过如下方 程反投影回视点坐标系( Y , ,1): :M 其中 为透视投影矩阵的逆矩阵。 粒子首先是在裁剪空间中生成再逆投影回视点坐标系 中,从而保证了生成的粒子在当前视点的投影参数下是可见 的。 粒子的初始位置等属性将作为输入传人GPU进行模拟 和绘制。需要注意的是初始粒子的创建是本文实现的粒子系 统中唯一由CPU参与的运算,一旦初始粒子被传人GPU, CPU将不负责处理任何与粒子更新、绘制的相关工作。 2.3粒子运动的更新 从雨雪粒子的物理运动规律来说,当粒子接近地面时,在 垂直方向将以近似匀速运动的方式下落,因此,可近似地认为 粒子在垂直方向是以匀速下落的方式运动。同时,粒子在下 落过程中,会受到风向(可能随时变化)的影响而偏离垂直下 落的方向。本文将风对粒子的影响看作一个水平方向的受 力。因此,粒子的运动可以看作是由一个垂直方向的匀速运 动和水平方向的变速运动所构成。综上所述,粒子在t 时刻 的位置P 可以由t 时刻的位置P 求得: P :P —l+( d…+ k 。 d)(t 一t 一1) (2) 其中 是粒子在垂直方向的下落速度, …k 是在k时刻时风 在水平方向的速度。 式(2)中当前时刻的粒子位置是根据上一个时刻的粒子 计算机应用 位置计算得到的,这就要求在整个粒子模拟过程中保存上一 个时刻粒子的位置,这个在CPU中非常容易实现的功能,但 在GPU中却需要使用到Render—To—Texture,Pixel Buffer等技 第3O卷 决这个表达不统一的问题。在Vertex Shader中,主要负责粒 子的更新运行,即根据式(6)来进行计算,这时将粒子作为一 个点来处理。位置更新后的粒子将进入Geometyr Shader,在 这里完成粒子的几何生成,即将一个点扩展为一个矩形以便 完成绘制。 粒子由点表达向矩形表达的转换也是在视点坐标系下完 成的,以保证生成的粒子矩形始终朝向用户。本文定义如下 术。为了减轻GPU的负荷,本文使用了一种近似的方法来更 新粒子的位置,即只根据粒子的初始位置和当前时刻的风速: P^=P0+( d…+ ki d)( 一t0) (3) 使用式(3)避免了对上一个时刻粒子位置的保存,其输 入固定是粒子的初始位置这个静态的数据,其实现效率大大 高于式(2)。在实际应用中,由于大量雨雪粒子的存在以及 两个互相垂直的向量来构成粒子对应的矩形所在的平面: 不断变化的风速的影响,用户觉察不到式(3)带来的误差。 2.4粒子生命周期的控制 本文提出一种新的粒子生命周期控制方法,其基本思想 是对消亡的粒子进行回收利用,即根据消亡的粒子生成一个 新粒子,避免了在GPU上维护一个动态数据结构的开销。 从式(2)和(3)中都可看出,一个粒子运动一段时间后, 即t 足够大时,粒子都会运动至当前的视锥体以外,由一个可 见粒子变成不可见粒子。传统的粒子系统中,认为这个粒子 消亡而需从粒子系统中删除。在本文中不删除这样的粒子, 而是将这个粒子重新更新位置属性,将其变为一个可见粒子 而重新开始一个新的生命周期。 具体算法实现思想为:由于粒子的运动由两个互不干扰 的垂直和水平方向运动构成,而垂直方向粒子是匀速运动,因 此当一个粒子的初始位置产生后,便可以在垂直方向计算得 到如下两个时间(如图2所示)。 1)t :粒子在当前深度下,由视锥体的最顶端下落到最底 垂 +一+ 端所花的时间,即图2中粒子从Top位置p 。。下落到Bottom位 置Pbott 的时问: : (4) d… 2)t :粒子从P 。 下落到初始位置P, 所花的时间: f : 三 (5) Vdow t 和t 都在粒子生成时由CPU负责计算,然后和粒子的 初始位置一起作为输入传递进GPU,在其后的整个模拟过程 中不需要进行改变。 将t 和t 和式(3)相结合,就可以得到带有粒子重复利 用的粒子位置更新方程: 一 ( + )[froc( ) ] (6) 其中frac(a)函数是取n的小数部分。通过式(6)可以看到, 当粒子运动到 位置时,即t 一t。:t 一t 时,在垂直方向 粒子将又回到P 的位置,这可以看成是粒子在P 。 位置消 亡的一刹那,又被重新生成在P 位置。通过如上的机制,就 实现了消亡粒子的再利用。从式(6)中也可以看到,粒子在整 个模拟过程中的位置由粒子的初始位置就可以计算得到。本 文提出的算法在初始粒子生成后,就可以交由GPU完成所有 的模拟,避免了使用高耗费的动态数据结构删除粒子。 2.5粒子的几何生成 如上所述,粒子在运动更新和绘制时采用的是两种不同 的表达方式。在更新阶段,粒子是使用一个点来进行表示,而 在绘制时,粒子则被表示为一个矩形(不一定是正方形,否则 直接使用point sprite即可完成表达方式的统一)。 本文通过分别使用Vertex Shader和Geometry Shader来解 VI= , : ×(0,0,1) 粒子对应的矩形的四个顶点就可以根据这两个互相垂直 的向量计算得到。例如,对于矩形的左上角点: P 。 :P 一( S + Sy) 其中S ,S 是由用户定义的粒子的大小。用相同的方法可以 生成粒子的其他3个顶点。 l /p // // 擎・ ’粒子初始位量 运 视点 \\ 明 r方 向 —Z 、、 I  ̄otto 图2粒子的重复利用 3 实验结果 本文方法实验硬件环境为:Intel Pentium Dual—Core E2180 2.0 GHz处理器,4 GB内存,NVIDIA GTX260显卡,显卡显存 896 MB,操作系统为Windows XP SP3,开发工具为 VisualStudio2008与OpenSceneGraph 2.8.2,运行场景为首都 机场三维场景在2500×1 600的大小绘制。获得实验数据如 表1。 表1 三维雨雪场景渲染性能比较 从表1数据可知,本文的算法效率大幅领先于基于CPU 的粒子系统,基于CPU的粒子系统仅能有效渲染(帧率为 15 f0s)8万左右的粒子,而本文算法也明显优于传统的基于 GPU的粒子系统,该算法可在大规模场景内渲染300万左右 的粒子。程序运行截图如图3所示。 第5期 文治中等:基于GPU粒子系统的大规模场景高效雨雪实时模拟 l401 对大规模场景的实时模拟效率显著提升,达到了较好的效果。 本文的方法在视点移动时粒子的运动未考虑视点运动带来的 影响,导致的模拟的效果略显不真实,今后还需进一步改进。 参考文献: [I】 REEVES W T.Particle systems—a technique for modeling a class of (a)雨效果 (b)雪效果 fuzzy objects【j].Computer Graphics,1983,17(3):359—376. 谢剑斌,郝建新,蔡宣平,等.基于粒子系统的雨点和雪花降落 模拟生成[J].中国图象图形学报,1999,4(9):734—738. 罗维佳,都金康,谢顺平.基于粒子系统的三维场地降雨实时模 拟【J].中国图象图形学报,2004,9(4):495—500. van der BURG J.Building an advanced particle system[J].Game Developer Magazine,2000,3(2):44—50. (c)雪效果近景 李建明,吴云龙,何荣盛,等.基于粒子系统和GPU加速的喷泉 实时仿真[J】.系统仿真学报,2009,21(10):3139—3141. LINDHOLM E.A user—programmable vertex engine【C】//Proceed— ings of the 28th Annual Conference on Computer Graphics and Inter- active Techniques.New York:ACM,2001:149—158. I.ATTA L.Game developers conference:Building a million particle 图3 大规模场景实时仿真截图 4 结语 本文在GPU中重复使用消亡粒子在视点坐标系内生成 _ 寸新粒子,通过Geometry Shader将粒子的点坐标转换为矩形坐 标进行绘制,提高了GPU运算效率,使之能快速批量地绘制 出多边形,进一步将CPU从复杂庞大的几何运算中解放出来, (上接第1332页) system[C]//Proceedings of the Game Developers Conference.San Francisco:Think Services Game Group.2004:54—6O. 为优先权度量,使得面片的优先权由其确定性度量,而不依赖 原方法的时间复杂度仅在系数上有所区别,因此本文用实验 于其局部信息。同时算法中混淆系数的计算,使得目标面片 的优先权计算与匹配相结合,算法整体框架不同于类似算法, 而总计算量增加的比例不大。实验结果证明了此方法的合理 性,且视觉效果更自然,提高了修复图像的质量。由于算法固 有的贪婪性,以及采样填充的纹理合成方法本身的特点,该类 方法对于遮挡或缺乏自相似性的复杂自然图像的修补仍然遇 到困难,还需要更多的先验知识的约束或者图像结构的其他 描述手段。 参考文献: 『1] CRIMINISI A,PREZ P,TOYAMA K.Region filling and object re- moval by exemplar—based image inpainting[J】.IEEE Transactions on Image Processing,2004,13(9):1200—1212. mage repairing:Robust image synthesis by a— [2] JIA J,TANG C—K.I数据进一步说明,如表1所示,其中运行时间以分钟为单位。 对比表1中本文方法与Criminisi算法的运行时间,可算出图 1的C值为0.89。在多次实验中发现C值的范围大约为 0.8-4).9,所以本文算法的总计算量比Criminisi算法大约多 20%~30%,而不是二倍。该实验在PIV 2.0 GHz CPU,2 GB 内存的PC机上运行,采用c#作为开发环境。 daptive ND tensor voting[C]//Proceedings of Conference on Com— (a)测试图像 (b)Criminisi算法修复结果 puter Vision and Pattern Recognition.Washington,DC:IEEE Press,2003:643—650. DRORI I,COHEN-OR D,YESHURUN H.Fragment—based image completion[J].ACM Transactions on Graphics,2003,22(3):303 —312. SUN JIAN,YUAN LU,JIA JIAYA,et a1.Image completion with structure propagation【C]//ACM SIGGRAPH 2005:International Conference on Computer Graphics and Interactive Techniques.New (c)Hays算法修复结果 (d)本文算法修复结果 York:ACM Press.2005:86l一868. 图2图像2的修复效果比较 表1 Criminisi算法与本文方法运行时间比较 HAYS J,EFROS A A.Scene completion using millions of photo- raphs[C]//ACM SIGGRAPH 2007:Intergnational Conference on Computer Graphics and Interactive Techniques.New York:ACM Press,2007:4. 图像像素个数 图1 800×600 图2 800×600 1 260 8155 运 斋高 i 1 541 10455 KOMODAKIS N.Image completion using global optimization【C]// Proceedings of the 2006 IEEE Computer Society Conference on Com- puter Vision and Pattern Recognition.Washington,DC:IEEE Com— puter Society,2006:442—452. 4 结语 基于以Criminisi算法为代表的算法的优势与不足,本文 掘弃使用轮廓点附近的信息定义优先权的方法,提出一种新 的思路,以源区域中“有且只有一个”面片与目标面片相似作 ZHANG YUNJUN,XIAO JIANGJIAN,SHAH M.Region comple・ tion in a single image【C/OL]//EUROGRAPHICS 2004.Greno— ble,France:[S.n.],2004【2009一O8—22】.http://eiteseerx. ist.psu.edu/viewdoc/download?doi=10.1.1.9.4626&rep: repl&type:pdf.