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

bevy_firework

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

3 releases (breaking)

0.3.0 Mar 5, 2024
0.2.0 Feb 21, 2024
0.1.0 Feb 19, 2024

#649 in Game dev

Download history 233/week @ 2024-02-15 89/week @ 2024-02-22 89/week @ 2024-02-29 34/week @ 2024-03-07 3/week @ 2024-03-14 51/week @ 2024-03-28 23/week @ 2024-04-04

79 downloads per month

MIT/Apache

160KB
1K SLoC

Rust 1K SLoC // 0.0% comments WebGPU Shader Language 163 SLoC // 0.0% 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 bevy_xpbd 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

Dependencies

~39–81MB
~1M SLoC