Successfully reported this slideshow.
Your SlideShare is downloading. ×

Relic's FX System

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 49 Ad

More Related Content

Slideshows for you (20)

Viewers also liked (20)

Advertisement

Similar to Relic's FX System (20)

Recently uploaded (20)

Advertisement

Relic's FX System

  1. 1. Relic’s FX System: Making Big Battles Come Alive Daniel Barrero, PhD Senior Graphics Programmer Relic Entertainment - THQ Korea Game Conference – KGC 2012 – October 8 2012
  2. 2. Introduction • Video/Screenshots of fx
  3. 3. Relic’s FX System Lineage Direct Descendant Influenced By Custom Port
  4. 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
  5. 5. Relic’s FX System Features • Broad variety of particle types • Hierarchical Particle System • Cascading FX (Trigger other FX and game actions) • FX Batching ( just 1 to 2 render calls to render everything ) • Multiple Particle Behavior environments • Lit particles • Soft/Volumetric Particles • Explicit draw particle order within a particle system • Forward and Deferred renderer support. • Automatic texture atlas generation on load • Animated texture support • Efficient memory management • In camera and Post-Processing FX
  6. 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. 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. 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. 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. 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.
  11. 11. FX Particle Types • Standard Geometric Particles: • FX Ring: just a simple standard textured quad. • The most common type of particle. E.g. Smoke, Explosions, Clouds, Ground effects, UI…
  12. 12. FX Particle Types • Standard Geometric Particles: • FX Beam: a long stripped rectangle that goes from a point of origin to a specific destination point following a curve. • E.g. a Laser beam
  13. 13. FX Particle Types • Standard Geometric Particles: • FX Trail: A curved flat shape that follows the path created by the movement of the fx emitter. • E.g. A constantly growing ribbon like Homeworld engine trails
  14. 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. 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. 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.
  17. 17. Particle Rendering: Blend Modes • Having an explicit draw particle order within a particle system allows having per particle alpha blended or additive blending modes: Particle Particle Background Particle Screen Alpha Inv-Alpha Additive: + = Alpha Blend: * + * =
  18. 18. FX Particle Types: Lighting • Lighting style affects particle triangulation. – E.g for a FX Ring: Geometry Render Unlit / Flat Lit (Pyramid)
  19. 19. Particle Rendering: Orientation • Orientation relative to world or parent. • Billboarding: – Spherical – World Axis Constrained • Follow Terrain
  20. 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. 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.
  22. 22. Particle Behavior • Animation Curves: – Any particle parameter can be animated using key framed animation.
  23. 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.
  24. 24. Pipeline: FXEditor • FX Editor is where individual effects get created.
  25. 25. Pipeline: Object Editor • FX get hooked up with game actions in this tool.
  26. 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. 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. 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. 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. 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
  31. 31. Making it Fast : Batching • Supporting different modes in the same shader pass and using a unique blend state: – FX Textures are all pre-multiplied alpha. – Blend state is set to a custom additive + blend state: – Screen Color = Particle Color + Screen Color * Particle Alpha • Use separate alpha blend state: – Screen Color = Particle Alpha * Inv Particle Alpha + Screen Alpha
  32. 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. 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. 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
  35. 35. Making it Fast : Weather FX
  36. 36. Making it Fast : Weather FX Observations: • 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. 37. Making it Fast : Weather FX Observations (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. 38. Making it Fast : Weather FX Falling Rain and Snow Overall algorithm: • First Emit particles on an area in top of the view frustum and close to the camera.
  39. 39. Making it Fast : Weather FX Falling 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. 40. Making it Fast : Weather FX Falling 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. 41. Making it Fast : Weather FX Falling 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.
  42. 42. Making it Fast : Weather FX • Volume particle tiling CPU code: • Volume particle tiling GPU (Vertex Shader) code
  43. 43. Making it Fast : Weather FX Falling 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.
  44. 44. Optimizations: Weather FX • Rain Splashes algorithm • Also treats splashes as an animated volumetric texture that tiles in world space.
  45. 45. Optimizations: Weather FX • Rain Splashes algorithm • Generate random positions on the horizontal plane instead of the top of the camera:
  46. 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. 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. 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.
  49. 49. Thank you • Questions? • Contact Information: • daniel.barrero@gmail.com • http://danielbarrero.com

Editor's Notes

  • Add images of each type and some details of how each is implemented
  • Add images of each type and some details of how each is implemented
  • Add images of each type and some details of how each is implemented
  • Add images of each type and some details of how each is implemented
  • Add images of each type and some details of how each is implemented
  • Add images of each type and some details of how each is implemented
  • Video of rain splashes here

×