mcpField
B
bevy-vfx

bevy-vfx

github.com/chrisgliddon開発2683 回インストール9 週間前に更新
リポジトリ

bevy-vfx について

Bevy 0.19向けのビジュアルエフェクトスキルです。パーティクル、フリップブック、シェーダー、ベクター図形、Gaussian splatsを扱い、Bevy開発者が描画要件やプラットフォームの制約に合わせて手法とcrateのバージョンを選べるよう支援します。

主な機能

  1. 01見た目やシミュレーション要件に応じた手法選択
  2. 02HanabiによるGPUパーティクルシミュレーション
  3. 03フリップブックやスプライトでのエフェクト作成
  4. 04WGSLマテリアルによるプロシージャル表現
  5. 05ベクター図形とGaussian splatsの描画

活用シーン

  1. 01Bevyシーンへのパーティクル追加
  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 — VFX

パーティクル、プロシージャルシェーダーエフェクト、フリップブック、ベクター図形、 およびガウススプラットシーンのレンダリングにこのスキルを使用します。

サポートされているクレートの組み合わせ

[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 はライター式を返します。モディファイアが式ハンドルを要求する場合は .expr() を使ってください。
  • Bevy UI と Hanabi はどちらも Gradient という名前の型をエクスポートするため、Hanabi の型は明示的にインポートしてください。
  • ParticleEffect はコンポーネントとしてスポーンします。必須コンポーネントが内部のレンダーワールド状態を提供するため、ParticleEffectBundle はありません。
  • Hanabi のシミュレーションではコンピュートシェーダーを使います。そのため、Web ビルドには WebGPU が必要です。スプライトのフリップブック、CPU パーティクル、互換性のあるカスタムマテリアルは引き続き WebGL2 の選択肢です。
  • bevy_gaussian_splatting 8 は WebGL2 と WebGPU をサポートしていますが、webgl2 の経路は上流で非推奨となっています。これを選ぶ前に、対象となるブラウザーと GPU の組み合わせを正確にテストしてください。
  • ガウススプラットは見た目がベイク済みです。Bevy の PBR ライティング、シャドウ、コリジョン、ナビゲーションが自動的に適用されるわけではありません。

参考資料

関連項目

  • bevy-pbr-materials — カスタムマテリアルと WGSL。
  • bevy-rendering — レンダラーのアーキテクチャとバックエンドの 選択。
  • bevy-cameras — フレーミングとレンダーターゲット。
  • bevy-wasm-webgpu — ブラウザーのバックエンド設定。
  • bevy-animation — パーティクルを使わないプロシージャルなイージング。

コメント