版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章 粒子系统6.1 粒子系统概述6.2 粒子系统的生成原理6.3 粒子系统程序设计实例附录:3ds max的粒子系统6.1 粒子系统概述 粒子系统是最实用的过程动画技术之一。所谓过程动画是指物体的运动或变形可由一个过程来描述。最简单的过程动画是用一个数学模型去控制物体的几何形状和运动,如旗帜、水波随风的运动。较复杂的过程动画则是包括物体的变形、弹性理论、动力学、碰撞检测在内的物体的复杂运动。 粒子系统被认为是迄今为止模拟不规则模糊物体最为成功的一种图形生成算法。这一方面的先驱是W.T.Reeves,他在1985年发表的论文中成功地提出了一种模拟不规则自然景物生成和动画的系统,也就是所谓的粒
2、子系统。 文献:Approximate and probabilistic algorithms for shading and rendering structured Particle System. Computer graphics,1985 粒子系统的发展 为了实现对这类不规则物体的真实感显示,国内外学者一直在努力探索,先后提出了多种方法。例如,L系统、分形法构图等。各种方法相比而言,粒子系统产生的图像质量高,运算代价不高,且适合于中低档的硬件平台,所以,已被大量运用在大量3D软件中(见附录)。 粒子系统的发展 粒子系统在电影“星球大战”中的出色表现,使得人们对这一技术刮目相看,目前
3、,粒子系统巳被广泛应用于各个领域。尤其在视频特技制作中,人们常希望产生用常规拍摄方式难以产生的自然特效和模拟群体行为。 粒子系统的应用 影视作品星球大战剪辑影视作品星球大战剪辑水墨画仿真粒子系统作品粒子星云 为了能更清晰的理解现有的各种粒子系统,可以根据粒子间的作用关系将粒子系统分为三类: 粒子分类 独立粒子系统;固定联结的粒子系统; 动态联结的粒子系统. 独立粒子系统 独立粒子系统,即粒子间是独立的,无相互作用。独立系统用来模拟生成例如火、烟、雾、水花等自然景物。作用在每个粒子上的作用力都是独立的。为了建立复杂的效果,必须使用大量粒子,让它们受到重力,风力,各种阻力的影响。根据所模拟景物的物
4、理特性来生成和删除粒子。这些系统主要是产生动态特效,并不考虑景物的体积和表面因素。 固定联结的粒子系统 固定联结的粒子系统用于对物体物理变形特性的模拟。在这些系统中,为了建立物体的变形模型,可以对物体进行体或面的离散化。将体或面视为粒子,通过在“粒子” 间产生弹性,粘性作用力,使离散化的表面和体发生变化,在宏观上产生物体的弯曲,断裂,延伸等物理现象。动态联结的粒子系统 在动态联结的粒子系统中,粒子间的作用随时都在变化,即粒子间的联系自动删除,随之动态创建。用动态联结代替固定联结也能模拟与之相似的物理特性。但由于粒子联结的动态变化,也会使物体的几何和拓扑结构发生变化,这非常适合于模拟流体运动。粒
5、子系统实例烟 粒子系统实例火球 粒子系统实例火球例:星球爆炸例:滴落的水珠例:PF粒子实例:蒲公英例:冰雪融化6.2 粒子系统的生成原理粒子系统是迄今为止被认为模拟不规则模糊物体最为成功的一种图形生成算法。景物被定义为成千上万个不规则的,随机分布的粒子所组成,而每个粒子均有一定的生命周期,它们不断改变形状,不断运动。因而,我们关心的只是景物的总体形状和特征的动态变化,而不是各个粒子本身。粒子系统的这一特性,使得它充分体现了不规则模糊物体的动态性和随机性,很好地模拟了火,云,水,森林和原野等自然景观。 6.2.1 粒子系统的核心思想粒子系统模型的基本思想是用大量的,具有一定生命力的粒子图元来描述
6、自然界不规则模糊物体,每个粒子在任意时刻都具有随机的形状,大小,颜色,透明度,速度,加速度等属性,并随时间推移发生位置,形态的变化,每个粒子的属性和动态性质均有预先定义的一组随机过程来说明。粒子在系统内部要经历“产生”,“活动”和“死亡”三个具有随机性的阶段,在某一时刻所有存活粒子的集合就构成了粒子系统的模型。 6.2.1 粒子系统的核心思想 综上所述,粒子系统具有以下特性:系统组成由大量的、具有一定生命力 的粒子图元所描述的自然界 不规则模糊物体。 动态性每个粒子在任意时刻都具有随 机的形状,大小,颜色,透明度, 速度,加速度等属性,并随时间 推移发生位置,形态的变化。 生命周期性粒子在系统
7、内部要经历 “产生”,“活动”和“死亡” 三个具有随机性的阶段。随机性每个粒子的属性和动态性质均 有预先定义的一组随机过程来 说明。6.2.1 粒子系统的核心思想6.2.2 粒子系统的生成步骤(1)根据产生效果的物理特性,建立数学 模型,即构建粒子的运动方程;(2)确定粒子的个体属性 ;(3)产生粒子系统 ;(4)粒子活动; (5)粒子的死亡;(6)其它。一般过程(1)构建粒子的运动方程 总结并研究粒子可能的运动形式,研究其运动方程的求解方法,在不影响整体效果前提下尽量使算法简化,计算量减少以满足实时性的要求。在整个数学模型构建过程中,为了使产生的图象更具有真实感,应该考虑加上风力,重力等因素
8、。 (2)确定粒子的个体属性为表达粒子系统的随机性,Reeves采用了一些简化的随机过程来控制粒子在系统中的形状、特征及运动。对每一粒子参数均确定其变化范围,然后在该范围内随机地确定它的值,而其变化范围则由给定的平均期望值和最大方差来确定,粒子系统中的任一需随机确定的参数均可由以下参数表达式求得:ParameterMeanParameterRand( )VarPararmeter 粒子的属性主要包括: 初始位置、大小 初始运动速度和方向 初始颜色 初始透明度 初始形状 生命周期(2)确定粒子的个体属性不同的特效对粒子的个体属性要求的侧重点不同。例如在模拟星光灿烂的宇宙时,为了产生星光闪烁的效果
9、,就要考虑粒子的位置,大小,透明度属性和颜色属性,而对加速度,速度不作为考察重点。 (2)确定粒子的个体属性(3)产生粒子系统 粒子的产生由随机函数控制,每一帧图象产生的粒子数目直接影响着物体的密度,常使用以下方法定义: 第fi帧产生的粒子属性直接定义为NP(fi) NP(fi)MP(fi) + RAND( ) * VP(fi) 其中,RAND()是-1,1 上均匀分布的随机函数,MP(fi)和VP(fi)是第fi 帧新产生的粒子数目的平均值和方差。 (3)产生粒子系统 上式中粒子数目的平均值和方差可定义为常数或变量。如: MP(fi)=MP(f0) +MP*(fif0) 对每一新产生粒子都必
10、须赋以初始属性,如初始位置,方向,颜色,生存期等。 其他属性用下式计算: Property(f0)=属性均值+RAND()*属性方差(3)产生粒子系统 粒子的这些属性值可作如下定义: 粒子的初始位置P(f0)由粒子的产生区域决定,同时产生区域也可决定粒子的初始运动方向。对于球形区域,粒子从粒子系统原点沿球半径向外运动,对于圆形区域,粒子以一定的喷射角离开所在平面向外运动。 (4)粒子活动 粒子产生后,就要根据所确定的运动模型进行运动。一帧接一帧,直至死亡。这种运动有自己的规律,也就是说所有粒子的属性有共同的地方,这是产生整个现象的基础,但每个粒子又有自己的不同,这种不同就要有随机函数来体现。
11、(4)粒子活动粒子运动轨迹为:位置: P(fi) = P(fi-1) + V (f i-1) * (fif i-1)速度: V(fi) = MV+RAND( )*VV+A*(fi fi-1)颜色: C(fi)=MC+RAND( ) *VC+C * (fi- fi-1)(4)粒子活动粒子运动轨迹为:透明度: T(fi)=MT+RAND( )*VT+T*(fifi-1)生存期: L(fi ) = L(fi-1) L 式中fi为帧号(i= 0,1,2,3,n), i=0时为初始帧,A,C,T,L分别为粒子的加速度,颜色变化率,透明度变化率,生命递减值均可定义为常数。(5)粒子的死亡 粒子一产生就赋予
12、了生存期L(f0),用帧数来度量,随着粒子一帧一帧的运动而递减,即: L(fi) = L(fi-1 ) L 递减到0时,粒子死亡。将其从系统中删除。 (5)粒子的死亡 还可采用其他方法来衡量粒子的存亡,如当粒子的颜色和透明度低于限定值,或粒子的运动超出给定的距离,则可认为粒子死亡,将其从系统中删除。 粒子的产生,活动,死亡这三个阶段构成了一幅动态进化的画面。(6)其它因素(1)考虑到许多自然景物的形态变化,需要由多个粒子系统来描述,而每个粒子系统又由大量粒子组成,可以通过建立粒子系统的层次结构来加强对这些复杂物体的整体控制。层次结构的建立方法与传统的方法完全一样。算法在每一时刻首先确定新生成的
13、子粒子系统的数量,父粒子系统的所有属性均可以传递给其子粒子系统。例如,当父粒子系统运动时,其所有子粒子系统将跟随一起运动。这非常适合与模拟飞机尾焰等效果。(6)其它因素(2)为了使产生的特效更具有真实感,我们的粒子运动一般都建立在三维空间中。这就考虑使用何种三维加速引擎。常用就是OpenGL和DirectorX。另外还要考虑视点和粒子系统的位置关系,即要使用LOD(level of detail)技术解决远近不同的景象,既能缩短时间,又不降低对图象质量的要求。(6)其它因素(3)产生的粒子系统图象与其他图象的融合。在视频技术中,将不同的图象叠加在一块,从视觉上感觉不出他们来源于不同的画面。由粒
14、子系统产生的景物怎么和已有画面的融合,这虽是影视制作人员的任务,但我们产生的粒子系统要具有这种特性,才能够被使用。所以,在产生粒子系统图象时候,一定要考虑图象的格式,一般讲应该要考虑到图象的透明度。这与单个粒子的透明度是不同的。 例1.粒子火焰 程序运行后,大量发光的粒子在屏幕上运动,每一个粒子都有一定的生命周期,在这个周期内以一定的角加速度运动,同时,速度逐渐变慢。6.3 粒子系统程序设计实例 程序的基本步骤:(1)定义一个粒子结构。(2)粒子初始化。(3)计算出粒子的运动轨迹。(4)模糊效果生成。 (1)定义一个粒子结构struct CParticle float m_x; /当前x坐标
15、float m_y; /当前y坐标 float m_Angle; /方向 float m_Speed; /速度 float m_AngleAdjustment; /角加速度 float m_Life; /生命值 float m_Decay; /衰减速度;(2)粒子的初始化 当一个粒子诞生时,我们需要对它进行一些必要的初始化,对于不同的效果,初始化的内容也是不一样的,下面是一种最简单的运动粒子的初始化:(2)粒子的初始化最简单的运动粒子的初始化:void InitParticle(CParticle& particle, float x, float y) particle.m_x = x; p
16、article.m_y = y; particle.m_Speed = 1 + (Rnd( ) * 3); particle.m_Angle = Rnd( )* 2*pi; particle.m_AngleAdjustment = -1/40.0f+Rnd( ) / 20; particle.m_Life = 1.0f; particle.m_Decay = 0.01f+Rnd( ) / 20;注释1:由第二步可以看出,其中有许多参数带有一定的随机性,这样即可以保证每个粒子的坐标、速度或角加速度在一定范围内分布,也可以保证整体效果永远不会以相同的面貌出现。有了这些初始数据,我们就可以计算出粒子
17、的运动轨迹。 (3)计算粒子运动轨迹void MoveParticle(CParticle& particle) if (particle.m_Life = 0)return; particle.m_x += (float)cos(particle.m_Angle) * particle.m_Speed; particle.m_y += (float)sin(particle.m_Angle) * particle.m_Speed; particle.m_Angle += particle.m_AngleAdjustment; particle.m_Life -= particle.m_Dec
18、ay; 每一次调用MoveParticle函数,即可获得该粒子的新坐标,同时粒子的生命值降低。如果粒子生命值大于0,设置粒子在新坐标象素的颜色为255(调色板最大值),如果粒子生命值小于0,表明粒子已经死亡,不予显示,这样,就能够模拟出大量粒子的运动轨迹了。注释2:(4)产生模糊效果 为了显示出发光粒子拖着一条长尾巴的效果,还需要对图象进行一些特殊的处理才行。Blur算法即是完成这个目的。Blur即模糊的意思,最简单的Blur算法是取该象素前后左右四个象素的平均值。(4)产生模糊效果 Blur算法的代码如下: for (y=1; y height-1; y+) for (x=1; x widt
19、h-1; x+) pixel(x,y) = ( (pixel(x,y-1) + pixel(x-1, y) +pixel(x+1,y)+ pixel (x,y+1) ) 2;上面只是程序中的一些原理性的描述和未经优化的代码,在具体编程中,还会有以下一些需要考虑和注意的问题:对粒子的初始状态和运动施以不同的规则,可以构造出不同的粒子火焰效果,烟火即可用这种方法实现。对于调色板的灵活运用可使程序更加富予色彩。如对调色板进行分段,可同时显示出不同颜色的粒子火焰;对调色板进行循环,显示出火焰整体色彩的变换。Blur的算法有很多种,还可以实现Blur的同时向某个方向移动的效果,或是实现如火焰般的效果。注
20、释3:例2 粒子礼花 程序运行后,在不同帧产生下列效果粒子属性结构public: int m_flag; / 从低位开始,头2位表示阶段,第3位表示主(1)或从(0)粒子 int m_blinkNumber; / 闪烁计数器 double m_radius; / 粒子大小半径 double m_x, m_y, m_z; / 粒子的位置坐标 double m_vx, m_vy, m_vz; / 粒子的运动速度 double m_life, m_lifeIncrement; / 粒子的生命值及其增长量 GLfloat m_red, m_green, m_blue; / 粒子的颜色值 CPartic
21、le* m_next, *m_previous; / 相邻的两个粒子主要函数void mb_addParticle(CParticle* p); / 在当前粒子后插入指定的粒子 void mb_removeParticle( ); / 从链表中去除位于当前粒子后的粒子void mb_draw( ); / 绘制单个粒子void mb_makeSelfLoop( ); / 形成单粒子的双向链表void mb_setBlinkRand( ); / 设置随机闪烁计数值void mb_setColor(GLfloat r, GLfloat g, GLfloat b); / 设颜色值void mb_set
22、Life(double life, double increment); / 设置生命值void mb_setPosition(double x, double y, double z); /设位置坐标void mb_setVelocity(double x, double y, double z); / 设置速度void mb_updatePosition( ); / 更新位置坐标礼花粒子系统中的粒子单个的主粒子第一阶段的主粒子死亡所有粒子死亡创建第三阶段的粒子创建第二阶段的粒子第二阶段的粒子死亡不断创建尾粒子尾粒子不断死亡不断创建尾粒子粒子运动粒子不断死亡 3ds max拥有强大的粒子系统,功能众多,可以制作出数不胜数的粒子特效,是特技制作必不可少的工具。另外,3ds max中的paticle Flow也是一个非常强大的粒子系统,它是一种事件驱动型的粒子系统。附录 3ds max 的粒子系统3ds max的7类粒子系统喷射(Spray) 喷射粒子系统,可发射水滴、直线状和十字交叉型粒子常用于建立雨景、水流、喷泉和烟花爆竹等模型。雪花(Snow) 雪花粒子系统,可发射六角、点状和十字交叉型粒子常用于建立飘雪、抛落的纸削和糖果等模型。超级喷射(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 装修纠纷装饰补充协议范本
- 技术合作合同书
- 高中数学 8.2.3 二项分布(2)教学设计 苏教版选择性必修第二册
- 2024年高中地理 第4章 文明旅游 4.4 旅游安全教案 湘教版选修3
- 2024年八年级生物下册 6.1.2生物对环境的适应和影响教学设计 (新版)济南版
- 2023七年级数学上册 第4章 图形的初步认识4.1 生活中的立体图形教案 (新版)华东师大版
- 2024-2025版高中物理 第四章 电磁感应 5 电磁感应现象的两类情况教案 新人教版选修3-2
- 总部园区基地物业管理合同(2篇)
- 银行防控风险合同(2篇)
- 湘教版福建省福州市八县(市、区)一中2023-2024学年高一上学期11月期中联考数学试题
- 江苏省南京市鼓楼区2024-2025学年七年级上学期期中数学试卷(含答案解析)
- 部编语文五上《父爱之舟》说课:聚焦场景抓细节-探究真心品真情
- 劳动一年级上册(人民版)第十课《我帮爸妈择择菜》(教学设计)
- 《纸质文物修复与保护》课件-30古籍的版式
- 揿针操作规程
- 第九讲常微分方程模型2
- 市政道路工程排水施工图设计说明
- 服装洗水唛洗涤标志
- 爱心助学协会章程
- 中学德育工作会议记录
- 县教体系统2021年教职工体检方案
评论
0/150
提交评论