SweetDream
高歌一壶新酿酒,醉抱青山不必归。
 

开始以为粒子系统也和Fog一样有现成的函数,只要改变一下状态,设置一下就可以达到想要的效果,在看过NEHE的粒子系统和网络上的一些介绍后才知道,粒子系统是一步一步通过很基本的操作构造的。

粒子系统主要用来解决由大量按一定规则运动(变化)的微小物质组成的大物质在计算机上的生成与显示的问题。

每个粒子需要一些属性来和其他粒子区别。通常在一个系统中的所有粒子有一个相同的属性集。

有一些适用于粒子的典型属性:

1.位置(Position):粒子在哪里。

处理运动粒子的每个粒子系统都需要知道每个粒子的位置。

2.速度(Velocity):包括速率(speed)和方向(direction)

位置的改变依赖于速度。速度是一个矢量表明系统由多快和粒子的运动方向。每一时间间隔,速度用于改变粒子位置。

3.加速度(Acceleration)

    和速度作用于位置一样,加速度作用于速度。粒子的加速度通常适用于外力作用。外力经常是重力,或者是粒子间的引力或斥力。

4.生命值(Life)

    每个粒子都有着自己的生命值,随着时间的推移,粒子的生命值不断减小,直到粒子死亡(生命值为0)。一个生命周期结束时,另一个生命周期随即开始,有时为了使粒子能够源源不断地涌出,必须使一部分粒子在初始后立即死亡。

5.衰减(Decay)

    就象人会衰老一样,每个粒子也有它自己的生命周期,Decay就是用来控制粒子生命周期的一个物理量。

 

性能和需要

  高级粒子系统可能会需要大量的代码,所以设计好数据结构是非常重要的。此外必须牢记如果设计欠佳,粒子系统会大幅降低刷新率,并且大多数的性能问题是由粒子系统带来的内存管理问题引起的。

  设计粒子系统时首先应该明白粒子系统大大增加每帧的可见多边形数量。每个粒子可能需要四个顶点和两个三角形。以此计算,一个场景中的2,000个可见的雪花粒子将增加4,000个可见的三角形。又因为大多数粒子是运动的,我们不能预先计算顶点缓冲,所以每一帧,定点缓冲都需要被改变。

技巧在于只执行尽量少的内存操作(分配和释放)。这样,如果一个粒子在一定时间后消亡,不要急着从内存中释放。相反,用一个标志来记录它是死亡还是重生(重新初始化)。然后当所有的粒子都被标为死亡时,释放整个粒子系统。(包括系统中的所有粒子),如果系统是定常的,那么使系统保持存活。如果你想要重建系统或只想假入一个新的粒子,你应该根据粒子所属的系统使用相应的默认设置/属性来自动初始化粒子。

 

粒子系统最基本思想:

Particle System可以说是一种基于物理模型来解决问题的方法,Imagic认为它的核心不是在于如何显示,而是在于对微小物质模型的规则提取。比如在水波算法中,能够总结出X0'=(X1+X2+X3+X4)/2-X0这个公式(参见Ripple一文),才是整个算法的精华所在。只有基于物理模型的方法,才能模拟出随机而逼真的自然景象。

 

posted on 2006-03-02 11:02  SweetDream  阅读(4004)  评论(0编辑  收藏  举报