mcpField
B
bevy-vfx

bevy-vfx

github.com/chrisgliddon开发2683 次安装9 周前更新
代码仓库

关于 bevy-vfx

这是面向 Bevy 0.19 的视觉特效技能,涵盖粒子系统、翻页动画、着色器、矢量图形和 Gaussian splats。它帮助 Bevy 开发者根据渲染需求与平台限制选择技术和匹配的 crate 版本。

主要功能

  1. 01按视觉与模拟需求选择特效方案
  2. 02使用 Hanabi 进行 GPU 粒子模拟
  3. 03通过翻页动画或精灵创建特效
  4. 04用 WGSL 材质构建程序化特效
  5. 05渲染矢量图形和 Gaussian splats

适用场景

  1. 01为 Bevy 场景添加模拟粒子
  2. 02制作可重复使用的火花或爆炸
  3. 03实现火焰、水或溶解效果
  4. 04展示烘焙光照的摄影测量场景

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/chrisgliddon/bevy-skills --skill bevy-vfx

安装后在 Claude Code 中输入/bevy-vfx确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
gaussian-splats.md
hanabi-2d-vs-3d.md
hanabi-anatomy.md
hanabi-modifiers.md
non-hanabi-vfx.md
performance.md
shader-effects.md

详细介绍

Bevy 0.19 — 视觉特效

将此技能用于粒子、程序化着色器效果、翻页动画、矢量形状和高斯泼溅场景渲染。

支持的 crate 组合

[dependencies]
bevy = "0.19"
bevy_hanabi = "0.19"
bevy_spritesheet_animation = "7.0.1"
bevy_vector_shapes = "0.13.1"

# The default feature set enables a nightly-only alias. This stable-Rust preset
# retains native file loading, PLY/gcloud formats, and CPU/GPU sort options.
bevy_gaussian_splatting = { version = "8.0.1", default-features = false, features = ["headless"] }

bevy_spark 0.2 面向 Bevy 0.18。不要将其添加到 Bevy 0.19 依赖图中。请使用 bevy_gaussian_splatting 8,或在单独的进程中隔离较旧的渲染器。

选择最精简的合适方案

需求技术
数千个独立模拟的粒子bevy_hanabi
可重复使用的命中火花、枪口焰或爆炸效果精灵表翻页动画
少于大约 100 个简单粒子Bevy Sprite 实体和一个系统
全表面的火焰、水、溶解或扭曲效果自定义 Material + WGSL
清晰的圆环、弧线、闪电或瞄准形状bevy_vector_shapes
基于摄影测量、烘焙光照的场景bevy_gaussian_splatting

Hanabi 标准效果

此模式使用与 Bevy 0.19 兼容的 bevy_hanabi 0.19 API:

use bevy::prelude::*;
use bevy_hanabi::prelude::{
    AccelModifier, Attribute, ColorOverLifetimeModifier, EffectAsset, ExprWriter,
    HanabiPlugin, ParticleEffect, SetAttributeModifier, SetPositionSphereModifier,
    SetVelocitySphereModifier, ShapeDimension, SpawnerSettings,
};

fn main() {
    App::new()
        .add_plugins((DefaultPlugins, HanabiPlugin))
        .add_systems(Startup, setup)
        .run();
}

fn setup(mut commands: Commands, mut effects: ResMut<Assets<EffectAsset>>) {
    commands.spawn((
        Camera3d::default(),
        Transform::from_xyz(0.0, 3.0, 20.0).looking_at(Vec3::ZERO, Vec3::Y),
    ));

    let writer = ExprWriter::new();
    let position = SetPositionSphereModifier {
        center: writer.lit(Vec3::ZERO).expr(),
        radius: writer.lit(1.0_f32).expr(),
        dimension: ShapeDimension::Volume,
    };
    let velocity = SetVelocitySphereModifier {
        center: writer.lit(Vec3::ZERO).expr(),
        speed: writer.lit(4.0_f32).expr(),
    };
    let lifetime = SetAttributeModifier::new(
        Attribute::LIFETIME,
        writer.lit(0.5_f32).uniform(writer.lit(1.5_f32)).expr(),
    );
    let age = SetAttributeModifier::new(Attribute::AGE, writer.lit(0.0_f32).expr());
    let gravity = AccelModifier::new(writer.lit(Vec3::new(0.0, -6.0, 0.0)).expr());

    let mut colors: bevy_hanabi::Gradient<Vec4> = bevy_hanabi::Gradient::new();
    colors.add_key(0.0, Vec4::new(4.0, 0.5, 0.0, 1.0));
    colors.add_key(0.5, Vec4::new(2.0, 1.0, 0.0, 0.8));
    colors.add_key(1.0, Vec4::new(0.5, 0.5, 0.5, 0.0));

    let effect = EffectAsset::new(
        16_384,
        SpawnerSettings::rate(200.0_f32.into()),
        writer.finish(),
    )
    .with_name("ember_burst")
    .init(position)
    .init(velocity)
    .init(lifetime)
    .init(age)
    .update(gravity)
    .render(ColorOverLifetimeModifier::new(colors));

    commands.spawn((
        Name::new("ember_burst"),
        ParticleEffect::new(effects.add(effect)),
        Transform::default(),
        Visibility::default(),
    ));
}

关键规则

  • 使用 ColorOverLifetimeModifier 前,先初始化 Attribute::LIFETIME 和 Attribute::AGE。
  • ExprWriter::lit 返回一个 writer 表达式;当修饰器需要表达式句柄时,使用 .expr()。
  • 显式导入 Hanabi 类型,因为 Bevy UI 和 Hanabi 都导出了名为 Gradient 的类型。
  • 将 ParticleEffect 作为组件生成。其必需组件会提供内部渲染世界状态;不存在 ParticleEffectBundle。
  • Hanabi 模拟使用计算着色器。因此,Web 构建需要 WebGPU。精灵翻页动画、CPU 粒子和兼容的自定义材质仍可使用 WebGL2。
  • bevy_gaussian_splatting 8 支持 WebGL2 和 WebGPU,但其 webgl2 路径已在上游弃用。选择前请测试确切的浏览器/GPU 组合。
  • 高斯泼溅具有烘焙后的外观:它们不会自动获得 Bevy PBR 光照、阴影、碰撞或导航功能。

参考资料

另请参阅

评论

支持 Markdown