Feature Preview: Particles

Flax gets new and shining features every update! This time we are adding complete particles system into the engine. This is a massive leap and makes the engine feature complete. You will be able to start using particles right in the upcoming Flax 0.5 Alpha, alongside other great enhancements.

Particles are one of the most essential part of modern games. Every time you see a fire, smoke, explosion or dust, you can be sure – those are particles. However, nowadays gamers and game developers are more demanding so we put lots of effort to create the particles system that will be able to bring more awesomeness to the games.

To do so Flax supports seamless CPU and GPU particles simulation, high performant rendering and provides a set of great tools for content creators. We know that visual effects are a major aspect of every game so we wanted to allow game developers to easily create particle emitters, define the simulations and construct everything from simple effects to complex particle systems. In this post, I will showcase major aspects and introduce you Flax particles system!



Particles system is literally huge, here is a shortlist of major aspects it accomplishes:

  • Particle systems and emitters
  • Instancing particle systems with automatic buffers pooling
  • CPU and GPU particles simulation
  • Artist-focused workflow
  • Animate-everything™
  • Drive parameters from code
  • Per-emitter particle attributes data layout
  • Reuse created content (eg. multiple instanced emitters inside the particle system)
  • Sampling texture to color or spawn particles using its data
  • Particle shaders
  • Particle collisions
  • Soft particles
  • Sprite, ribbon, mesh and light particles


From single particle to whole system

Everything starts with Particle Emitter asset. It contains a graph which defines how to spawn, simulate and draw particles. Various particle system implementations use modular blocks layout to define the particles but we wanted to push the limits even further and provide more flexibility to the users. By using surface graph (similar to materials and anim graph) artists can extend the default logic and create complex systems. It’s also easier to navigate around it and understand the logic.

Particle Emitter
Particle Emitter Graph

Particle Emitter graph always contains the main root node that is made of logic blocks divided into several groups:

  • Options – general particles settings (eg. simulation space)
  • Spawn – defines when and how many particles to spawn
  • Initialize – performs the initial setup for new particles
  • Update – actual particles simulation update called every frame
  • Render – defines how to sort and draw particles
Particle System
Particle System

Particle systems

Next step is to create Particle System. This asset contains a timeline and can be used to composite multiple emitters to create a complex visual effect. Also, particle systems can contain multiple instances of one emitter with adjusted parameters. This helps with robust content creation.

The final step is adding the particles into the game by spawning Particle Effect actor on the scene. It handles simulation and can be configured via scripts. We support both World and Local particles simulation which means that effect can be attached to the animated model bone or car exhaust pipe to handle realistic particles physics simulation.

Particles Features Tour

When new Flax version will be out we will also release the Particles Features Tour – a sample that showcases how to use particles system and which great things you can create with it. Here is a collection of a sneak peek preview gifs:

Light Particles
Heat Distortion Particles
Heat Distortion Particles

Get ready for it!

We hope you like this new feature! It’s coming soon with the fresh update. Upon the release, we will also add a new section to the Flax documentation which will help developers to start using particles in own games.

See you soon! Bye 🙂

Wojciech Figat

Lead Developer


Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *