基于Virtools的粒子系统特效技术研究论文_第1页
基于Virtools的粒子系统特效技术研究论文_第2页
基于Virtools的粒子系统特效技术研究论文_第3页
基于Virtools的粒子系统特效技术研究论文_第4页
基于Virtools的粒子系统特效技术研究论文_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业论文第2页毕业论文第1页目录第1章绪论 21.1课题背景知识介绍 21.1.1粒子系统介绍 21.1.2粒子系统原理 31.1.3粒子系统的特点 31.2本文的研究工作与内容安排 31.2.1本文的研究工作 3第2章基于粒子系统技术的研究现状 52.1国外研究现状 52.2国内研究现状 52.3课题研究的意义 62.3.1粒子系统应用价值 62.3.3粒子系统技术研究意义 6第3章粒子系统的技术原理 63.1粒子系统的技术原理 63.1.1粒子系统的基本思想 63.1.2粒子的属性 83.1.3粒子的产生 93.1.4粒子的更新 103.1.5粒子的消亡 113.2面向对象的粒子系统设计 113.2.1粒子系统的基本模型 123.2.2改进粒子系统模型 14第4章开发工具与开发环境介绍 174.1Virtools开发环境介绍 174.1.1VirtoolsDev简介 174.1.2Virtools操作界面介绍 194.2Virtools模组介绍 204.2.1物理属性模块(VirtoolsPhysicsPackforDev) 214.2.2人工智能模块(VirtoolsAIPackforDev) 214.2.3Xbox开发模块(VirtoolsXboxKitforDev) 214.2.4网络服务器模块(VirtoolsServer) 224.2.5模型构建与控制 22第5章粒子系统特效的实现 235.1粒子系统的应用简介 235.2粒子系统实例 245.2.1灯光的制作 245.2.2粒子系统模拟火焰的生成 255.2.3滚滚浓烟 265.2.4烟花的制作 275.2.5喷泉可视化效果的制作 285.3漫游系统中粒子系统与场景的合成 295.4视角相机的实现 305.4.1两种选择方式: 305.4.2粒子系统的移动 315.5场景相机的控制 31总结与展望 32总结 32展望 33致谢 33参考文献 34附录 35第1章绪论1.1课题背景知识介绍在自然界中有一些现象,比如雨、雪、霜、烟、火等,没有固定的形状、也没有平滑的表面。它们的形状不停的变化,表面没有规律,很难用多边形网格来描述它。对这些不规则的、模糊的、运动的物体,粒子系统是一个有效的造型方法。粒子系统是计算机图形学的重要组成部分,是不规则物体造型的有效算法。它由成千上万的微粒组成,在系统运行过程中,每个粒子执行相似的运算,粒子之间关联度小。上述特点决定了粒子系统技术需要根据系统配置及需求进行优化并达到最佳效果。1.1.1粒子系统介绍粒子系统起源于1983年。在短短的24年时间里,它的发展非常迅速。从最初的简单模拟到引入物理模型,加入碰撞检测。从CPU上的串行计算到超级计算机的并行计算最近几年,人们又开始计算粒子系统规模也由最初的几千个发展到现在的百万个。其应用领域不断拓展,如虚拟现实、游戏开发、三维仿真、影视特效、科学计算可视化等领域都用到了粒子系统技术。1.1.2粒子系统原理粒子系统用大量细小微粒来表现一个复杂的不规则物体或者景象。每个粒子都有一定生命周期,系统会不断的产生新粒子,这些粒子不停地运动和变化,直到生命周期结束时被系统删除。粒子系统的绘制包括以下几个步骤(1)粒子的产生,产生新粒子并加入系统中(2)粒子的初始化,设置每个粒子的属性,如初始位置,方向,颜色,透明度,生命周期等。(3)粒子的运动,根据粒子的属性的动态变化对粒子进行移动和变换。(4)粒子的消亡,从系统中删除那些生命周期已经结束的粒子。(5)粒子的绘制,绘制并显示有生命的粒子组成的图形。上述几个步骤不停地循环以形成物体的动态变化过程。1.1.3粒子系统的特点同其他描述不规则物体的图形方法相比,粒子系统具有以下几个显著的特点:(1)对物体不是通过具有边界的面片(如多边形)集合来描述,而是通过一组定义在空间中的原来粒子来描述。一个复杂物体或现象需要成千上万,甚至几十万个粒子来描述。(2)粒子系统不是一个静态实体,每个粒子都在不停地运动和改变,因此整个粒子系统的动态的,需要不停地计算和重新绘制。(3)粒子系统的每个粒子都是一个独立个体,自身的规律进行运动和改变,粒子之间的运动关联较小。1.2本文的研究工作与内容安排1.2.1本文的研究工作本文共六章,其中二到五章叙述论文主要内容。第一章阐述了粒子系统的背景知识,介绍了本文中粒子系统技术的研究情况。第二章基于粒子系统技术的研究现状,说明了本课题研究的意义和具体内容第三章介绍了面向对象的粒子系统的原理;粒子系统的工作流程,详细介绍了灯光,水流,火焰,烟花等粒子系统的属性和绘制粒子系统的点绘制技术((PointSprite)。第四章是开发工具和开发环境的介绍,对virtools等相关建模,开发软件进行介绍并对系统配置要求进行介绍。第五章详细阐述粒子系统特效的实现过程及方法。第六章是本文的结论部分。组织结构如图1.2所示:基于virtools的粒子系统技术研究基于virtools的粒子系统技术研究绪论理论基础绪论理论基础实践第四章开发工具介绍第二章粒子系统研究现状第三章粒子系统原理第五章第四章开发工具介绍第二章粒子系统研究现状第三章粒子系统原理第五章系统设计思路,系统实现第六章第六章总结与展望图1.2组织结构图第2章基于粒子系统技术的研究现状2.1国外研究现状1983年,WilliamT.Reeves最早提出了粒子系统。它能充分体现模糊物体的动态性和随机性,能很好地模拟动态的三维复杂景物。AndrewWitkin提出了基于物理模型的粒子系统,在经典粒子系统基础上加上重力等物理因素,对自然现象的模拟更逼真。在普通的PC机上实现粒子系统的实时绘制,最多只能处理10,000个粒子,大大限制了粒子系统的应用范围。KarlSims为了提高粒子系统的处理规模和速度,提出了一种并行算法,在一个能执行并行计算的超级计算机上实现了该算法。在可编程的图形处理器上实现了粒子系统,该方法可同时渲染1,000,000个粒子,达到较好效果咧。这在粒子系统发展上是一个里程碑。KipferPeter等人用OpenGL实现了一个完全基于GPU的通用粒子系统引擎,它引入了物理模型,并应用于火山模拟。但它没有做粒子系统与场景中其它对象之间的碰撞检测,在构建大场景时与其它对象的融合不是很理想。2.2国内研究现状国内在粒子系统的研究上起步较晚,2002年贵州工业大学的姚颜林等基于OPENGL的开发接口开发了面向对象的粒子系统。中科院南京地理与湖泊研究所开发了一套粒子系统应用程序接口并应用于苏州工业园虚拟展示系统。2006年,粒子系统的研究非常活跃。西安科技大学的宇亚卫用粒子系统模拟三维火焰,在粒子系统中引入了运动场,讨论了重力和风力对火焰的影响.刘钮等用粒子系统模拟头发,生成了较为逼真的效果。北京航天航空大学的许楠等实现了一种基于图形处理器的粒子系统。在国内的粒子系统研究上是一次飞跃。他实现的是一个基本的粒子系统,没有进行碰撞检测,也没有考虑物理模型,因此其应用有一定的局限性。2.3课题研究的意义2.3.1粒子系统应用价值雨、雪、烟、火焰等不规则的、模糊的、运动的物体或景象很难用一般的方法来建模。由于它们不停的运动和改变形状,表面不规则并且边界模糊,很难通过定义其表面网格来描述它。粒子系统为这类物体或景象的建模提供了有效的解决办法,它能很好的模拟物体的动态特性。经过二十多年的发展,粒子系统已经成为计算机图形学的重要组成部分,是模拟不规则动态物体或景象的有效算法,粒子系统广泛应用于虚拟现实三维仿真、游戏开发、电影特技、可视化等领域。用于模拟火、烟、焰的动态效果,光、影、闪电特效,雨雪降落过程液体或气体的流动过程等.粒子系统是构建三维场景不可缺少的建模工具,在每一个具体的三维软件项目中,都不能没有粒子系统。2.3.3粒子系统技术研究意义目前国内外研究主要集中在粒子系统的算法和具体应用上,即核心层和应用层,缺乏中间的工具层,因此大家的研究彼此独立,不能通用。国外大公司的商业软件中提供了粒子系统的可视化编辑模块和浏览模块。用粒子系统引擎和编辑器能开展应用研究,直接在编辑器上调试可视化效果,而不必从研究算法开始。这样做可以提高工作效率,减少重复劳动。算法和接口公开,如果可视化工具满足不了需要,可以扩展这个通用算法和引擎。大大降低研究和实现算法的难度。第3章粒子系统的技术原理3.1粒子系统的技术原理3.1.1粒子系统的基本思想粒子系统应用是指采用粒子系统的方法,对模糊自然景物或对象进行的计算机图形模拟应用。在一个粒子系统应用中往往包含了一个或多个粒子系统,例如瀑布模拟,整个系统可以分成二个粒子系统。其中一个模拟下泻的瀑布(瀑布系统),另一个用来模拟瀑布下水花四溅、涟漪遍布的水面(水面系统)。这二个粒子系统具有独立性,例如它们所模拟的粒子是不同的,粒子属性的变化规律是不同的,其粒子的图形显示也是不同的。同时这二个粒子系统又存在一些关联性,如瀑布系统中的粒子在到达水面后将从爆布系统中消失(死亡),但同时给水面系统增加了一个新的粒子。在粒子系统的设计中,几乎都离不开物理模型的运用。从重力场的模拟,风的模拟等各种环境的模拟,到波浪、火焰、喷泉、瀑布、枝条的摆动,无一不是源于物理模型。常用的物理模型主要有两类:一是基于假想的物理模型,主要是为了方便的模拟实际单体的形态及运动,而假想物体的组成,构造及力学方程来进行建模。常见的主要是粒子系统,喷泉、雾、火焰、雪花等都是使用了粒子系统。二是基于物体实际的组成,构造及运动规律而进行建模。波浪、窗帘、桌布、枝条摆动、人及动物的运动都是用了该类模型。对于一些简单物体,可对整体列出动力学方程,然后按帧改变位置、状态,获得模拟动画效果。对于复杂的物体常将其分成若干部分,针对每一部分列出动力学方程,每帧对每个部分分别计算后,绘制一般过程。粒子系统理论主要由以下部分组成:(1)物质的粒子组成假设。粒子系统中,任何模拟对象,不论是固态的、液态的或者气态的,例如:火焰、云、雨和雪等,都是由有限个简单的粒子构成的,而且这些粒子处于不断的运动状态中,这个假设符合物理学定律:“物体都是由最基本的微粒构成的”,但是这些粒子与物理学中的原子等基本微粒不同,它们具有一定的形状、大小、颜色、透明度、位置、速度和生命期等属性,而且这些属性随着时间不断地发生变化。(2)粒子的独立关系假设。这里包含两个意思,一是粒子系统中各个粒子不与场景中任何物体相交,二是粒子之间不存在相交关系,并且粒子是不可穿透的。(3)粒子的生命机制。粒子系统中每个粒子都具有生命周期,在一定的时间周期内,粒子经历“产生”、“活动”和“死亡”三个基本的生命历程。(4)粒子的运动机制。粒子在存活期间按照一定的运动规律在场景中运动,粒子的运动机制是粒子系统模拟动态景物的关键。(5)粒子的绘制。因为构建一幅场景需要大量的粒子,因此在绘制时我们通常假设:单个的粒子不具有阴影,但是由粒子组成的实际物体则根据模拟场景的需要来决定是否进行阴影处理;单个的粒子不反射光线,但是由粒子组成的实际物体则根据模拟场景的需要来决定是否反射光线。粒子系统方法可以产生一系列运动进化的画面,这使得模拟动态的三维复杂自然景物成为可能。生成粒子系统某瞬间画面的基本步骤为:步骤1在系统中产生新的粒子:步骤2赋予每一新粒子一定的静态属性;步骤3删除系统中已存在且超过其预先描述的生存期的所有粒子;步骤4根据剩余粒子的动态属性对粒子进行移动和变换;步骤5显示由有生命的粒子组成的图象。总结上述5个步骤,粒子系统生成一个画面可分为:初始化粒子,粒子生命更新,粒子状态更新,粒子显示这个部分,流程图如图3.1所示初始化粒子初始化粒子粒子生命更新粒子生命更新粒子状态更新粒子状态更新粒子显示粒子显示图3.1粒子系统流程图3.1.2粒子的属性在粒子系统中,粒子一般具有空间位置、速度、加速度、大小尺寸、颜亮度、热度、形状、生存期等属性。例如在采用粒子系统进行雨景模拟中,粒子就代表了一个实际的雨点,粒子的属性就模拟了一个真实雨点的物理属性,其属性的变化模拟了真实雨点的变化。粒子系统通常用以下值来反映粒子当前状态的属性:(1)Position:粒子当前在空间中的位置。(2)Velocity:粒子的运行速度。(3)color:粒子的颜色。粒子颜色的变化常常可以产生一些真实的效果,如烟火。(4)Energy:粒子的能量。粒子能量的衰减常常用于物体的弹跳直至最后静止,也可以用来判断一个粒子的消亡。(5)Size:粒子的大小。粒子的大小影响了一个粒子系统可以表现的效果以及运行的速度。(6)Texture:纹理。是否对粒子设置纹理以及所设置纹理的个数将对整个粒子系统的性能产生巨大的影响,所以基于性能的考虑,每个相同类型的粒子采用同一个纹理。图3.1材质属性图3.1.3粒子的产生在一个粒子系统中,粒子的产生是通过控制随机过程的方式来完成的,它决定了在每个时间间隔内进入每帧的粒子数目,由于粒子的数目直接影响到模拟物体的密度,因而控制产生粒子的数目是相当重要的。模型设计者可以有两种方法来控制产生新粒子的数目,一种是设计者可以通过控制在一帧中所产生的粒子的平均数来实现。如果采用该方法则在某个时刻(Ti),新产生的粒子数量可以用以下公式描述:NP(Ti)=MNP(Ti)+Rand()*VNP(T1)(3-1)其中:MNP(Ti)为在Ti时刻新产生粒子数目的平均值;VNP(Ti)为在Tl时刻新产生粒子数目的方差:NP(Ti)为在Ti时刻新产生的粒子数目;Rand()为在[1.0,1.0]上均匀分布的随机函数。平均值和方差可以是常量,也可以是基于Ti的变量.另一种方法是使所指定的平均数与最大变化范围为屏幕上单位面积中所生成的粒子的平均数和方差,因此生成粒子的数目决定于物体所占屏幕的大小。采用这种方法时,粒子系统能够通过一个特殊帧面上的可视参数来计算机它所覆盖的大约屏幕区域,进而正确地计算机出新产生的粒子数目,其对应的计算机公式如下:NP(Ti)=(P(Ti)+Rand()*yNP(Ti))*SA(3-2)其中:P(Ti)为在Ti时刻新产生粒子数目的平均值;VNP(Ti)为在Ti时刻新产生粒子数目的方差;NP(T1)为在Ti时刻新产生的粒子数目;Rand()为在[1.0,1.0]上均匀分布的随机函数。弘是粒子系统的屏幕区域。平均值和方差可以是常量,也可以是基于Ti的变量。在粒子系统中对于新产生的粒子,其初始属性可以根据不同的模拟对象特点进行赋值。例如可以按以下公式赋值:Property(Ti)=MProperty(Ti)+Rand()*VProperty(Ti)Mproperty(3-3)Mproperty是该属性的均值,VPrerty(Ti)是该属性的方差。公式中粒子的初始位置可以将空间一个平面或三维空间作为基准,以雪花系统为例随机分布。再例如烟花模拟中,烟花的各个粒子在某个时刻诞生在空间一个点或者非常小的空间内,并且速度的绝对值和方向矢量可以用上述公式来表示。3.1.4粒子的更新在自然景物模拟中,粒子的属性将随时间发生变化。变化的类型大致分为以下几种:(1)力学作用。如重力、风力、浮力等,将对粒子的位置、速度、加速度等属性产生影响。(2)热作用。如自然冷却、化学作用、热传递等,将影响温度、亮度、透明度等属性。(3)形状变化。如爆炸、分裂等,导致粒子增多或影响到粒子尺寸、形状、质量等属性。对于力学作用,基本可以采用牛顿定律来描述。在具体应用中,根据实际情况还可以采用近似简化的表示。例如在雨景、雪景的模拟中,模拟空间范围时,可以认为粒子的下落在达到一定速度后,是按匀速运动的。对于热能相关的变化,可以认为其爆炸、获得能量、散热的过程按不同的速率曲线进行。例如在焰火模拟中,有些粒子可以认为是瞬间充分燃烧,能量获得最大值,然后按线性或非线性的散热曲线冷却。而有些粒子先在一个相对长的时间内逐渐获得热能,然后再按某种下降曲线冷却(变暗)。对于通用的参数化粒子系统,就需要设计满足不同需要的模型结构,在应用时只要通过参数选择不同的热能变化类型即可。对于形状变化,往往涉及到新粒子的产生或消亡。例如焰火的爆炸,可以理解成一个粒子在消亡的同时有一批粒子产生并同时发生能量的变化。再如大片的雪花自然分成二片,意味着一个粒子的消失,二个新粒子的产生。3.1.5粒子的消亡既然有粒子的产生和变化,必然就有粒子的消亡。粒子的消亡有以下几种类型.(1)空间位置静止。例如在雪景模拟的粒子系统中,当雪花降落到地面后,雪花的空间位置不再变化。此时它自身的视觉效果可以通过地面的其他方法来模拟,代表雪花的粒子就没有存在的必要了。(2)视觉效果消亡。例如在烟火、火焰模拟的粒子系统中,粒子有速度、热能、温度。粒子在运动的过程中,不断地散发热能,其亮度因此也在变化,当其亮度小于一定的数值时,虽然粒子可能还在空间运动,但相对其背景己经影响不到视觉模拟。在这种情况下,该粒子对模拟己经没有价值,可以消亡。(3)生存期结束而消亡。有些粒子系统中,粒子有一个生存期属性。在到达生存期后,粒子也就可以死亡。生存期条件的采用又分两种情况:一种是在物理模拟中,本身就存在比较严格的生存期条件,例如生物对象:另一类是在物理系统的建模中,抽象出一个生存期的属性作为一种简化相对准确的描述。例如在焰火模拟中,以定义生存期的方式来简化模拟粒子的热能变化、亮度变化、时间变化。(4)超出视界的消亡。因为考虑到粒子系统的用途,在粒子超出观察范围后,也可以消亡。3.2面向对象的粒子系统设计系统的设计是否科学,是否合理关系到整个在系统是否具有良好的可扩性,是否具有比较好的性能。对于一个高级的粒子系统,它很可能会涉及到大量的代码编写,如果在编码之前没有进行良好的设计,将会给后续的工作带来不少麻烦,甚至会使得实现出来的粒子系统难以维护和更新。由上一节粒子系统模型可以知道,由于粒子系统需要产生大量的粒子来模型自然现象和某些特效,它将会大大增加每帧的可见多边形的数量,假设每个粒子需要用4个定点和两个三角形,则一个具有500个可见粒子将会增加1000个可见三角形,而且这些粒子大多是运动的。由此可见一个没有经过良好设计过的粒子系统,很可能会引起严重的内存问题,尤其对于移动平台内存不大,硬件资源有限的环境下,将会大幅降低系统的刷新率。下面将会运用面向对象设计的原理,结合移动平台的条件和粒子模型,逐步设计出一个具有较好可扩展性和内存管理的面向对象粒子系统。3.2.1粒子系统的基本模型面向对象分析是一种分析方法,它可以在问题域的词汇表中找到的类和对象的观点来审视需求,面向对象设计则是一种设计方法,它包含面向对象的分解过程,以及一种表示方法,用来描写设计中的系统的逻辑模型与物理模型,以及静态模型与动态模型。面向对象设计建立在面向对象分析之上,细化业务模型和业务行为,给出面向对象技术的技术实现。它的关键是其产出物能映射到计算机系统的要求。从上面粒子系统的基本思想的叙述中,可以较容易发现两个基本概念:粒子系统与粒子。这两个概念共同构成了面向对象分析中领域模型的两个元素,领域模型如下图所示:1Contain1*ParticleParticleSystem1Contain1*ParticleParticleSystem图3.2粒子系统领域模型从领域模型映射到面向对象语言的过程中,可以得到两个基本类粒子类和粒子系统类。(1)粒子类。粒子类与粒子系统物理模型的粒子相对应,它是系统里面的一个最基本的元素,因此粒子类主要的作用是如何反映出粒子系统模型中的粒子,设计的任务主要集中在类的基本数据类型设计上。由上一个节粒子模型可以得知,一个粒子具有位置、速度、加速度、大小尺寸、颜色、亮度、热度、形状、生存期等属性。在这些属性中粒子的位置,速度,加速度,颜色,大小,生存期是最为基础的,因此将他们作为粒子类的基本属性。此外在粒子渲染的过程或其它粒子计算机中需要用到粒子在上一个帧的位置,在粒子类里面需要加入一个新的属性oldPos。粒子类的属性设计如表3.1所示。表3.1粒子类的属性数据类型名称描述Vector3position粒子位置Vector3oldpos上一帧粒子位置Vector3velocity粒子速度Intcolor粒子颜色Intlife粒子生存期Intsize粒子大小不同的粒子系统在不同环境下对粒子的初始化和要求都不相同。例如烟,有些粒子系统需要模拟有风影响下的烟,有些粒子系统则需要模拟不受风影响的垂直上升的烟,这时这个两个系统对粒子的加速度设置就各不一样。所以粒子类的构造函数设置成空,粒子属性的赋值工作同一交给粒子系统完成,减少构造大量粒子实例过程中系统在调用构造函数的开销。(2)粒子系统类。粒子系统类负责控制粒子的属性赋值,粒子的产生,粒子的更新和粒子的渲染,它是整个系统的核心部分。根据粒子系统物理模型中粒子系统的控制流程,粒子系统类的属性如表3.2所示:表3-2粒子系统类的属性数据类型名称Texture*TextureVector3positionBlendModeblendmodeInttypeArrayParticleparticlesTexture是一个指向材质数据的指针,为了系统运行效率,每个不同的粒子系统都各自使用一个材质,系统内的各个粒子都使用同一个材质。Posilion表示该粒子系统在哪个位置显示。不同的特效和景物模拟需要不同的渲染模式,因此在粒子系统内需要加入BledMod。这一个数据属性,type这代表了不同粒子系统的类型,系统类型主要有烟,雾,火焰,焰火,雨雪等类型,这个数据属性主要是为了使得系统可以控制不同类型的粒子系统。ArrayParticle则是指向粒子数组的指针,是粒子系统的基本元素,代表了粒子的集合。根据粒子系统控制粒子的流程,粒子系统类的操作方法主要有以下几个,如表表3.3粒子系统类的操作方法操作名称描述Emitter负责粒子的产生Update负责粒子的更新Render负责粒子的渲染一个粒子的基本模型图如下所示:PartucleSystem-Texture-Position-BlendMode-Type-Particles-Emitter()-Update()-Render()Particle-pos-oldpos-veclocity-life-color-size图3.3粒子基本模型图3.2.2改进粒子系统模型(1)可管理的粒子系统当系统中仅存在唯一个粒子系统的时候,用上述的基本模型即可完成任务。但在实际的工作中,一个游戏场景都会同时存在多个的相同的粒子系统去模拟特效。例如在一个战场场景中,可能有多处地方需要模拟火焰。这时系统就需要同时存在不同的粒子系统去模拟这种特效,如果程序员还是采用基本粒子模型,则在每一帧都需要对3个粒子系统进行更新、渲染等操作管理,还需要追踪所有粒子系统以保证能及时释放已经死亡的粒子,十分不方便,而且属于硬编码模式,维护性和可扩展性比较差。有鉴于此,在基本模型上要加入一个Partid。Manager类,让它去管理所有的粒子系统,在需要的时候自动更新和渲染所有系统,并且对粒子系统进行内存管理,在结构上提高了系统的扩展性,使得程序员把更多精力放在场景的安排上,而不是把焦点放在如何处理粒子。ParticleManagerParticleParticleManagerParticleSystemParticleSystemParticleSystemparparparparparpar图3.4ParticleManager示意图由于粒子系统会在给定的时候内就消失,如果在管理类对粒子管理类进行操作的时候没有检查该粒子系统是否己经消亡,就很容易引发内存问题导致系统崩溃。因此除了添加粒子系统,减少粒子系统,更新粒子系统,渲染粒子系统等功能之外,还需要加入一个检验粒子系统是否己经消亡的功能。ParticleManager类的操作。(2)接口设计上述提出的设计可以解决一个场景含有多个相同的粒子系统的情况,可是当一个游戏场景中还会存在着不同的粒子系统,例如在上面提到的战场场景中,除了有多处的火焰存在之外,有时还需要雨和雾的效果,这个时候该设计就不能再适用了。程序员不得不又一次再陷入硬编码的方式,一个个地处理不同的粒子系统,再次降低了系统的可扩展性。在设计模式的核心设计原则提到:尽量针对接口编程,而不要针对实现编程。针对接口编程的组件不需要知道对象的具体类型和实现,只需要知道抽象类定义了哪些接口,这减少了实现上的依赖关系。为了最大限度地适应需求,应该先添加一个粒子系统得抽象接口,该接口中定义了每一类粒子系统共有的行为,粒子产生(mitter),粒子更新(Update),渲染区(Render)。添加这个接口后,利用面向对象语言多态的特点,系统添加新的类型的粒子系统的时候,只需要添加新类型代码,而系统中原有的代码不需要做任何的改变就可以适应新的需求。第4章开发工具与开发环境介绍4.1Virtools开发环境介绍4.1.1VirtoolsDev简介Virtools是一套整合软件,透过『直觉式图形开发接口』开发人员只需要拖曳所需要的行为模块就可以建构出复杂的互动应用程序,可同时满足无程序背景的设计人员以及高阶程序设计师的需要,让3D美术设计与程序人员进行良好的分工与合作,有效缩短开发时程、提升效益。由于内建超过500组的行为模块,更可以让使用者快速设计出多样的3D数字内容。3D动画已经是人人可学可做的了!现在我们更可以透过virtools这套由法国科技公司所研发多年的软件,简易的建置出网络可以播放的高标准3D动画,或者3D游戏,我们将带各位进入这个充满无限趣味的领域。(1)Virtools架构:VirtoolsVirtoolsViewerVirtoolsSDKVirtools组成元素VirtoolsApplication3DEngineVirtoolsLibrary(CK)图4.1(1)

VirtoolsLibrary:可称为CK,提供3D及时的互动行为。(2)

VirtoolsApplication:为整合与制作的环境平台。(3)

VirtoolsViewer:可以执行由Application所制作出来的内容。(4)

VirtoolsSDK(SoftwareDevelopmentKit):允许使用者新增

Virtools的功能(VirtoolsDev才有)。

(2)Virtools整合3DsMax:我们要把做好的3D模型对象转入Virtools。需注意的是3DsMax中的对象转入Virtools中有一定的限制。

3DsMax转文件必需注意的事项:(i)模型数据:已经转换为”editablemesh”型态的3D模型。可供输出的3D模型数据如下:基本模型数据,贴图坐标的设定,SmoothingGroups的设定,Hierarchy从属关系设定,Show/hideFlag显示隐藏的设定,VertexColor。(ii)材质资料:3DsMax的标准材质以及multi/sub-object(同一对象、复合材质数据);双面材质设定(2-SidedFlag);透明度设定(Transparency);Diffuse的贴图;贴图的色彩将会因为这个材质颜色而改变,除非颜色值为(255.255.255)的白色。(iii)灯光:所有3DsMax的标准灯光。包括开/关设定;

灯光颜色;照射范围(设定灯光范围的「Attenuation/Far/End」等数据);特殊灯光参数设定;聚光灯:聚光灯的falloff值的设定。(iv)摄影机:所有3DsMax设定好的摄影机,如Target或Free的摄影机。3DsMax摄影机的参数只有FOV可供输出。(v)Dummy:接受3DsMax的Dummy虚拟对象。(vi)动态数据:TCB格式、LINEAR或Bezier的动态数据。只有在3DsMax里的TCB、LINEAR或Bezier的位移、旋转、大小等动态数据可输出至Virtools。为了让动态数据正确输出,母对象(群组最高层级的对象)的位移、旋转、大小三种动态数据的起始点与终点一定要设定在时间轴的范围里。

Virtools的每段动画旋转范围不得超过360度的数据。(3)Virtools之BuildingBlocks:BuildingBlocks是一种行为模块。在Virtools的交互式设定是相当有逻辑性,好像在玩电路板游戏,或说是把写程序转化成一种具像的流程图,每个关键的语汇转化为一块块的行为模块﹝BehaviorBuildingBlock﹞,每个模块身上很多插孔,有输入插孔(BehaviorInput,用来接收流程上层命﹞、输出插孔﹝BehaviorOutput,传送执行结果﹞、输入参数﹝ParameterInput,执行前的参数设定﹞、输出参数﹝ParameterOutput,执行前的参数设定﹞,这些行为模块是构成一个物体作用的最基本元素,只要各种不同的行为模块合理地联结起来就可以让3d对象互动起来。

图4.2(4)Virtools之SDK:SDK

就是

Software

Development

Kit

的缩写,就是“软件开发工具包”。这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一类软件的相关文文件、范例和工具的集合都可以叫做“SDK”。4.1.2Virtools操作界面介绍(1)场景编辑器(3DLayout)在3DLayout的区域内可以显示目前正在编辑的场景,使用者可以在这区域内即时检视编辑、修改的状况。所有的物件包括3D的物体、灯光、摄影机、线段等,都可以在这部分中做修改,如位置的移动、旋转、缩放等,并即时显示修改後的结果。(2)档案资源管理(LevelManager)在档案中的所有物件,都会依照分类(CKClass的分类),显示在这部分,如3D物体就会在此分类显示(3D物体泛指档案中的3D模型),灯光会显示在Light的分类中,摄影机会显示在Camera的分类中等,方便使用者管理档案中的资源。在Virtools中,一个档案可以许多包含不同的场景(scene),而场景可以依要再动态加入至目前所开启的档案中。(3)行为模组资料库(BuildingBlockLibrary)在VirtoolsDev,内建超过400个以上的行为模组,只要以"DragandDrop"的方式就可以套用在物件上。甚至可以利用现有的行为模组,再建立一个新的行为模组,此新的行为模组可以另外独立储存成一个档案,供其他使用者或是其他专案上使用。所以VirtoolsDev的行为模组具有延伸性质。(4)行为模组编辑器(SchematicView)图形化的编辑方式,可以全心安排自创的互动程序设计,没有语法错误的状况发生,编辑程序完成后,将形成一个完整的流程图,方便未来阅读、修改、使用与经验传承,解决公司资料保存与人员流动问题。(5)除错工具(Debugtools)在编辑行为模组的过程中,可以随时利用除错工具,修正逻辑上的错误,以达到最佳的状态。(6)物件参数设定界面(Entitiessetup)一个物件都有自己的设定界面,依照每一类别的不同而有不一样的参数可以修改,如3D物体的参数设定界面中,可以修改位置、旋转角度、比例大小...等资料;灯光可以修改灯型别,如点光源、聚光灯或是平行光,同样也可以修改灯光的位置、方位,进一步的资讯如灯光照射的范围、Hotspot、Falloff等皆可调整。(7)属性管理界面(Attributesmanager)每一个物件都可以设定其他的属性,并且都可以在这个界面查到或是修改,如重力的属性、碰撞的属性、即时阴影的属性...等。(8)阶层管理界面(Hierarchymanager)阶层管理界面可以显示与修改物件之间的关系,修改时,仅使用"DragandDrop"直觉的方式即可完成。(9)参数除错器(Parametersdebugger)参数除错器可以一次监视多个参数在执行时的变化,供除错时的参考。(10)档案路径管理界面(PathManager)档案路径管理界面供使用者定义档案所在的位置,如图形档、音档等。(11)Profiler可以让使用者得知执行时计算时间的分配如何、有多少个物件正在处理中、贴图使用了多少Mb的记忆体...等(12)互动行为的设计有超过500种以上的行为模组可供使用,以"Draganddrop"的方式就可将行为模组的功能套用在物件上,可以现成的行为模组再组成一个新的行为模组,图形化的物件导向程式设计。(13)Virtools自订功能有:使用VirtoolsDevSDK可以存取的内容资料包括顶点、多边形、模型、人物角色...等;新增自订的行为模组与manager新增自订的参数型别、运算元与编辑器;新增自订的档案输入/输出程式;建立执行档(.exe)。(14)直觉式管理使用者可以直觉的方式管理档案资源、物体间的阶层关系,并可以监测目前系统资源使用的状态。公开展示、发行当产品完成时,您可以透过网络展示成果,或是将您的产品制成光碟发售。4.2Virtools模组介绍Virtools除了自身的3D/VR开发平台VirtoolsDev以外还有五个可选模块,分别是:4.2.1物理属性模块(VirtoolsPhysicsPackforDev)VirtoolsPhysicsPackforDev是完全整合在VirtoolsDev中的一个插件,提供了对于由物理定律控制的现实世界的真实模拟。整合了Havok公司顶尖的物理属性引擎,使得Vntools的使用者在制作3D互动场景的过程中更加便利。提供使用者多种物理属性的运用,VirtoolsPhysicsPack中的行为模块(BuildingBlocks,简称BB)可实现诸如重力、质量、摩擦力、弹力、物体间的物理限制、浮力、力场与车辆的动态物理属性等功能,例如你可以指定车辆的质量、车轮的摩擦系数,可以识别弹簧、铰接的连接限制等。这些都是通过物理引擎来实现的,而不需要你具备复杂的数学和物理知识。这些功能大大缩短使用者制作的时间,减少了美术设计师繁复冗长的物体动态制作过程与程序设计师撰写算法的过程。4.2.2人工智能模块(VirtoolsAIPackforDev)为游戏角色注入生命新元素。AI为人工智能科技提供了最佳的解决途径,为游戏及虚拟人物创造个性,加强了原先内建在行为模块中的人物个性属性设定。AIPack技术在研发的过程中通过VirtoolsDev直觉式图形开发界面直接体验人工智能的魅力。AlPack内含两种行为模块。首先赋予角色人物经由眼睛与耳朵对于环境的观察建立独特的性格,也就是视觉与听觉的特性,然后再发展出更高阶的第二阶段的动作反应,如跟踪,逃走,躲藏等,行为模块在建立过程中为了加速流程通常会伴随着几项工具,主要是为了计算主角人物对环境作出反应时所需要的计算机数据。4.2.3Xbox开发模块(VirtoolsXboxKitforDev)该模块是Virtools的外挂模块。XboxKit的接口能在Virtools与Xbox之间作档案数据的沟通与转换,使得运用VitoolsDev所制作的游戏,能透过XboxKit简便的数据转换达到流畅的立即呈现。XboxKit全新行为模块的编写方式与VirtoolsDev原有的使用方式完全一样,使用者能通过“直觉式图形开发接口”拖曳所需的XboxKit专属行为模块,建构出丰富多元的3D数位内容。XboxKit还支持所有标准的Dev功能,也可和所有外挂模块搭配使用。运用Virtools直觉式图形开发接口不但能轻松编辑游戏的互动性,而且可以使用可视化方式检视、编辑、侦测对象与行为模块间的关联性。VirtoolsXboxKit独特的编辑处理功能,提供最佳的数据转换及流畅的游戏呈现,能在Virtools游戏开发平台与Xbox平台之间建立数据沟通与转换的标准模式,用来测试游戏的可玩性与耐玩性,并进行游戏企画或程序设计架构的修改,降低实际制作的风险与成本。4.2.4网络服务器模块(VirtoolsServer)VirtoolsServe利用高效率的网络联机引擎协助使用者开发因特网或局域网络的3D多人联机数字内容,可以轻松地完成与数据库整合、多人联机及数据串流等功能。VirtoolsServe提供两种多人联机服务器,包括独立网络服务器与点对点局域网络服务器。使用者不用解决任何网络联机本身的任何问题,只要通过其提供简单易用的行为模块(buildingblocks)就可完成所有所需的功能。VirtoolsServer亦可将所需的互动原件(包括自行设计的互动模块、媒体数据及数据库等在尚未开始正式执行档案前,通过标准外挂模块(VirtoolsWebPlayer)的方式事先下载至使用者的计算机,大幅增加在线播放的弹性与客制化的功能,使得Virtools的VMO/CMO档案中所需的对象可以分别依据需要再下载,并可以通过ODBC接口与数据库连结。4.2.5模型构建与控制本系统的最终目的是向客户介绍粒子特效,因此模型的构建是首要也是至关重要的任务,模型建立的好坏直接影响到整个系统的展示效果。对于一个模型所导入到材质的好坏和恰当与否也会增强或减弱虚拟商品的真实感。然而由于Virtools本身没有建模的功能,所以一般建模方法是采用建模软件来实现,如3DMAX或Maya等(本文中采用的是3DMAX)。如图4.3所示:图4.3用3DMAX制作三维模型或动画后是以.max文件存在的,而不能够被Virtools所用,因此需要为其安装Virtools的MaxExporter插件,再以NMO格式文保存文件,然后在Virtools中导入所生成的NMO文件。导入到Virtools的三维世界编辑区的3D(或2D)元素可以加以观察,控制,也可以用安装SDK插件编辑更多的BBs(BuildingBlocks),实现虚拟展示的需要。整个转换过程如图4.2所示:Virtools观察控制.nmo文件3DMax添加纹理等发v3DMax建立模型修改生成导入Virtools观察控制.nmo文件3DMax添加纹理等发v3DMax建立模型图4.4图4.53D模型属性图第5章粒子系统特效的实现5.1粒子系统的应用简介粒子系统的应用领域从大的方面分为两类,一是用于数字娱乐,二是用于仿真。数字娱乐包括游戏,动画,电影特效等。仿真有对自然景观,如雨,雪的模拟,有对人文景观,如喷泉模拟;有对战场的仿真,如飞机,导弹的尾焰的模拟,燃烧,爆炸场景的模拟等。本文制作了几个代表性的粒子效果,以证明我们所提出的解决方案的有效性和通用性。这些效果是用粒子系统编辑器调试得来,以说明其动态性。更直观的效果请看截图。5.2粒子系统实例5.2.1灯光的制作在virtools中可以看到灯光的闪烁,看到的是动画。可以看出整体的粒子运动情况,它可以逼真的模拟日光灯,霓虹灯等。图中灯光的颜色和闪烁各不一样,可以看到粒子的飞溅。也可以看出每幅图的形状都是不完全一样的。

下面介绍制作这个霓虹灯效果的几个要点:(1)离子满天飞:它使用了点发射器,所有粒子都从一个点产生,每个粒子的初始方向随机产生,因此它会向空间所有方向运动。由于离子发射速度4000/秒,总粒子数可达到50000个,粒子就会填满空间各个方向。(2)粒子是七彩的:在产生新粒子时粒子颜色随机生成,因此不知道多少种颜色,只看到五颜六色的效果。(3)粒子中间密,外面稀:是因为在产生新粒子时,每个粒子的生命周期在某个范围内随机产生。它的生命周期不同,粒子向外运动,最外面只剩下生命周期最长的粒子。还有一个原因是颜色特效,让粒子颜色随运行的时间慢慢变淡,最后变成黑色,与天空融为一体,也就看不见了。(4)粒子飞行中的闪烁效果:一是粒子的飞行速度很快,二是每个粒子的飞行速度在某个范围内随机产生,常常会有后面运动的粒子一下子窜到前面来的感觉。这样给人一种视觉上的震撼。图片5.1灯光实现脚本灯光效果图图5.2图5.3图5.4图粒子系统模拟火焰的生成在virtools中可以看到火苗的跳动,看到的是动画,可以看出每幅图的形状是不完全一样的,它可以逼真的模拟火柴,蜡烛等燃烧的小火焰。火苗有三个特点:(1)上面小,下面大。它使用了缩放特效,即ScaleAffector对粒子进行缩放。缩放倍数2.粒子从上面发射出来,在运动过程中渐渐变大,到最下面变成原来的2倍。(2)颜色由红变黄再变白。透明度由上面的不透明,到半透明,到最下面全透明,这里使用了颜色特效,即ColorAffector。粒子最初颜色是红色,慢慢增加绿色G,蓝色B分量的值,当G,B增加都1时,颜色就变成了白色。透明度由1,即不透明,渐变到0,即全透明。(3)火苗可以跳动是因为粒子发射器为立方体发射器。粒子从一个小立方体中随机发射出来,初始位置有细微不同,在运动过程中的路径也不完全相同。因此粒子系统最终的形状也就不一样,其快速变化就形成了跳动的火苗。图5.6火焰初始脚本图5.7火焰属性图5.8火焰动作脚本图5.9火焰效果图5.2.3滚滚浓烟比较真实的模拟了剧烈燃烧时产生的浓烟。上面厌恶在空中翻滚,由浓变稀,由小变大,色彩由黄变红再变黑,在空气中慢慢扩散。实现这个烟雾效果的方法如下:(1)由小变大,由浓变稀:粒子的初始方向在派/2在圆锥范围内随机生成,同时使用缩放特效,让粒子在运动中慢慢变大。(2)翻滚效果:使用旋转特效,让所有的粒子在运动中朝同一方向旋转。因此他们看起来是整个系统在旋转。(3)颜色的变化,可以看出,颜色由两次较大变化,使用颜色特效并应用两个渐变关键点图中展示的就是模拟炊烟的效果。还可用于模拟火灾时燃烧的场景,也可以模拟战场中爆炸后的剧烈燃烧和烟雾效果。图5.10烟的属性图图5.11烟效果图图5.12房屋群烟效果图5.2.4烟花的制作实现烟花效果的要点是:(1)爆炸时初始方向是随机的,烟花才能展开。(2)使用颜色特效让它慢慢在空中消失。(3)使用线性力特效让粒子系统收到一个向下的作用力,产生一个向下的加速度以制作下落的效果。图反映的分别是烟花爆炸到散开,再慢慢落下,最后消失在空中的景象,通过对参数的调整,可以制作具有不同颜色,不同形状,不同爆炸方式的烟花效果。图5.13烟花初始脚本图5.14—5.17烟花效果图5.2.5喷泉可视化效果的制作从图中可以看出,喷头分布在一个圆环形水管上。可以把每个喷头看作一个粒子发射器,喷出的水珠就是粒子。设置好一个粒子发射器后,可以复制到其它喷头上,只需变换一下发射器的位置和粒子的运动方向。在制作过程中,由两点很重要:一是喷泉从喷头出来后,受重力作用,喷出的是一条弧线,喷到一定高度后会落下来,要实现这个效果,需要为粒子系统添加一个线性力特效;二是要体现“喷”的效果,速度控制很重要。水粒子的运行速度要快,速度慢了就是“流”的效果。在virtools中的属性窗口中调整参数,对主窗口效果满意后保存粒子系统的参数到文件中,以备其它程序加载。图5.18水流初始脚本图5.19水流效果图图5.20喷泉效果图图5.21水花效果图5.3漫游系统中粒子系统与场景的合成粒子系统与场景的合成在virtools中进行。virtools是一个融合各种对象的可视化开发环境,这些对象包括一些规则的物体,也包括粒子系统模拟的不规则物体。对所有对象的位置,方向,缩放,旋转等属性进行调整,并把所有对象组合在一起,即可形成一个大的场景,把对象的属性保存到一个文件中即场景文件。在漫游系统的演示程序中,加载场景文件中的粒子系统时,就读取对应的参数传给粒子系统的对应接口,以完成粒子系统的加载。加载成功就可以在场景中漫游。粒子系统效果效果请观看本文附带光盘视频文件。图5.22系统结构图图5.23粒子系统分布图5.4视角相机的实现5.4.1两种选择方式:1)拖动鼠标左键,并在屏幕上拖出一个矩形框,如果粒子系统中心点在这个框内,粒子系统就被选中。在实现时用“鼠标左键按下”十“鼠标在窗口上移动”+“鼠标左键弹起”组合过程完成一次框选。实现框选要解决二维屏幕区域向场景三维空间的映射。展示了映射的原理。三维场景中相机的投影方式是射线投影,四条实线是相机投出的四条射线,与相机的远近截面组成的四棱堆内的物体是屏幕上显示的场景。屏幕上的虚线框是鼠标拖出的矩形,它从相机的位置向这个矩形的四个顶点引出的四条射线(图中用虚线表示)与相机远近截面相交.相交的区域用虚线框表示。四条虚线和截面上的两个虚线框组成的四棱锥就是选定的三维空间。通过粒子系统中心位置点即可判断粒子系统是否被选中。2)通过Tab键在多个粒子系统间切换。这种方法适合场景中粒子系统个数较少的情形。5.4.2粒子系统的移动移动粒子系统就是改变粒子系统中心点在三维空间中的坐标.由于相机是可移动的,用户移动粒子系统的实质上是让粒子系统相对于相机移动,而不是简单的坐标值改变。以粒子系统向前移动为例。粒子系统向前移动(即沿相机的正面移动)一个步长的步骤实现如下:1)获取当前粒子系统中心位置Position;2)获取相机当前方向Direction;3)获取当前相机移动步长MoveStep;4)算新的位置坐标Pos=Position+DirectionXMoveStep;粒子系统在其它方向上的移动与此类似。1.粒子系统的旋转粒子系统旋转的实现通过旋转矩阵相乘实现。它把要旋转的角度转化为旋转矩阵,然后与粒

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论