🎆 Bevy Hanabi
Hanabi — a GPU particle system for the Bevy game engine.
Overview
The Hanabi particle system is a modern GPU-based particle system for the Bevy game engine. It focuses on scale to produce stunning visual effects (VFX) in real time, offloading most of the work to the GPU, with minimal CPU intervention. The design is inspired by modern particle systems found in other industry-leading game engines.
🚧 This project is under heavy development, and is currently lacking both features and performance / usability polish. However, for moderate-size effects, it can already be used in your project. Feedback and contributions on both design and features are very much welcome.
Usage
The 🎆 Bevy Hanabi plugin is only compatible with Bevy v0.6.
System setup
Add the HanabiPlugin to your app:
use *;
default
.add_plugins
.add_plugin
.run;
Create a particle effect
Create an EffectAsset describing a visual effect:
Add a particle effect
Use a ParticleEffectBundle to create an effect instance from an existing asset:
commands
.spawn
.insert
.insert_bundle;
Examples
See the examples/ folder.
Gradient
Animate an emitter by moving its Transform component, and emit textured quad particles with a ColorOverLifetimeModifier.
cargo run --example gradient --features="bevy/bevy_winit bevy/png"

Force Field
This example demonstrates the force field modifier ForceFieldModifier, which allows creating some attraction and repulsion sources affecting the motion of the particles.
cargo run --example force_field --features="bevy/bevy_winit"

Activate
This example demonstrates manual activation and deactivation of a spawner, from code (CPU). The circle bobs up and down in the water, spawning square bubbles when in the water only.
cargo run --example activate --features="bevy/bevy_winit"

Spawn
This example demonstrates three spawn modes:
- Left: Continuous emission with a fixed rate (particles/second).
- Center: One-shot burst emission of a fixed count of particles.
- Right: Continuous bursts of particles, an hybrid between the previous two.
It also shows the applying of constant force (downward gravity-like, or upward smoke-style).
cargo run --example spawn --features="bevy/bevy_winit"

Spawn on Command
This example demonstrates how to emit a burst of particles when an event occurs. This gives total control of the spawning to the user code.
cargo run --example spawn_on_command --features="bevy/bevy_winit"

Circle
This example demonstrates the circle spawner type, which emits particles along a circle perimeter or a disk surface. This allows for example simulating a dust ring around an object colliding with the ground.
cargo run --example circle --features="bevy/bevy_winit bevy/png"

Random
This example spawns particles with randomized parameters.
cargo run --example random --features="bevy/bevy_winit"

Feature List
- Spawn
- Constant rate
- One-time burst
- Repeated burst
- Spawner resetting
- Spawner activation/deactivation
- Randomized spawning parameters
- Initialize
- Constant position
- Position over shape
- cube
- circle
- sphere
- cone
- plane
- generic mesh / point cloud (?)
- Random position offset
- Constant velocity
- Random velocity
- Constant color
- Random color
- Update
- Motion integration
- Apply forces
- Constant (gravity)
- Force field
- Collision
- Shape
- plane
- cube
- sphere
- Depth buffer
- Shape
- Lifetime
- Size change over lifetime
- Color change over lifetime
- Face camera
- Face constant direction
- Render
- Quad (sprite)
- Textured
- Generic 3D mesh
- Deformation
- Velocity (trail)
- Quad (sprite)
- Debug
- GPU debug labels / groups
- Debug visualization
- Position magnitude
- Velocity magnitude
- Age / lifetime
Compatible Bevy versions
The main branch is compatible with the latest Bevy release.
Compatibility of bevy_hanabi versions:
bevy_hanabi |
bevy |
|---|---|
0.1 |
0.6 |