#bevy #particle #graphics #gamedev #cpu-gpu #game-engine

bevy_firework

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

5 releases (breaking)

0.5.0 Jul 9, 2024
0.4.0 Jul 8, 2024
0.3.0 Mar 5, 2024
0.2.0 Feb 21, 2024
0.1.0 Feb 19, 2024

#292 in Game dev

MIT/Apache

165KB
1K SLoC

Rust 1K SLoC // 0.0% comments WebGPU Shader Language 153 SLoC

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
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

Dependencies

~37–75MB
~1.5M SLoC