#粒子 #bevy

berdicles

bevy引擎的富有表现力的CPU粒子系统

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 游戏开发

Download history 410/week @ 2024-06-24 176/week @ 2024-07-01 7/week @ 2024-07-08 207/week @ 2024-07-29

240 每月下载量

MIT/Apache

83KB
2K SLoC

berdicles

bevy引擎的富有表现力的CPU粒子系统。

特性集

  • 基于实例化的CPU粒子。
  • 基于表达的非物理粒子特性。
  • 使用bevy原生MaterialMesh的熟悉设置。
  • 粒子作为发射器。
  • 基于网格的粒子尾迹。
  • 产生其他粒子的粒子事件。
  • 通过ParticleRef从同一模拟结果渲染多个。
  • Billboard粒子。

不支持的功能

  • GPU模拟。
  • SIMD和类似优化。
  • 第三方物理支持。

入门指南

添加一个ParticleSystemBundle,这是一个包含ParticleInstanceMaterialMeshBundle

  • 什么?

首先需要添加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_updatedetach_sliceas_trail_particle_system 添加到您的 ParticleSystem 实现中。
  • TrailMeshOf(Entity) 添加到 MaterialMeshBundle 中以渲染它们。

版本

bevy berdicles
0.14 最新版

许可证

根据以下任一许可证授权:

任您选择。

贡献

除非您明确声明,否则任何根据 Apache-2.0 许可证定义的、有意提交以包含在作品中的贡献,都将如上双许可,无需任何额外条款或条件。

依赖

~37–73MB
~1.5M SLoC