Slideshare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.

Slideshare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.

4.
FX System: More than a Few Good Particles• FX Systems are at the core particle systems, for our purposes we require it to: • Allow multiple particle types at the same time • Be Fast and scale performance based on available resources • Allow wildly different particle behaviors • Multiple ways to generate particles • Easy to use by content creators • Able to interact easily with gameplay • Be able to be used for wildly different types of game worlds

6.
System Architecture• Object oriented style system FX Type FX Combo FX Particle FX Emitters• FX Types hold the information for the effect, FX Objects are instanced based on that information when a FX gets triggered and hold the specific instance mutable state information.

7.
Hierarchical Particle System• The FX Combo type is one of the core building blocks of the hierarchical particle system. – It can have up to 8 children of any FX Type, including more combos.

8.
Hierarchical Particle System• The FX Combo type is one of the core building blocks of the hierarchical particle system. – It can have up to 8 children of any FX Type, including more combos. – It’s properties indicate how, when and where children are created.

9.
Hierarchical Particle System• The FX Combo type is one of the core building blocks of the hierarchical particle system. – It can have up to 8 children of any FX Type, including more combos. – It’s properties indicate how, when and where children are created. – Children properties with the same name as the combo are relative to it’s parent, similarly root combo properties are relative to the action or object that triggered the effect.

10.
Hierarchical Particle System• The second key building block of the hierarchical particle system is the ability for any FX Type other than a combo to trigger a single child effect of any other FX type.

14.
FX Particle Types• Standard Geometric Particles: • FX Streamer: A long stripped rectangle that goes from a point of origin up in a given direction up to a given distance. • E.g. Laser sword or flame thrower.

15.
FX Particle Types• Standard Geometric Particles: • FX Mesh: Generates the indicated mesh and attaches to a particle that controls the look and position of the mesh. • Useful for debris, rockets, 3D UI elements,...

16.
Particle Types• Post-Processing and non directly visible particles: • FX Distortion : An axis aligned quad that applies a post- processing distortion effect mostly used to simulate heat and pressure waves. • FX Lens Flare : Generates a lens flare effect applied as a post-processing effect in the screen area covered by the effect. • FX Light: Generates a dynamic point light in the world for the duration of the effect. • FX Audio: Creates an audio source with the indicated sound at the particle position.

20.
Particle Generation• A single FX Type can be triggered either directly or from other FX Types – E.g. a single ring.• Using the FX Spray type to generate sets of FX Types with a common given behavior. – E.g a column of smoke – FX Sprays can be spawned by any other FX Type

21.
Particle Behavior• FX Visuals are separate from specific FX behavior. FX Type FX Environment Animation Curves Simple Dynamics Full Physics Simulation• Each FX Type can have a different FX Environment allowing particles in a single effect to react differently to their environment.

23.
Particle Behavior• Simple Dynamics: – We use Newtonian physics and Verlet integration on all simulation environments to compute new particle positions. – For ground collisions we calculate collisions directly against the terrain height map. – For collisions against objects first collisions are computed against the animated bounding boxes then against the actual object polygons if precise intersections are requested.• Full Physics Simulation: – FX Meshes being standard world objects, are able to use the standard game physics (Havok) to compute precise collisions against the environment if set up to do so.

25.
Pipeline: Object Editor• FX get hooked up with game actions in this tool.

26.
Pipeline: Object Editor• FX get hooked up with game actions in this tool. – Allows triggering FX from game data and gameplay events using a Data-Command-Action pattern. • Is an event based state machine system that is completely data driven. • Allows attaching FX to markers in objects and to trigger other fx based on game states data.

27.
Making it Fast• Problem: There can be thousands of particles of different types, blending modes and textures that need to be created and updated every frame. • Straight forward approach to render each particle separately produces too many render calls and context switches. • Updating and generating so many particles can take a lot of time in the CPU

28.
Making it Fast• Solution to reduce CPU cost: – Keep particle dynamics as simple as possible: • That means fake complex physics behaviors as much as possible with simple particle animations as much as possible and only use physics simulation for particles that really need it. – Multithread the particle update • Every frame the FX Manager spawns as many jobs as there are root FX Objects (FX Objects with no other FX Type as parent).

29.
Making it Fast: Batching• Solution to Render Cost: Batch Particles • Add all particle triangles to a single dynamic fat vertex and index buffers regardless of particle type. • Dynamic vertex buffer works as a circular buffer. • We do only 1 or 2 render calls per frame for all effects combined! (max 21845 particle triangles per render call)

30.
Making it Fast : Batching• Solution to Render Cost: Batch Particle • Pack FX textures in a texture atlas at load time to use a single shader and avoid texture switches. • Texture atlas is a cube map in d3d9 level HW

32.
Making it Fast: Batching• Supporting different modes in the same shader pass and using a unique blend state: – In shader code we compute the particle color and alpha depending on blend mode requested:

33.
Making it Fast : Deferred Rendering• Render in a buffer the nearest and furthest depth values during the depth pre-pass or the GBuffer pass.• Render the FX on a separate lower res buffer using alpha blending using the near and far values to determine if an effect should be drawn in the buffer or not.• Blend the FX buffer as full screen post- processing pass.

34.
Making it Fast : Weather FX• Besides the hierarchical system there is a specific separate System just for weather FX: – Solve a very specific problem in a very efficient way: • Falling Rain and Snow • Rain Splashes – Can be implemented in the CPU or completely on the GPU on recent hardware

36.
Making it Fast : Weather FXObservations:• Rain drops are only visible when close to the camera: • Particles only need to be computed inside the view frustum close to the camera: • Easier to reuse particles thus simplifying memory management by using a circular buffer for the particles.• There is really only one type of particle needed • Textured Quads

37.
Making it Fast : Weather FXObservations (cont):• It is really hard to see what specific falling drop produce a specific splash on an object at normal speed: • Means falling rain and rain splashes can use different non interdependant techiques for particle generation.

38.
Making it Fast : Weather FXFalling Rain and Snow Overall algorithm: • First Emit particles on an area in top of the view frustum and close to the camera.

39.
Making it Fast : Weather FXFalling Rain and Snow Overall algorithm: • First Emit particles on an area in top of the view frustum and close to the camera. • Calculate new positions for all particles

40.
Making it Fast : Weather FXFalling Rain and Snow Overall algorithm: • First Emit particles on an area in top of the view frustum and close to the camera. • Calculate new positions for all particles • If particle is outside of the view volume mark as dead and reuse.• Problem: moving the camera will show more particles on one side until new particles are generated on the side of the direction of the movement.

41.
Making it Fast : Weather FXFalling Rain and Snow Overall algorithm:• Solution: treat particles as an animated volumetric texture • If a particle goes out of the volume in one of the sides, just change the position as if it wrapped around the other side of the volume.

43.
Making it Fast : Weather FXFalling Rain and Snow Overall algorithm:• Solution: treat particles as an animated volumetric texture • If a particle goes out of the volume in one of the sides, just change the position as if it wrapped around the other side of the volume. • If a particle goes out of the volume in the bottom then reuse as a new particle.

45.
Optimizations: Weather FX• Rain Splashes algorithm • Generate random positions on the horizontal plane instead of the top of the camera:

46.
Optimizations: Weather FX• Rain Splashes algorithm • Generate random positions on the horizontal plane instead of the top of the camera. • Trace a ray at that particle point from a high altitude and find first intersection with the terrain or objects allowed to have splashes. • Emit Splash particle at that point.

47.
Optimizations: Weather FX• Problem: If camera moves then splashes would move over the terrain.• Solution: Let splash particles generated play their animation while they are visible by the camera once dead or out of the view frustum reuse for new particle in another position.

48.
Acknowledgements• Thanks to all the great FX Artists that keep pushing the limit of what the FX system can do and keep us busy with more ideas of how to make it better.• Thanks to all the countless programmers that have worked on the FX System its tools and pipeline over the years.