290 likes | 449 Views
CO1301: Games Concepts. Lecture 15 Particle Systems. Dr Nick Mitchell (Room CM 226) email: npmitchell@uclan.ac.uk Material originally prepared by Gareth Bellaby. Particle systems. A particle system is a simulation of phenomenon such as smoke, rain or fire as a set of discrete particles .
E N D
CO1301: Games Concepts Lecture 15 Particle Systems Dr Nick Mitchell (Room CM 226) email: npmitchell@uclan.ac.uk Material originally prepared by Gareth Bellaby
Particle systems • A particle system is a simulation of phenomenon such as smoke, rain or fire as a set of discrete particles. • Discrete means separate. • The different type of effects are created by changing: • textures • blending • colour • physics of the system
Efficiency • Typically quads are used: • Faster than a model with depth. • Orientated towards the camera so that they always appear 3D.
Emitters • A particle system has an emitter. • Particles come out of the emitter. • They have an initial velocity. • They have a lifetime. • This could be dependent upon time (e.g. die after a certain point) or location (e.g. die when they hit the ground) • You could re-use a particle after it has died. A particle that has died is re-emitted. In this way the particles cycle around and around. A system has been created.
Basic physics of the system • The central concept is that particles have an initial velocity, and then gravityis then applied to them. • Gravity will change the velocity of the particle over time. • Different particles in the system will be moving at different speeds. • Gravity only affects the y-component. • You could apply other forces: • e.g. drag because of air resistance. • swirling because of wind.
Types of particle systems • The appropriate physics is applied to the particles. • No hard and fast rules: • It is a matter of aesthetics and the effect you want to achieve...
Fountain • Single point emitter. • Particles are emitted in a small fan. • Fast initial velocity. • Blue particles • Blend so that overlaid textures darken. • Physics is an initial velocity outwards. Gravity then pulls the particles downwards. • Gravity causes them to fall after a period. • Destroyed when hit the ground.
Smoke • Single point emitter • Grey particles. • Blend so that overlaid textures darken • Smoke gently rises (because smoke is light and the emitter is a heat source) • The air is hot so it rises and the smoke is light and gets carried along. • A small amount of gravity. • Destroyed after a certain amount of time. • Could use swirling, e.g. employ noise.
Rain • Surface emitter • Grey particle. • Maybe use a streak. • Blend with high transparency. • Probably little or no overlay. • Drop downwards with a constant velocity.
Fire • Red/yellow particles • Blend so that overlaid textures lighten. • Single emitter • Short lifetime. • Higher velocity. • Die quickly.
Explosion • Red/yellow particles • Single emitter. • May all be emitted at same time. Some may be delayed. • Emitted in all directions or in a wide fan. • High velocity. • See Steve Rabin, "Powerful Explosion Effects Using Billboard Particles", Game Programming Gems 5.
Particle maths • Velocity v is distance d divided by time t.
Particle maths • Constant acceleration is the rate of change in velocity: • So after a “period of time” the new velocity will be the old velocity plus the amount of change over that time period:
Particle maths • Need to look at velocity and acceleration • Velocity is units per second, e.g. metres per second • Acceleration is units per second per second, e.g. metres per second per second • This is important when taking time into account. • Using the frame time, apply the velocity but multiply the velocity by the frame time.
Particle maths • If we want to calculate the effect of acceleration: • calculate the new velocity using the frame time • apply the velocity and again multiply the velocity by the frame time. • Note the way that frame time is implicitly taken into account twice because it is units per second per second.
Programming: data structure • We could use an array to store all of the particles • The particles cycle around • We can use a dynamic data structure such as the STL <vector> class. • The <vector> class is like a dynamic array. • Dynamic in the sense that you can change it’s size on-the-fly at run-time. • It has nothing to do with the vectors of 3D graphics despite its name. • Why not research this yourself. • I may well add it to the summer work...
Euler integration • Stateful version. • Version you will use in the lab.
Euler integration • Expressed as a position
Varying the direction • Want all of the particles to have the same initial velocity. • Nice to have the particles "fan out" from the emitter. • Random element. • Offset in the along the x-axis. • Use the maths of right-angle triangles to calculate the components of the movement vector.
Closed function • There is an alternative way of thinking about the maths of particle systems. • Stateless version. • Used by Luna in his chapter on particle systems. • Simple. • Drawback is that it only uses the one acceleration: so you can't apply other physics to the particles in mid-movement.
Closed function • Do not need to record the velocity frame by frame. • Simply need the starting velocity, acceleration and the time passed since the particle was at that starting velocity.
Maths • Want to find the average velocity over a period of time. Acceleration is a constant. Therefore can do a simple average. • Average velocity is displacement over time
Maths • These are equivalent, so let's put them together.
Maths • Can substitute one of the earlier equations into this (from slide 13)
Other variants exist • May want sometimes to employ other variants. • Also useful to combine different accelerations. • See Latta and the maths books
References • Jeff Lander, "The Ocean Spray in Your Face", http://www.double.co.nz/dust/col0798.pdf • Lutz Latta, "Building a Million Particle System." In GDC 2004 Proceedings, http://www.2ld.de/gdc2004/ • Lutz Latta, "Everything about Particle Effects", www.2ld.de/gdc2007 • More articles at his site: http://www.2ld.de/ • John van der Burg, "Building an Advanced Particle System". http://www.gamasutra.com/features/20000623/vanderburg_01.htm
References • Van Verth, Essential Mathematics for Games and Interactive Applications: A Programmer's Guide. • Wendy Stahler, Beginning Math and Physics for Game Programmers • NVidia developers site • ATI developers site