《电子技术应用》
您所在的位置:首页 > 其他 > 设计应用 > 面向对象的通用参数化粒子系统架构设计
面向对象的通用参数化粒子系统架构设计
王静秋
摘要: 结合面向对象的分析和设计方法,提出了面向对象的、参数化的通用粒子系统模型和架构设计。
Abstract:
Key words :

  摘  要: 结合面向对象的分析和设计方法,提出了面向对象的、参数化的通用粒子系统模型和架构设计。
  关键词: 粒子系统  自然模拟  面向对象  参数化

   自1983年W.T.Reeves将粒子系统引入到计算机图形领域后,国内外有关粒子系统的研究和应用已经比较广泛。粒子系统比较适合对模糊自然景物的模拟,如云、雨、雪、闪电、火焰、爆炸等。
  粒子系统基本思想包括:自然景物可以认为由有限的、离散的空间粒子(particle)组成;粒子具有一些自然属性(空间位置、速度、加速度、亮度、温度等);粒子是有一定寿命的,具有产生、变化、灭亡的过程;在不同应用中,粒子的属性变化大多遵循一定的规律,这种规律可以采用准确或近似的数学模型来描述。
    以往的研究通常是针对某种具体的模拟对象进行基于粒子系统方法的建模及解决计算机模拟实现中的算法或性能问题。本文通过研究粒子系统的原理,分析一些典型粒子系统应用的建模特点,提出一种通用的、参数化的粒子系统模型,并采用面向对象的设计方法给出了架构分析设计;并给出了用在解决真实感计算问题上的轻量级粒子的设计方法。
1  面向对象的参数化粒子系统建模
1.1 粒子、粒子系统、粒子系统应用

  在粒子系统理论中,被模拟的对象由空间中离散的粒子构成。粒子可以是空间中的一个点,也可以是一个有特定形状的图形单元。
  粒子系统应用(Particle System Aplication)是指采用粒子系统的方法,对模糊自然景物或对象进行的计算机图形模拟应用。在一个粒子系统应用中往往包含了一个或多个粒子系统。例如瀑布模拟,整个系统可以分成二个粒子系统。其中一个模拟下泻的瀑布(瀑布系统),另一个用来模拟瀑布下水花四溅、涟漪遍布的水面(水面系统)。这二个粒子系统具有独立性,例如它们所模拟的粒子是不同的,粒子属性的变化规律是不同的,其粒子的图形显示也是不同的;同时这二个粒子系统又存在一些关联性,如瀑布系统中的粒子在到达水面后将从瀑布系统中消失(死亡),但同时给水面系统增加了一个新的粒子。
1.2 粒子的属性
  在粒子系统中,粒子一般具有空间位置、速度、加速度、大小尺寸、颜色、亮度、热度、形状、生存期等属性。例如在采用粒子系统进行雪景模拟中,粒子就代表了一个实际的雪花,粒子的属性就模拟了一个真实雪花的物理属性,其属性的变化模拟了真实雪花的变化。
1.3 粒子的产生
  在粒子系统中,粒子是不断产生、变化和灭亡的。在某个时刻(Ti),新产生的粒子数量可以用以下公式描述:
   NP(Ti)=MNP(Ti)+Rand( )*VNP(Ti)
  其中:MNP(Ti)为在Ti时刻新产生粒子数目的平均值;VNP(Ti)为在Ti时刻新产生粒子数目的方差;NP(Ti)为在Ti时刻新产生的粒子数目;Rand( )为在[-1.0,1.0]上均匀分布的随机函数。
平均值和方差可以是常量,也可以是基于Ti的变量。
  在粒子系统中,对于新产生的粒子,其初始属性可以根据不同的模拟对象特点进行赋值。例如可以按以下公式赋值:
  Property(Ti)=MProperty(Ti)+Rand( *VProperty(Ti)
  公式中:MProperty是该属性的均值,VProperty是该属性的方差。以雪花系统为例,粒子的初始位置可以将空间一个平面(或三维空间)作为基准,随机分布。再例如烟花模拟中,烟花的各个粒子在某个时刻诞生在空间一个点(或者非常小的空间内),并且速度的绝对值和方向矢量可以用上述公式来表示。
1.4 粒子更新
  在自然景物模拟中,粒子的属性将随时间发生变化。变化的类型大致分为以下几种:
  (1)力学作用。如重力、风力、浮力等,将对粒子的位置、速度、加速度等属性产生影响。
  (2)热作用。如自然冷却、化学作用、热传递等,将影响温度、亮度、透明度等属性。
  (3)形状变化。如爆炸、分裂等,导致粒子增多或影响到粒子尺寸、形状、质量等属性。
对于力学作用,基本可以采用牛顿定律来描述。在具体应用中,根据实际情况还可以采用近似简化的表示。例如在雨景、雪景的模拟中,模拟空间范围时,可以认为粒子的下落在达到一定速度后,是按匀速运动的(VP(Ti)=VP(Ti-1))。
  对于热能相关的变化,可以认为其爆炸、获得能量、散热的过程按不同的速率曲线进行。例如在焰火模拟中,有些粒子可以认为是瞬间充分燃烧,能量获得最大值,然后按线性或非线性的散热曲线冷却。而有些粒子先在一个相对长的时间内逐渐获得热能,然后再按某种下降曲线冷却(变暗)。对于通用的参数化粒子系统, 就需要设计满足不同需要的模型结构,在应用时只要通过参数选择不同的热能变化类型即可。
  对于形状变化,往往涉及到新粒子的产生或消亡。例如焰火的爆炸,可以理解成一个粒子在消亡的同时有一批粒子产生并同时发生能量的变化。再如大片的雪花自然分成二片,意味着一个粒子的消失,二个新粒子的产生。
1.5 粒子死亡
  既然有粒子的产生和变化,必然就有粒子的消亡。
  粒子的消亡有以下几种类型:
  (1)空间位置静止。例如在雪景模拟的粒子系统中,当雪花降落到地面后,雪花的空间位置不再变化,此时它自身的视觉效果可以通过地面的其他方法来模拟,代表雪花的粒子就没有存在的必要了。
  (2)视觉效果消亡。例如在烟火、火焰模拟的粒子系统中,粒子有速度、热能、温度。粒子在运动的过程中,不断地散发热能,其亮度因此也在变化。当其亮度小于一定的阈值时,虽然粒子可能还在空间运动,但相对其背景已经影响不到视觉模拟。在这种情况下,该粒子对模拟已经没有价值,可以消亡。
  (3)生存期结束而消亡。有些粒子系统中,粒子有一个生存期属性。在到达生存期后,粒子也就可以死亡。生存期条件的采用又分二种情况:一种是在物理模拟中,本身就存在比较严格的生存期条件,例如生物对象;另一类是在物理系统的建模中,抽象出一个生存期的属性来作为一种简化、相对准确的描述。例如在焰火模拟中,以定义生存期的方式来简化模拟粒子的热能变化、亮度变化、时间变化。
  (4)超出视界的消亡。因为考虑到粒子系统的用途,在粒子超出观察范围后,也可以消亡。
2  面向对象的参数化粒子系统架构
  通过对粒子系统的理论分析并考虑到不同粒子系统应用的特点,有可能建立一种比较通用的粒子系统模型。这个粒子系统模型首先要实现一个通用的架构,将粒子系统分割成各个独立组件;其次要将粒子系统中常用到的结构、算法、组件实现参数化设计。这样在系统基础上,通过定制具体结构、算法、组件参数,满足各类不同需求的粒子系统应用。
  结合面向对象的分析和设计方法,本文提出了这种通用参数化粒子系统模型和架构设计。基于此架构可实现通用参数化粒子系统库。
  系统架构如图1所示,PartSystem表示一个完整的粒子系统(类)。PartSystem包含三大部分:PartManager(粒子数据管理器)、PartRender(粒子图形渲染器)、 Container(粒子容器)。其中Container是用于存储粒子数据,PartManager用于维护粒子的产生、变化、消亡,PartRender则根据不同粒子的属性和类别,采用不同的图形显示。

 


  PartManager对象包含了三个子对象:PartGenerator表示粒子产生器,可以模拟粒子的产生,可以定制粒子产生的平均值(可以是常数,或者是时间或其他参数的函数)、粒子产生的方差、粒子的初始位置(点、平面、空间参数)、粒子的初始速度(均值、方差、角度特点)等。对于一个PartManager(也就是一个PartSystem),可以有多个PartGenerator以表示多个粒子源。PartUpdator表示粒子更新器,一个PartSystem对象可以有多个PartUpdator。PartCleaner表示粒子消亡器,在PartCleaner中可以定制本文1.5节中提到的各种粒子消亡条件。
  一个粒子系统模块可以有多个粒子发生器、粒子更新器、粒子消亡器,亦即在一个粒子系统中,可以有多处粒子源、多个更新变化条件、多个粒子消亡条件。同时从图1中可以看到,粒子发生器、粒子更新器、粒子消亡器从基类中派生出很多子类,代表了已定制的不同类型的以上组件。例如,要从粒子消亡器基类中派生出基于空间位置条件的消亡器(SpaceCleaner),只要定制其条件位置参数即可;还有热能温度条件消亡器(HeatCleaner),只要定制其温度门限值即可自动将符合条件的粒子从Container中清除。

  PartRender类被设计用于图形显示,从中可以派生出不同的Render,如基于OpenGL或其他渲染器。此处PartRender可以设计成静态对象。针对不同的粒子(如雪花、雨滴、火花等),常用的显示参数、显示特性可以定制在PartRender模块中。
3 真实感计算和轻量级粒子
  在粒子系统实现中,常常会遇到实时计算开销过大的问题。产生这个问题的主要原因是:(1)粒子数量众多;(2)为了真实模拟粒子状态,粒子系统往往采用计算复杂度高的数学模型;(3)图形显示计算开销。
  解决以上问题的主要思路是:(1)减少粒子数量;(2)简化系统模型,降低计算复杂度,或在系统模型不变的情况下优化算法;(3)减少图形显示计算开销。
  针对第(2)种解决思路,可以采用优化建模的方法或者采用近似算法。例如三角函数可以通过查表法获得,从而避免进行三角运算。
  针对第(1)种思路,可以采用轻量级粒子(Flyweight Particle)的设计方法。在粒子系统中,有少部分粒子是真实粒子(Concrete Particle),其他粒子可以是一种轻量级粒子。每一个轻量级粒子其私有属性的数据很少,其他大部分属性数据可以索引到一个真实粒子上。这样在粒子数据更新运算的时候,只需要计算这少部分真实粒子的数据;在图形显示的时候,可以根据轻量级粒子和其索引的真实粒子数据进行图形显示。因此轻量级粒子的存储开销和计算开销都大大减少。这可以理解为在计算数据时只有少量的粒子,但在需要图形显示时仍有大量的粒子数据。
  设计中,在真实粒子上标记了链接在其上的轻量级粒子的数量。只要这个值大于1,则这个真实粒子即使达到了消亡条件也不能被清除。
  根据本文提出的面向对象的、通用的、参数化粒子系统架构,实现了通用粒子系统库。在此基础上,实现了几种典型的自然景象模拟。
参考文献
1   Reeves W T.Particlesystems——A technique for modeling a class of fuzzy objects.Computer Graphics,1983;17(3)
2   宋万寿,赖建伟.基于粒子系统方法的焰火及树木模拟.计算机辅助设计与图形学,1996;8(4)
3   杨子华,刘宏芳.基于粒子系统模型的自然景物生成技术应用研究.计算技术与自动化,1998;17(3)
4   张芹.基于粒子系统的火焰模型及其生成方法研究.计算机辅助设计和图形学学报,2001;13(1)

此内容为AET网站原创,未经授权禁止转载。