itdog's profile苍蝇拍BlogLists Tools Help

Blog


    March 05

    [zz]Particle System Overview [粒子系统概述]

     


    早认识Particle System还是从OverClock的主页上(当时叫DirectX Guide,现在已改名为Fractal3D,http://fractal3d.yeah.net),当时上面介绍了一个老外研究出来的水波算法。如果你是搞图形编程的,你就会知道如果用常规的精确算法在电脑上实时模拟水波的形态,几乎可以说是不可能,但是运用这个算法却能在一台配置极差的电脑上实现这一景象,的确是让我感到非常惊讶。但要知道,越是效率高的代码越是难于理解,一开始,我简直搞不明白为什么简单的几行代码就可以实现这种效果,研究了好几天,这才恍然大悟、茅塞顿开(用释加摩尼的话说是大彻大悟,用马克思的话说是量变引起质变),使我对Particle System有了最初之体验。

    实,老外在80年代初就提出了Particle System的方法(时间?人物?待查...),主要用来解决由大量按一定规则运动(变化)的微小物质组成的大物质在计算机上的生成与显示的问题。Particle System的应用相当广泛,大的可以模拟原子弹爆炸,星云演化,小的则可以模拟水波、火焰、烟火、云雾等等,而这些自然现象用常规的图象算法(如调色板动画、动画贴图、基于多边形的渲染、光线跟踪渲染)是很难逼真再现的。

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

    子运动(变化)的规则可以很简单也可以很复杂,这取决你所模拟的对象。举例来说,在对FireWorks(烟火)的模拟中,我们可以让烟火由上百个小的粒子组成,每个粒子都具有以下一些属性及其规则(对各个属性施加不同的规则,就可以获得不同形态的烟火):

    • Coordinate(坐标)
      在烟火爆炸的时刻,每个粒子都有一个相同的初始坐标,随着时间的推移,粒子的新坐标将由它的旧坐标和加速度来求得
    • Velocity(速度)
      每个粒子都有一个随机产生的初始速度,粒子的新速度由加速度和空气阻尼来求得
    • Acceleration(加速度)
      在烟火中,每个粒子的加速度都等于重力加速度
    • Color(颜色)
      粒子颜色取决于粒子的速度或生命值的大小
    • Life(生命值)
      每个粒子都有一个初始的随机生命值,这个值将随着时间的推移而逐渐减小,直到等于0

    会发现,Particle System中的粒子与C++中类的概念有些类似,实际上你完全可以将它当成类来处理,一个粒子就是一个类的实例对象,只不过有时在涉及程序优化的具体细节上,你需要放弃使用类,而使用简单而快速的紧凑代码。

    Particle System虽然在处理大量单独粒子的运动(变化)上很有用处,但是一涉及到需要考虑粒子间相互作用的场合,因为这时的计算量呈粒子数量的指数级增长,它就显得有些力不从心了。比如在模拟有相互引力作用下的大量星体的运动,大量粒子的相互碰撞等。

    文只是对Particle System的一些简要介绍,要深入理解Particle System,还是需要多看一些例子,编一些程序。

    Comments

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    Trackbacks

    The trackback URL for this entry is:
    http://hitwf.spaces.live.com/blog/cns!171F582F00B3BA89!124.trak
    Weblogs that reference this entry
    • None