CN102147928B - 一种基于粒子系统的火焰模拟加速改进算法 - Google Patents
一种基于粒子系统的火焰模拟加速改进算法 Download PDFInfo
- Publication number
- CN102147928B CN102147928B CN2011100631861A CN201110063186A CN102147928B CN 102147928 B CN102147928 B CN 102147928B CN 2011100631861 A CN2011100631861 A CN 2011100631861A CN 201110063186 A CN201110063186 A CN 201110063186A CN 102147928 B CN102147928 B CN 102147928B
- Authority
- CN
- China
- Prior art keywords
- particle
- track
- color
- attribute
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Processing Or Creating Images (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种基于粒子系统的火焰模拟加速改进算法,包括如下步骤:(1)预处理生成轨迹来记录粒子的加速度、颜色和生命值属性;(2)粒子发射器生成粒子;(3)为每个粒子分配一条轨迹;(4)从轨迹获得粒子的以上三种属性并更新粒子其他属性,若粒子达到轨迹末帧则转第5步;渲染粒子;更新轨迹信息,若轨迹生命为0则转步骤(6);本步骤循环直至系统退出;(5)重新生成粒子并分配轨迹;(6)重新计算轨迹并重新生成该轨迹上所有粒子。本发明与传统粒子系统的方法以及轨迹法相比,其优点是一方面大幅降低了传统方法的计算量,起到了加速的作用;另一方面克服了轨迹法渲染的失真问题,并能支持大规模表面燃烧的渲染,起到了改进的作用。
Description
技术领域
本发明涉及一种基于粒子系统的火焰模拟加速改进算法。
背景技术
在计算机图形学中,如何渲染模糊物体一直是一个研究的热点。所谓的模糊物体(Fuzzy Object)是指像火,云之类的没有固定边界的物体。这类物体是自然的重要组成部分,因而在游戏,电影,动画以及虚拟现实技术中都占据了重要的地位。这类物体在真实感图形的研究领域中一直是一个难题。传统的计算机模拟手段通常是通过三角曲面片来逼近自然物体的表面。然而在模拟模糊边界的物体时,这种方法就不适用了。边界的复杂性和动态性使得三角片的构造异常复杂,并且在更新时需要大量的计算,这些都不符合实时性的要求。因此人们开始寻求新的模拟模糊物体的方式。
现有的模拟方法主要有两种,一种是基于纹理模型的,比如Perlin噪声算法(Perlin Noise algorithm),这种方式主要是通过计算对纹理映射进行扰动,以产生更加接近自然的纹理。另一种是基于物理模型的,也就是粒子系统。粒子系统是由William Reeves在1982年提出的。他详细描述了粒子系统的概念和粒子系统的构架方式。在之后的近30年间,他的粒子系统模型一直是现代粒子系统的基础。Reeves的粒子系统可以概述为以下模型:每个粒子的属性都可以表示为一个均值和一个随机值的加和。均值表现出粒子的基本形态,随机值在渲染的时候生成,以产生模糊边界的效果。粒子具有生命周期。生命周期内,每一帧可通过加速度计算粒子的速度,进而计算粒子的位移。粒子的颜色由初始颜色与末端颜色以粒子生命为参数插值得到。当粒子生命结束时,系统将重新给粒子赋予新的生命和属性。
在现代的粒子系统中,主要有以下两个新的结构:1、粒子发射器。粒子发射器主要是由于决定粒子出生时的初始速度和位移。这样使得用户或开发者对 粒子的形态有更好的控制。另外,粒子发射器可以很好的模拟燃烧物的几何形态,如圆柱,球等。这样可以处理更多不同类型的火焰。2、作用力管理器。作用力是用于决定每一帧中粒子的加速度。粒子系统中的作用力主要分为两种:常规作用力(如风场,涡旋力,拉力等)和随机作用力(如气流等)。通过常规作用力可以很好的塑造火焰的外观,随机作用力则用于增强火焰的动态和自然感。
在火焰模拟中,最影响效率的主要是两个步骤:计算和渲染。对于渲染步骤通常的做法是采用GPU(Graphic Processing Unit,图形处理器)程序设计,将需要绘制的数据直接写入显卡的缓存中。在计算上,刘宁等在第31届IEEE国际计算机软件与应用年会上提出了一种轨迹法来减少粒子系统的计算量(可参见文献Ning Liu,Rong Li,Zhenyu Yang,Hongyang Chao.An OptimizationMethod for Real-Time Natural Phenomena Simulation on WinCE Platform.31stAnnual IEEE International Computer Software and Applications Conference,2007,Vol.2,pp.57-62)。对于大规模渲染而言,假定需要渲染m个粒子,轨迹法先挑出n个粒子进行预处理,其中n<<m。预处理的过程就是让这n个粒子在给定的粒子系统中经历一次生命周期,并且将每一帧这些粒子的属性都记录下来。假定一个粒子总共有k帧的话,这k帧就构成了这个例子的一个轨迹。预处理结束后粒子系统就有了n条轨迹。之后再进行真正的粒子数据的计算和渲染。粒子属性计算的方式如下:对于m个粒子,每个粒子出生时选定随机一条轨迹,之后每一帧都复制选定轨迹的下一帧的属性。当粒子到达轨迹的末端时,再重新选择一条轨迹开始进行新的一轮的计算,直到系统退出。
可以看到轨迹法极大的减少了粒子系统的计算量。事实上,每一帧的计算量仅仅是复制m个粒子属性结构所花的时间。但是,相应的这个方法付出的代价是火焰的真实感大大下降。由于大量的粒子只能沿较少的轨迹运动,而且轨迹时静态的,即在预处理阶段生成后就不再更新,因此火焰的自然性得不到保证。另外,对于大规模表面燃烧而言,当n个轨迹无法覆盖整个表面时这个方法是不适用的,因为粒子仅能选取n个固定的发射点。
发明内容
考虑到上述技术问题,本发明人开始寻找能够提高火焰模拟效率同时能不丢失真实感的方法。通过对粒子系统的分析,本发明人发现计算量最大的部分在于粒子的加速度,达到了约84%的计算量。而事实上越复杂的粒子系统在这部分的计算开销也越大。因此本发明人考虑对轨迹法进行改进。鉴于此,本发明提出了一种基于粒子系统的火焰模拟加速改进算法,它一方面保持了轨迹法所带来的计算上的高效性,另一方面它克服了轨迹法模拟火焰时出现的失真现象,同时它还能够适用于大规模表面燃烧的情况,拓广了轨迹法的适用范围。
本发明采用如下技术方案来实现:
一种基于粒子系统的火焰模拟加速改进算法,包括如下步骤:假定当前系统模拟的火焰需要n个粒子和m条轨迹;
步骤1:预处理
对n个粒子进行模拟计算,直到所有m个粒子都完成一整个生命周期,并且在模拟过程中记录下粒子每一帧的属性,从而形成轨迹,所述轨迹包括以下属性:加速度、颜色、生命值;模拟计算的具体操作包括:由作用力管理器生产下一帧的加速度,生命值=生命值-更新时间×系数,颜色=初始颜色+(最终颜色-初始颜色)×生命值;预处理后得到m条轨迹;
步骤2:生成粒子
由粒子发射器按照定义的规则随机产生n个粒子的初始位移和速度;
步骤3:分配粒子轨迹
对于生成的每一个粒子,为其选择一条轨迹;
步骤4:更新和渲染
(1)更新粒子属性:对于每个粒子,拷贝其所属轨迹中对应当前帧的属性作为粒子当前属性,即粒子加速度=轨迹加速度,粒子颜色=轨迹颜色,粒子生命值=轨迹生命值,然后更新粒子其他属性,若粒子已经到达轨迹的最后一帧,则进入步骤5;
(2)渲染粒子;
(3)更新轨迹生命值属性,即生命值=生命值-更新时间×系数,其中系数为步骤1中所述的系数,如果轨迹的生命小于0,进入步骤6;
(4)循环步骤4,直到系统退出;
步骤5:重新生成粒子
若有1个粒子完成了生命周期,则粒子发射器重新生成一个粒子,具体操作如步骤2;
步骤6:重新计算轨迹
若有1条轨迹完成了生命周期,则用1个粒子重新进行一次模拟计算,具体操作如步骤1,完成后得到一条新的轨迹,将新的轨迹的属性覆盖原有轨迹的属性,然后将原粒子链表中的粒子全部进行一次重新生成,具体操作如步骤4。
进一步的,在上述步骤2中,粒子的位移是依据选定的概率模型在发射器的表面或内部随机产生的,而粒子的速度则是依据发射方向和发射角形成的圆锥内随机选择发射方向。
在上述步骤3中,为一个粒子选择一条轨迹对应的具体操作如下:将该粒子的地址添加进这条轨迹的结构中的粒子链表里,同时在粒子自身的属性里添加上该轨迹的编号,并把当前帧数设为第一帧;在步骤5中,不再为该新生成的粒子分配新的轨迹,而是将旧粒子从原轨迹的粒子链表中删除,把新粒子添加进粒子链表中,同时在新粒子的属性中添加该轨迹的编号,并把当前帧数设为第一帧,然后返回步骤4。
在上述步骤4的更新粒子属性中,所述其他属性包括粒子速度、粒子位移和帧数,具体更新方式如下:粒子速度=粒子速度+粒子加速度×时间;粒子位移=粒子位移+粒子速度×时间;帧数=帧数+1。
在上述步骤4中的渲染粒子的具体方法如下:
使用VBO技术进行渲染,每个粒子的顶点数据分为三部分:正方形曲面片的顶点坐标,共4个三维数据;四个顶点的RGBA颜色值,共4个四维数据;四个顶点对应的纹理坐标,共4个二维数据;其中纹理坐标对于每个粒子在每一 时刻都是不变的,即从右上角顶点开始沿逆时针依次为:(1,1),(0,1),(1,0),(0,0);
使用VBO渲染的具体操作如下:
1)对顶点坐标数据和颜色数据,分别调用glBindBufferARB和glBufferDataARB函数将缓冲区和数据进行绑定,然后调用glMapBufferARB函数获得缓冲区的指针;
2)假定上一步中得到的顶点数据缓冲区指针为p,粒子的位置坐标为(x,y,z),粒子半径为r,则对第n个粒子数据的赋值如下:
p[4n].x=x+r;p[4n].y=y+r;p[4n].z=z;
p[4n+1].x=x-r;p[4n+1].y=y+r;p[4n+1].z=z;
p[4n+2].x=x-r;p[4n+2].y=y-r;p[4n+2].z=z;
p[4n+3].x=x+r;p[4n+3].y=y-r;p[4n+3].z=z;
假定上一步获得的颜色数据缓冲区指针为c,更新后粒子的颜色属性为(R,G,B),生命值为life,则对第n个粒子数据的赋值如下:
c[4n].R=c[4n+1].R=c[4n+2].R=c[4n+3].R=R;
c[4n].G=c[4n+1].G=c[4n+2].G=c[4n+3].G=G;
c[4n].B=c[4n+1].B=c[4n+2].B=c[4n+3].B=B;
c[4n].A=c[4n+1].A=c[4n+2].A=c[4n+3].A=life;
3)当全部的缓冲区的数据都被更新过后,调用glBindBufferARB和glUnmapBufferARB函数将顶点坐标数据和颜色数据从缓冲区刷新到显卡,然后调用glEnableClientState函数开启顶点坐标、颜色和纹理坐标的指针用于渲染,再依次调用glBindBufferARB函数和顶点坐标、颜色和纹理坐标对应的指针函数,将开启的指针指向相应的数据;
4)最后,调用glDrawArrays函数进行渲染,渲染结束后调用glDisableClientState函数来关闭顶点、颜色和纹理坐标指针。
下面,将本发明的火焰模拟加速改进算法与传统的方法以及轨迹法进行比较,比较分为两个方面。第一方面是系统效率,这里我们将使用FPS(Frame perSecond,每秒帧数)作为评价指标,FPS越高说明效率越高。测试使用计算机的刷新频率为60Hz,即FPS最高为60。我们分别使用三种方法对不同粒子数进行渲染并统计其FPS。对于轨迹法和本发明的火焰模拟加速改进算法,我们都选取1,000条轨迹,这样当粒子数为1,000时,三种方法是等价的。测试结果如下表所示:
粒子数 | 传统方法 | 轨迹法 | 本发明改进算法 |
1,000 | 59.52 FPS | 59.52 FPS | 59.52 FPS |
10,000 | 48.32 FPS | 59.52 FPS | 59.52 FPS |
50,000 | 9.47 FPS | 59.52 FPS | 59.52 FPS |
100,000 | 4.42 FPS | 29.76 FPS | 29.76 FPS |
200,000 | 1.92 FPS | 15.36 FPS | 14.88 FPS |
可见本发明改进算法在效率上基本保持了轨迹法的高效性,当粒子数为100,000时,FPS较之传统方法提高了6.73倍。
第二方面,比较三种方法所渲染的火焰的真实感。这里我们选择了两组有代表性的火焰,第一组是蜡烛火焰,这是一种小型的静态燃烧的火焰,粒子数为10,000,轨迹数为1,000。第二组是大型火圈,这是一种大规模表面燃烧,粒子数为100,000,轨迹数为1,000。测试结果图5所示。
可见本发明改进算法在火焰真实感上与传统方法接近,而较之轨迹有了大幅度的提高。同时本发明改进算法克服了轨迹法不能渲染大规模表面燃烧的问题。
综合以上两方面的测试,本发明改进算法综合了传统方法和轨迹法的优点,是一种即能够高效计算又能够真实渲染的火焰模拟加速改进算法。
附图说明
图1为本发明实施例的火焰模拟加速改进算法流程图;
图2为本发明实施例的典型数据结构示意图;
图3为本发明实施例所示用的纹理图;
图4为本发明实施例的作用力(涡旋和拖拽)表示图;
图5为采用本发明火焰模拟加速改进算法与传统方法、轨迹法对不同火焰类型使用不同粒子数进行渲染的火焰视觉效果测试图。
具体实施方式
下面,结合附图和实施例来对本发明的具体实施方式做详细说明。
具体算法描述如下:
假定当前系统模拟的火焰需要n个粒子和m条轨迹。本算法的流程对应图1。
步骤1:预处理
对n个粒子进行模拟计算,直到所有n个粒子都完成一整个生命周期,并且在模拟过程中记录下粒子每一帧的属性,从而形成轨迹,所述轨迹包括以下属性:加速度,颜色,生命值。模拟计算的具体操作包括:由作用力管理器生产下一帧的加速度,生命值=生命值-更新时间×系数,颜色=初始颜色+(最终颜色-初始颜色)×生命值。其中生命值的初始设为1,这样生命值可以直接作为alpha值使用,这里的系数是指生命值归一化的系数,即系数=1/生命周期的实际时间。加速度是由作用力管理器依据指定的作用力产生的。预处理后得到m条轨迹。在预处理阶段不进行渲染工作。
在本实施例中,我们用于测试的粒子系统中设置了以下几种作用力:涡旋,拖拽,风力和气流。关于这几个作用力的具体实施见如下说明:
如图4所示,A点表示粒子的出生点,B点表示粒子的当前位置,a向量表示粒子的发射方向,c向量由a与b做外积得到,d向量则是c向量在与a向量垂直的平面上逆时针旋转θ角得到。其中这个θ角称为涡旋的偏角,对于火焰模拟,通常取θ=90°。涡旋产生的加速度的方向即为d向量,大小由用户指定。拖拽产生的加速度方向为b向量的反方向,大小由用户指定。风力产生的加速度为固定的方向,这个方向和大小都由用户指定。气流产生的加速度为水平面上的随机方向,用户指定加速度的最大值A,实际加速度大小在更新阶段产生0 到A之间的随机值。
步骤2:生成粒子
由粒子发射器按照定义的规则随机产生n个粒子的初始位移和速度。其中定义的规则是指粒子发射器自身的规则,包括粒子发射器的几何性质(如线,球体,圆环等),粒子分布概率模型(如均匀分布,正态分布等),以及粒子发射方向和发射角(发射角是指以发射方向为轴的圆锥的锥顶角)。粒子的位移是依据选定的概率模型在发射器的表面或内部随机产生的,而粒子的速度则是依据发射方向和发射角形成的圆锥内随机选择发射方向。图5给出的火焰形态测试实例中所使用的参数如下:蜡烛火焰所使用的粒子发射器是线形几何体(长度为1个OpenGL单位),使用均匀分布,发射方向为(0,1,0),发射角为60°;火圈所使用的粒子发射器是圆环形几何体(半径为15个OpenGL单位),使用均匀分布,发射方向为(0,1,0),发射角为90°。
步骤3:分配粒子轨迹
轨迹和粒子的数据结构见图2。对于生成的每一个粒子,为其选择一条轨迹。为一个粒子选择一条轨迹对应的操作即是将该粒子的地址添加进这条轨迹的结构中的粒子链表里(如图2所示),同时在粒子自身的属性里添加上该轨迹的编号,并把当前帧数设为第一帧。由于粒子是随机生成的,为了尽可能保证每条轨迹上的粒子数平均,我们将n个粒子依次分配给m条轨迹,即第1条轨迹上有第1、m+1、2m+1……号粒子,第2条轨迹上有第2、m+2、2m+2……号粒子等等。
步骤4:更新和渲染
该步骤分为几个小步骤:
(1)更新粒子属性。对于每个粒子,拷贝其所属轨迹中对应当前帧的属性作为粒子当前属性,即粒子加速度=轨迹加速度,粒子颜色=轨迹颜色,粒子生命值=轨迹生命值。然后更新粒子其他属性。本实施例中的粒子其他属性包括粒子速度、粒子位移和帧数,具体更新方式如下:粒子速度=粒子速度+粒子加速度×时间;粒子位移=粒子位移+粒子速度×时间;帧数=帧数+1。若粒子已经到 达轨迹的最后一帧,则进入步骤5。
(2)渲染粒子,在测试实例中,我们使用OpenGL作为引擎,采用了正方形曲面片的方式来表达一个粒子,通过对曲面片贴上合适的纹理(实例中所使用的纹理如图3所示),再由粒子属性中计算得到的颜色和alpha值(在这里同时也是生命值)来进行绘制。四方形的中心的位置即为粒子的位移,四方形的大小由用户指定。
为了提高渲染的效率,我们采用了OpenGL的VBO(Vertex Buffer Object,顶点缓冲区对象)技术。VBO技术是OpenGL提供的一种新技术,其工作原理是在系统内存中开辟一块缓冲区并与显卡进行映射,同时将顶点数据存放在这个缓冲区中,这样既可以方便程序修改数据,又能实现内存到显卡的高速传输,从而可以一次性高效地渲染大量对象(可参考文献M.J.Kilgard,“ModernOpenGL Usage:Using Vertex Buffer Objects Well,”ACM SIGGRAPH ASIA 2008Courses,No.49,2008)。使用VBO技术进行渲染时,我们所要用到的每个粒子的顶点数据分为三部分:正方形曲面片的顶点坐标(共4个三维数据),四个顶点的RGBA颜色值(共4个四维数据),四个顶点对应的纹理坐标(共4个二维数据)。其中纹理坐标对于每个粒子在每一时刻都是不变的,即从右上角顶点开始沿逆时针依次为:(1,1),(0,1),(1,0),(0,0)。而顶点坐标和其对应的颜色数据则在每一帧的渲染前由每次更新的粒子属性来确定。使用VBO渲染的具体操作如下:
1.对顶点坐标数据和颜色数据,分别调用glBindBufferARB和glBufferDataARB函数将缓冲区和数据进行绑定,然后调用glMapBufferARB函数获得缓冲区的指针。
2.以顶点坐标数据为例,假定上一步中得到的定点数据缓冲区指针为p,则p[0]至p[3]为第一个粒子的顶点坐标数据,p[0]为其第一个顶点坐标(通常为右上角,1个三维坐标数据);以此类推第n个粒子的顶点坐标数据为p[4n]至p[4n+3]。然后根据更新后的粒子属性为其赋值,假设粒子的位置坐标为(x,y,z),粒子半径为r,则对第n个粒子数据的赋值如下:
p[4n].x=x+r;p[4n].y=y+r;p[4n].z=z;
p[4n+1].x=x-r;p[4n+1].y=y+r;p[4n+1].z=z;
p[4n+2].x=x-r;p[4n+2].y=y-r;p[4n+2].z=z;
p[4n+3].x=x+r;p[4n+3].y=y-r;p[4n+3].z=z;
颜色数据的处理方法类似,不同的地方是四个顶点的颜色数据是一样的,故假定上一步获得的颜色数据缓冲区指针为c,更新后粒子的颜色属性为(R,G,B),生命值为life,则对第n个粒子数据的赋值如下:
c[4n].R=c[4n+1].R=c[4n+2].R=c[4n+3].R=R;
c[4n].G=c[4n+1].G=c[4n+2].G=c[4n+3].G=G;
c[4n].B=c[4n+1].B=c[4n+2].B=c[4n+3].B=B;
c[4n].A=c[4n+1].A=c[4n+2].A=c[4n+3].A=life;
3.当全部的缓冲区的数据都被更新过以后,调用glBindBufferARB和glUnmapBufferARB函数将顶点坐标数据和颜色数据从缓冲区刷新到显卡。然后调用glEnableClientState函数开启顶点坐标,颜色和纹理坐标的指针用于渲染(参数分别为GL_VERTEX_ARRAY,GL_COLOR_ARRAY,GL_TEXTURE_COORD_ARRAY),然后依次调用glBindBufferARB函数和对应的指针函数(顶点坐标,颜色和纹理坐标对应的指针函数分别为:glVertexPointer,glColorPointer,glTexCoordPointer)将开启的指针指向相应的数据。
4.最后调用glDrawArrays函数进行渲染,由于我们使用的是正方形曲面片,因此该函数的参数为GL_QUADS。渲染结束后调用glDisableClientState函数来关闭顶点,颜色和纹理坐标指针(参数分别为GL_VERTEX_ARRAY,GL_COLOR_ARRAY,GL_TEXTURE_COORD_ARRAY)。
以上为VBO技术的渲染。如果用户的显卡不支持VBO技术,则可以采用传统的渲染方式,即对于每个粒子,调用如下过程(依旧假定粒子的位置为(x,y,z),半径为r,颜色为(R,G,B),生命值为life):
glColor4f(R,G,B,life);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2d(1,1);glVertex3f(x+r,y+r,z);
glTexCoord2d(0,1);glVertex3f(x-r,y+r,z);
glTexCoord2d(1,0);glVertex3f(x+r,x-r,z);
glTexCoord2d(0,0);glVertex3f(x-r,x-r,z);
glEnd();
(3)更新轨迹生命值属性。即生命值=生命值-更新时间×系数,其中系数为步骤1中所述的系数。如果轨迹的生命小于0,进入步骤6。
(4)循环步骤4,直到系统退出。
步骤5:重新生成粒子
若有1个粒子完成了生命周期,则粒子发射器重新生成一个粒子,具体操作如步骤2。但是不再为该新生成的粒子分配新的轨迹,而是将旧粒子从原轨迹的粒子链表中删除,把新粒子添加进粒子链表中,同时在新粒子的属性中添加该轨迹的编号,并把当前帧数设为第一帧。然后返回步骤4。
步骤6:重新计算轨迹
若有1条轨迹完成了生命周期,则用1个粒子重新进行一次模拟计算,具体操作如步骤1。完成后得到一条新的轨迹,将新的轨迹的属性覆盖原有轨迹的属性,然后将原粒子链表中的粒子全部进行一次重新生成,具体操作如步骤4。
Claims (5)
1.一种基于粒子系统的火焰模拟加速改进算法,其特征在于包括如下步骤:
假定当前系统模拟的火焰需要n个粒子和m条轨迹;
步骤1:预处理
对n个粒子进行模拟计算,直到所有n个粒子都完成一整个生命周期,并且在模拟过程中记录下粒子每一帧的属性,从而形成轨迹,所述轨迹包括以下属性:加速度、颜色、生命值;模拟计算的具体操作包括:由作用力管理器生产下一帧的加速度,生命值=生命值-更新时间×系数,颜色=初始颜色+(最终颜色-初始颜色)×生命值;预处理后得到m条轨迹;
步骤2:生成粒子
由粒子发射器按照定义的规则随机产生n个粒子的初始位移和速度;
步骤3:分配粒子轨迹
对于生成的每一个粒子,为其选择一条轨迹;其中,为一个粒子选择一条轨迹对应的具体操作如下:将该粒子的地址添加进这条轨迹的结构中的粒子链表里,同时在粒子自身的属性里添加上该轨迹的编号,并把当前帧数设为第一帧;
步骤4:更新和渲染
(1)更新粒子属性:对于每个粒子,拷贝其所属轨迹中对应当前帧的属性作为粒子当前属性,即粒子加速度=轨迹加速度,粒子颜色=轨迹颜色,粒子生命值=轨迹生命值,然后更新粒子其他属性,若粒子已经到达轨迹的最后一帧,则进入步骤5;
(2)渲染粒子;
(3)更新轨迹生命值属性,即生命值=生命值-更新时间×系数,其中系数为步骤1中所述的系数,如果轨迹的生命值小于0,进入步骤6;
(4)循环步骤4,直到系统退出;
步骤5:重新生成粒子
若有1个粒子完成了生命周期,则返回步骤2,粒子发射器重新生成一个粒子;
步骤6:重新计算轨迹
若有1条轨迹完成了生命周期,则返回步骤1,用1个粒子重新进行一次模拟计算,完成后得到一条新的轨迹,将新的轨迹的属性覆盖原有轨迹的属性,然后将原粒子链表中的粒子全部进行一次重新生成。
2.如权利要求1所述的基于粒子系统的火焰模拟加速改进算法,其特征在于,步骤2中,粒子的位移是依据选定的概率模型在发射器的表面或内部随机产生的,而粒子的速度则是依据发射方向和发射角形成的圆锥内随机选择发射方向。
3.如权利要求1所述的基于粒子系统的火焰模拟加速改进算法,其特征在于,在步骤5中,不再为该新生成的粒子分配新的轨迹,而是将旧粒子从原轨迹的粒子链表中删除,把新粒子添加进粒子链表中,同时在新粒子的属性中添加该轨迹的编号,并把当前帧数设为第一帧,然后返回步骤4。
4.如权利要求1所述的基于粒子系统的火焰模拟加速改进算法,其特征在于:步骤4的更新粒子属性中,所述其他属性包括粒子速度、粒子位移和帧数,具体更新方式如下:粒子速度=粒子速度+粒子加速度×时间;粒子位移=粒子位移+粒子速度×时间;帧数=帧数+1。
5.如权利要求1所述的基于粒子系统的火焰模拟加速改进算法,其特征在于:
所述步骤4中渲染粒子的具体方法如下:
使用VBO技术进行渲染,每个粒子的顶点数据分为三部分:正方形曲面片的顶点坐标,共4个三维数据;四个顶点的RGBA颜色值,共4个四维数据;四个顶点对应的纹理坐标,共4个二维数据;其中纹理坐标对于每个粒子在每一时刻都是不变的,即从右上角顶点开始沿逆时针依次为:(1,1),(0,1),(0,0),(1,0);
使用VBO渲染的具体操作如下:
1)对顶点坐标数据和颜色数据,分别调用glBindBufferARB和glBufferDataARB函数将缓冲区和数据进行绑定,然后调用glMapBufferARB函数获得缓冲区的指针;
2)假定上一步中得到的顶点坐标数据缓冲区指针为p,粒子的位置坐标为(x,y,z),粒子半径为r,则对第n个粒子的顶点坐标数据的赋值如下:
p[4n].x=x+r;p[4n].y=y+r;p[4n].z=z;
p[4n+1].x=x-r;p[4n+1].y=y+r;p[4n+1].z=z;
p[4n+2].x=x-r;p[4n+2].y=y-r;p[4n+2].z=z;
p[4n+3].x=x+r;p[4n+3].y=y-r;p[4n+3].z=z;
假定上一步获得的颜色数据缓冲区指针为c,更新后粒子的颜色属性为(R,G,B),生命值为life,则对第n个粒子颜色数据的赋值如下:
c[4n].R=c[4n+1].R=c[4n+2].R=c[4n+3].R=R;
c[4n].G=c[4n+1].G=c[4n+2].G=c[4n+3].G=G;
c[4n].B=c[4n+1].B=c[4n+2].B=c[4n+3].B=B;
c[4n].A=c[4n+1].A=c[4n+2].A=c[4n+3].A=life;
3)当全部的缓冲区的数据都被更新过后,调用glBindBufferARB和glUnmapBufferARB函数将顶点坐标数据和颜色数据从缓冲区刷新到显卡,然后调用glEnableClientState函数开启顶点坐标、颜色和纹理坐标的指针用于渲染,再依次调用glBindBufferARB函数和顶点坐标、颜色和纹理坐标对应的指针函数,将开启的指针指向相应的数据;
4)最后,调用glDrawArrays函数进行渲染,渲染结束后调用glDisableClientState函数来关闭顶点坐标、颜色和纹理坐标指针。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011100631861A CN102147928B (zh) | 2011-03-16 | 2011-03-16 | 一种基于粒子系统的火焰模拟加速改进算法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011100631861A CN102147928B (zh) | 2011-03-16 | 2011-03-16 | 一种基于粒子系统的火焰模拟加速改进算法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102147928A CN102147928A (zh) | 2011-08-10 |
CN102147928B true CN102147928B (zh) | 2012-11-21 |
Family
ID=44422177
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011100631861A Active CN102147928B (zh) | 2011-03-16 | 2011-03-16 | 一种基于粒子系统的火焰模拟加速改进算法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102147928B (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102915552B (zh) * | 2012-09-18 | 2014-10-08 | 中国科学院计算技术研究所 | 一种可控的火焰动画生成方法及其系统 |
CN103049931A (zh) * | 2012-12-17 | 2013-04-17 | 南京信息工程大学 | 基于粒子系统的云团快速三维仿真算法 |
CN104077090B (zh) * | 2013-03-25 | 2018-02-02 | 北京发现角科技有限公司 | 一种基于重力感应和声控喷射速率的粒子系统及方法 |
CN103310404B (zh) * | 2013-05-30 | 2018-06-26 | 新奥特(北京)视频技术有限公司 | 一种粒子颜色计算方法和装置 |
CN103310405B (zh) * | 2013-05-31 | 2018-12-25 | 新奥特(北京)视频技术有限公司 | 一种粒子运动的控制方法和装置 |
CN103325132B (zh) * | 2013-05-31 | 2019-02-22 | 新奥特(北京)视频技术有限公司 | 一种粒子发射方法和装置 |
CN103325133B (zh) * | 2013-05-31 | 2019-02-22 | 新奥特(北京)视频技术有限公司 | 一种粒子发射方法和装置 |
CN103400406B (zh) * | 2013-07-05 | 2019-04-26 | 新奥特(北京)视频技术有限公司 | 一种粒子反弹效果的实现方法及装置 |
CN103389387B (zh) * | 2013-07-05 | 2019-02-22 | 新奥特(北京)视频技术有限公司 | 一种粒子受到力作用的效果实现方法及装置 |
CN103455323B (zh) * | 2013-07-05 | 2018-12-25 | 新奥特(北京)视频技术有限公司 | 一种粒子效果的实现方法及装置 |
CN104571993B (zh) * | 2014-12-30 | 2018-01-30 | 北京像素软件科技股份有限公司 | 粒子系统的处理方法、显卡和移动应用平台 |
CN104574471B (zh) * | 2014-12-31 | 2018-01-23 | 电子科技大学 | 一种基于混合模型的真实感尾焰实时动画方法 |
CN104700446B (zh) * | 2015-03-31 | 2017-10-03 | 境界游戏股份有限公司 | 一种粒子系统中粒子顶点数据的更新方法 |
CN105261063B (zh) * | 2015-09-29 | 2018-10-19 | 北京三维易达科技有限公司 | 基于八叉树的三维粒子系统模拟大规模海洋气候的方法 |
CN106204696B (zh) * | 2016-07-05 | 2019-05-28 | 网易(杭州)网络有限公司 | 一种特效实现方法及装置 |
CN110415326A (zh) * | 2019-07-18 | 2019-11-05 | 成都品果科技有限公司 | 一种粒子效果的实现方法及装置 |
CN110675466A (zh) * | 2019-09-27 | 2020-01-10 | 广州华多网络科技有限公司 | 渲染系统及渲染方法、装置、电子设备和存储介质 |
CN112700517B (zh) * | 2020-12-28 | 2022-10-25 | 北京字跳网络技术有限公司 | 生成烟花视觉效果的方法、电子设备、存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101276480A (zh) * | 2008-04-28 | 2008-10-01 | 浙江大学 | 一种生成特定形状烟花的计算机模拟方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4743733B2 (ja) * | 2001-01-12 | 2011-08-10 | 株式会社バンダイナムコゲームス | 画像生成システム、プログラム及び情報記憶媒体 |
-
2011
- 2011-03-16 CN CN2011100631861A patent/CN102147928B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101276480A (zh) * | 2008-04-28 | 2008-10-01 | 浙江大学 | 一种生成特定形状烟花的计算机模拟方法 |
Non-Patent Citations (4)
Title |
---|
JP特開2002-216152A 2002.08.02 |
Ning Liu, et al..An Optimization Method for Real-Time Natural Phenomena Simulation on WinCE Platform.《31st Annual International Computer Software and Applications Conference(COMPSAC 2007)》.2007,第2卷57-62. * |
William T. Reeves.Particle Systems - A Technique for Modeling a Class of Fuzzy Objects.《ACM Transactions on Graphics》.1983,第2卷(第2期),91-108. |
William T. Reeves.Particle Systems- A Technique for Modeling a Class of Fuzzy Objects.《ACM Transactions on Graphics》.1983,第2卷(第2期),91-108. * |
Also Published As
Publication number | Publication date |
---|---|
CN102147928A (zh) | 2011-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102147928B (zh) | 一种基于粒子系统的火焰模拟加速改进算法 | |
CN101241603B (zh) | 一种电磁场强度实时可视化方法 | |
CN105261066B (zh) | 一种三维地理信息系统实时绘制多线程分配与控制方法 | |
CN104077797A (zh) | 三维游戏动画系统 | |
CN102157008A (zh) | 一种大规模虚拟人群实时绘制方法 | |
Friedrich et al. | Exploring the use of ray tracing for future games | |
Richmond et al. | Agent based gpu, a real-time 3d simulation and interactive visualisation framework for massive agent based modelling on the gpu | |
CN109215106A (zh) | 一种基于动态场景的实时光线追踪加速结构的方法 | |
CN106342298B (zh) | 一种多点爆炸效果的实时生成方法 | |
CN101770655A (zh) | 一种大规模虚拟动态场景简化方法 | |
CN104700446A (zh) | 一种粒子系统中粒子顶点数据的更新方法 | |
Fan et al. | An octree-based proxy for collision detection in large-scale particle systems | |
Gu et al. | Context-aware motion diversification for crowd simulation | |
CN105184843A (zh) | 一种基于OpenSceneGraph的三维动画制作方法 | |
CN114373058A (zh) | 一种基于虚幻引擎的海面网格动态划分及高度场生成方法 | |
Ilmonen et al. | The second order particle system | |
US20070159049A1 (en) | Method and system of rendering particle | |
CN105825024B (zh) | 一种实现焦化厂鼓风冷凝工段协同式三维仿真的方法 | |
Rahman et al. | Towards accelerated agent-based crowd simulation for Hajj and Umrah | |
Chen et al. | Real-time continuum grass | |
KR20120001114A (ko) | 가상세계 실시간 3d 객체 제어와 이를 위한 인터페이스 및 입출력 방법 | |
Chen et al. | Use of hardware z-buffered rasterization to accelerate ray tracing | |
Xu et al. | A g-octree based fast collision detection for large-scale particle systems | |
Zamri et al. | Atmospheric cloud modeling methods in computer graphics: A review, trends, taxonomy, and future directions | |
Hoetzlein et al. | Interactive water streams with sphere scan conversion |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: Room 603, Building 10, Huatai Entrepreneurship Park, No. 698 Xixi Road, Xihu District, Hangzhou City, Zhejiang Province, 310024 Patentee after: Zhejiang Metong Aromatherapy Technology Co.,Ltd. Address before: 310024, No. 4, long dock Industrial Park, Hangzhou, Zhejiang, Xihu District Patentee before: AROMA CONSUMER PRODUCTS (HANGZHOU) Co.,Ltd. |