#bevy #graphics #particle

bevy_firework

CPU-driven, batch-rendered particle system for the Bevy game engine

8 releases (breaking)

Uses new Rust 2024

0.8.0 Oct 29, 2025
0.7.0 May 11, 2025
0.6.0 Jan 8, 2025
0.5.0 Jul 9, 2024
0.1.0 Feb 19, 2024

#312 in Game dev


Used in bevy_ballistic

MIT/Apache

185KB
2K SLoC

Rust 2K SLoC // 0.0% comments WebGPU Shader Language 255 SLoC // 0.1% comments

Crates.io Crates.io CI

Bevy Firework 🎆

Bevy firework is a particle system plugin where particles are simulated on the CPU and use GPU batching for rendering. This allows each particle system to be rendered in a single draw call (rather than one per particle).

While not as fast as a pure GPU-based particle system, this provides a massive speed-up from the naive approach to CPU-based particles (making it possible to render tens of thousands of particles without noticeable framerate drops) and maintains much of the flexibility of CPU-based particle systems (e.g. easy access to physics data for particle collision, simplified particle system animation).

collision example pbr example sparks example

Current features

  • Billboarded particles.
  • Configurable integration with Bevy's PBR rendering (i.e. particles can receive shadows, are affected by fog and lighting changes).
  • Particle collision with arbitrary avian colliders.
  • WASM and WebGL compatible.
  • Soft particle edges.
  • Animated properties: certain parameters can be defined as a custom curve to express changes over a particle's lifetime:
    • Scale
    • Color
  • Randomized properties: certain properties can be randomized, so that they are randomly sampled for every particle:
    • Particle lifetime
    • Initial linear velocity
    • Initial radial velocity
    • Initial scale
  • Emission shapes:
    • Point
    • Disk
    • Sphere
  • One-shot emission mode, or continuous emission.

Current limitations

  • Can't use custom images for particles.

Version table

bevy_firework bevy bevy_utilitarian avian
0.1 0.12 0.2
0.2 0.12 0.3
0.3 0.13 0.4
0.4 0.14 0.5
0.5 0.14 0.5 0.1
0.6 0.15 0.6 0.2
0.7 0.16 0.7 0.3
main 0.16 0.7 0.3

Dependencies

~59–105MB
~2M SLoC