bevy_tickles
bevy_tickles copied to clipboard
Particle Systems in bevy
Bevy Tickles
CPU based Particle systems plugin for bevy inspired by Unity3D shuriken particle system.
This is a work in progress with many missing features, it is not suitable for production. As this lib is in very early stage, expect the API to change often
Usage
Add ParticlesPlugin to your bevy App
use bevy::prelude::*;
use bevy_particles::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugin(ParticlesPlugin)
.run();
}
You can then use ParticleSystemBundle to spawn particle systems.
Note: The particle modifiers are not included in the bundle,
insertthe modifiers you want to the particle system entity. (See the example)
Components
bevy_tickles provides two kinds of components:
- The Main Components which are part of the
ParticleSystemBundle - The modifiers which are optional effects on the particles or the entire system
Built-in modifiers
| name | description |
|---|---|
MaxParticleCount |
Limits the amount of particles (PERF) |
MaxParticleSize |
Limits the size of particles |
MaxParticleSpeed |
Limits the speed of particles |
ParticleGravity |
Adds a custom gravity force to particles |
SpeedOverTime |
Changes particle speed over time |
VelocityOverTime |
Changes particle velocity over time |
AngularVelocityOverTime |
Changes particle angular velocity (z rotation) over time |
OrbitalVelocityOverLifeTime |
Changes the particle velocity around the center over its lifetime |
LinearVelocityOverLifeTime |
Changes the particle velocity linearly over its lifetime |
SizeOverTime |
Changes particle size over time |
SizeOverSpeed |
Changes particle size over its speed |
RotationOverVelocity |
Rotates particles according to its velocity and direction |
RotationOverTime |
Rotates particles over time |
ColorOverLifeTime |
Sets color of a particle over time using a color gradient |
ColorOverSpeed |
Sets color of a particle over its using a color gradient |
PerlinNoise |
Uses a perlin noise to change particle velocity/Size/Rotation |
Common mistakes
- Rotating and scaling the particle system entity's
Transformis often a bad idea, prefer using theParticleEmitter::transformfield. - Using conflicting modifers like
ColorOverLifetime/ColorOverSpeedorSizeOverTime/SizeOverSpeedcan lead to unexpected behaviors
Cargo Features
inspector
This feature enables bevy_inspector_egui integration, allowing dynamic customization of your particle systems
Examples
- Basic example
Run with cargo run --example basic_example --features inspector

- Animated example
Run with cargo run --example animated_example --features inspector

- Explosion example
Run with cargo run --example explosion_example --features inspector

- Mesh example
Run with cargo run --example mesh_example --features inspector

TODO:
- [x] computed visibility with AAB
- [x] Duration/Looping/Infinite particle emission
- [ ] Complete modifier list
- [ ] Sub Emitters and callbacks (trails/death)
- [ ] Curves
- [x] Color gradients
- [ ] Multi camera support
- [ ] Lit particles
- [x] Perlin noise
- [x] Spread emission
- [ ] Emission Stop/Pause behaviors
- [ ] particle stretching
- [ ] examples of classic particle systems:
- [ ] Fire
- [x] Explosion
- [x] Mesh emission
- [ ] Sci Fi Shield
Contributions welcome !
Similar projects:
- bevy_hanabi: GPU based particles
- bevy_prototype_particles: CPU based particles