4个版本
0.1.0 | 2024年7月4日 |
---|---|
0.0.3 | 2024年6月30日 |
0.0.2 | 2024年6月27日 |
0.0.1 | 2024年6月26日 |
#345 in 游戏开发
240 每月下载量
83KB
2K SLoC
berdicles
bevy引擎的富有表现力的CPU粒子系统。
特性集
- 基于实例化的CPU粒子。
- 基于表达的非物理粒子特性。
- 使用bevy原生
Material
和Mesh
的熟悉设置。 - 粒子作为发射器。
- 基于网格的粒子尾迹。
- 产生其他粒子的粒子事件。
- 通过
ParticleRef
从同一模拟结果渲染多个。 - Billboard粒子。
不支持的功能
- GPU模拟。
- SIMD和类似优化。
- 第三方物理支持。
入门指南
添加一个ParticleSystemBundle
,这是一个包含ParticleInstance
的MaterialMeshBundle。
- 什么?
首先需要添加ParticleMaterialPlugin
,而不是MaterialPlugin
,它会设置不同的渲染管线。
我们只使用Material中的vertex_shader()
和fragment_shader()
,所以其余部分可以忽略。
这使用网格作为粒子形状和着色器进行实例化。在当前crate中已经设置了StandardParticle
,但您可以通过引用此着色器的源代码定义自己的Material
。
要创建一个ParticleInstance
,我们需要一个ParticleSystem
特质实现者和一个它所生成的Particle
。
基于特质的粒子
基于物理的粒子在大多数粒子系统实现中很常见,但在某些情况下可能难以使用。我们提供了一些替代方法来实现粒子,而不是将事物定义为速度、力或曲线。
impl Particle for SpiralParticle {
fn update(&mut self, dt: f32) {
self.lifetime += dt;
}
fn get_transform(&self) -> Transform {
Transform::from_translation(
Vec3::new(self.lifetime, 0., 0.)
).with_rotation(
Quat::from_rotation_y(self.lifetime)
)
}
fn expiration_state(&self) -> ExpirationState{
ExpirationState::explode_if(self.lifetime > 8.)
}
}
子粒子系统
SubParticleSystem
使用父粒子系统的粒子作为其他粒子的生成器。
- 添加
ParticleParent(Entity)
以指向父级 - 将下转型函数
as_sub_particle_system
添加到您的ParticleSystem
实现中。
是的,您可以无限地链接这些。
事件粒子系统
EventParticleSystem
可以监听事件,如粒子销毁或碰撞,并在事件上生成粒子。
- 添加
ParticleParent(Entity)
以指向父级 - 将
ParticleEventBuffer
添加到父级以记录这些事件, - 将下转型函数
as_event_particle_system
添加到您的ParticleSystem
实现中。
尾迹渲染
我们可以将尾迹作为网格渲染在粒子后面。
- 在您的粒子上实现
TrailedParticle
。 - 将
on_update
、detach_slice
和as_trail_particle_system
添加到您的ParticleSystem
实现中。 - 将
TrailMeshOf(Entity)
添加到MaterialMeshBundle
中以渲染它们。
版本
bevy | berdicles |
---|---|
0.14 | 最新版 |
许可证
根据以下任一许可证授权:
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任您选择。
贡献
除非您明确声明,否则任何根据 Apache-2.0 许可证定义的、有意提交以包含在作品中的贡献,都将如上双许可,无需任何额外条款或条件。
依赖
~37–73MB
~1.5M SLoC