mcpField
S
scenario-unreal-vfx

scenario-unreal-vfx

github.com/scenario-labsクリエイティブ・メディア1.2k198 回インストール1 日前に更新
リポジトリ

scenario-unreal-vfx について

Unreal の Niagara エフェクトと Chaos 破壊表現向けのスキルです。パラメーター付きテンプレート、マテリアル、Dataflow レシピから、タイミング、視認性、性能評価まで扱います。キャプチャの採点とスレッド別計測で結果を確認します。

主な機能

  1. 01ゲームプレイのパラメーターに基づくエフェクト時系列の設計
  2. 02テンプレートと User パラメーター契約の利用
  3. 03Niagara Effect Type とスケーラビリティの設定
  4. 04Chaos 破壊レシピの作成と物理設定の確認
  5. 05キャプチャのレビューとスレッド性能の計測

活用シーン

  1. 01ダメージ範囲とヒット時刻に合ったエフェクト制作
  2. 02多数のエフェクトに対するプールと予算の設定
  3. 03調整可能な Chaos 破壊アセットの構築
  4. 04対象ハードウェアでの見た目と性能の評価

MCP 対応

README では、このスキルと MCP の関係について説明していません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/scenario-labs/skills --skill scenario-unreal-vfx

インストール後、Claude Code で/scenario-unreal-vfxを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
critique.md
expert-notes.md
gui-paths.md
procedures.md
sources.md
scripts/
ue_vfx.py

詳細

Unreal VFX(Niagara、Chaos 破壊表現、VFX の批評)

エキスパートレベルとは、プレイヤーに真実を伝えるエフェクト(どこでダメージを受け、いつ終わったか)であり、ゲームプレイ上のクラスで許容されるコストをワールド全体で守り、対象のコア数でスレッドごとの数値を示し、明文化された評価基準に照らしてキャプチャを採点して実証されたものです。Python では Niagara のエミッターやモジュールを作成できません(5.8 API)。そのため、エージェントは User パラメーターの契約を定めたテンプレート、Material Instances、Effect Types、Dataflow のレシピを使用し、必要最小限のグラフ編集は正確な GUI 操作の依頼としてエスカレーションします。ここに記載された関連スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください(npx skills add scenario-labs/skills --skill <name>)。無人で作業する場合は、ツールのスキーマを基に進め、不足している点を明示してください。

必須の背景知識: scenario-unreal-expert(チャネル、レビューの反復、5.8 の落とし穴)。

ステータス(2026-09-24): Unreal はインストールされていません。オフラインチェックは成功します(python3 tests/code/unreal-vfx/run_all.py --offline)。エディター内のすべてのスニペットはまだ Unreal で実行されていません。job_00_vfx_probe.py が [verify] の名前を確認します。

スタンス(専門家から得られた重要な知見)

  • ゲームプレイ上の真実を最優先します。 最も強い輪郭は衝突境界(ミサイルの先端、AoE の縁)に置き、ゲームプレイ上の数値(User.Radius = ダメージ半径)を読み取ります。手動で合わせた定数は決して使いません。残り続ける表現は「まだ危険だ」と伝えます(Keyser #1 [00:09:44], [00:15:21])。
  • コントラストは画面上の予算です。 コアは白に近づけますが、純白にはしません。周縁は高彩度にし、暗く彩度の高いハローを付けます。コントラストは先端で最大にします。弱い飛翔体には、軌跡を明るくするのではなく、より高温に見えるコアと暗いウィスプを使います(Keyser #3 [00:08:13], [00:12:03]; #4 [00:19:55])。予期しない白さは、加算合成の重複が積み重なっていることがほとんどです。色を調整する前にスポーン数を数え、その後、加算合成のコアをアルファブレンドした高彩度のレイヤーで補います(Shishido [00:17:42]-[00:18:14])。
  • タイミングが物語を伝えます。 予備動作はキャラクターの詠唱アニメーションに合わせます(その時間がない場合は、減衰に見どころを持たせます)。ビルドアップは着弾と同時にスポーンを停止し、フラッシュは着弾フレームで最大になります(「強度はサイズではありません」)。結果は原因の後に続きます(フラッシュ、次に破片と火花、その後に煙)。消散はビルドアップより短くし、ゲームプレイの有効時間内に終わらせます。速い弾丸状の先端はストロボのように見えるため、速度方向に引き伸ばし、モーションブラーをテクスチャに焼き込みます(Keyser #5 [00:08:13]-[00:09:54], [00:14:34], [00:18:07]; #2 [00:03:31]; Shishido [00:30:00], [00:37:02])。
  • エフェクトではなく、ワールドを最適化します。 まずすべてのシステムに Effect Type を設定します。Lyra では、見た目を変えずにアクティブなシステムが 227 から 103 に減り、RT は 5.07 ms から 1.51 ms になりました(Kiraly [00:20:48])。Effect Type はエミッターごとではなく、システムごとに設定します。セカンダリエミッターには Scalability Mode Self を設定します。ターゲットのコア数で GT、GT Concurrent、RT を個別に確認し [00:05:15]、該当スレッドの負荷を軽減する手段を選びます。距離によるカリングはレンダリングではなくティックを停止しますが、チェックにはスケーラビリティマネージャーの処理コストがかかります。カリングプロキシはティックを節約しますが、RT は節約しません [00:16:57], [00:18:02]。GPU システムは、見えていなくてもすべて RT ディスパッチのコストがかかります [00:05:47]。FX 予算は重要度の低いタイプにのみ適用し、振動を抑えるために fx.Budget.AdjustedUsageDecayRate を使用します [00:36:50]-[00:37:21]。
  • クラスと発生頻度に応じてスポーンの構成を選びます(Kiraly の表 [00:45:57])。中程度のワンショットにはプールを使います(Manual Release は Release to Pool を意味します)。大量発生には Data Channel リスナーを使います。単純なバーストには、システム状態をオフにしたステートレスエミッターを使います(足音の GT が 1,387 us から 271 us に減少 [00:39:24])。NDC とステートレスは併用できません。少量なら CPU に残します。
  • 破壊のコストは、アクティブなボディ数と接触数で決まります。 次の順で対処します。レンダリング(GC に Nanite を適用し、ISM レンダラーを使ったルートプロキシを設定)、ボディ数と寿命(クラスター、ランダムタイマーと Cluster Crumbling を併用した Remove on Break、プラットフォームごとの削除倍率、Tiny Geo)、コリジョン(片方向の破片、クラスターごとに凸形状を 1 つ、相対サイズ 0.3 未満のボックス)、スロットリングは最後に行います(Caillaud wPgd1J1Tf70 [00:03:47]-[00:16:18]; Xiao Yue zFiHDRREv7E [00:29:27])。
  • 武器はフィールドではなく、ひずみで壁を破壊します。 External Strain と Apply Breaking Linear Velocity を適用し、飛翔体の速度に応じてスケーリングします。ひずみの減衰は設定しません。フィールドは「重く、遅い」ものです(Van Allen [00:29:29])。ダメージモデルは 1 つ選びます。Material Strength and Connectivity(物理マテリアルの引張強度を調整)か、レベルごとの閾値(配列を調整)です。サイズ別設定はフラグであり、モデルではありません(Xiao Yue [00:19:54]-[00:20:27])。重量感は摩擦(Max を選択)と低い反発係数から生まれます。石の密度は 2 g/cm3 です。2000 は単位の誤りです(Van Allen [00:26:11])。
  • クリックではなく、レシピを使います。 パラメーターを公開したテンプレートと、アセットごとの変数を備えた Dataflow グラフは、アートの変更にも対応し、エージェントが確実に扱えるものです(Caillaud t_jyTILDYo8 [00:02:46])。

最初に確認すること

入力計画が変わる理由指定がない場合のデフォルト
プラットフォーム、フレームレート、最低仕様のコア数スレッドごとの予算、品質テーブルPC 60 fps;コア数は scenario-unreal-performance に基づき、不明な場合は 4(Kiraly)
ゲームプレイの数値(scenario-unreal-gameplay)半径、速度、ダメージウィンドウ、発射速度、同時発生数の上限、詠唱アニメーションのタイミング確認する;半径は決して推測しない
カメラと環境実際の地面の色を背景に、ゲームプレイ時の距離から読み取るゲームのカメラとレベル
スタイルの柱、重要度ティア明るさの予算:待機、基本、防御、ダメージ、ゲームチェンジャー、アルティメット(Keyser #1 [00:13:08])アートリードが定める 3 つの柱
群衆と破壊の範囲画面上の複製数;レベルごとの壁の数、破壊必須のオブジェクト、ローエンドのプラットフォーム現実的な最悪の戦闘;リアルタイム、Nanite を有効化
予算エフェクトごとの ms を示す情報源はない[追加] すべての Niagara を、最低仕様で約 2 ms GT + GT Concurrent 以下、かつ 1.5 ms RT 以下にする;scenario-unreal-performance で確認

ワークフロー

  1. エンジンごとに 1 回プローブします。 job_00_vfx_probe.py(ヘッドレス)。ゲート:probe.json が [verify] 項目に回答していること。

  2. 要素を分類し、システムにグループ化します。 要素ごとに classify_element を実行し、その後 system_plan を実行します。システムごとに 1 つの Effect Type(最も重要な要素のもの)を設定し、残りは Scalability Mode Self にするか、スパムのように発生する場合、または GPU 上で動作する場合は、独自のシステムにします。

    システム(例)Effect Type重要なエミッター二次要素(Scalability Mode Self)
    Projectile、beam、tracerNET_OneShotCriticalheadtrail、wisps、embers
    Impact、hit、muzzle flashNET_OneShotCriticalflash、damage ringsmoke、sparks(スパムのように発生する場合、または GPU 上で動作する場合は分割)
    Debris または impact listener(NDC)NET_OneShot、decay damping がある場合のみ予算対象なしすべて
    AoE、status、pickupNET_PersistentCriticalriminterior flavor
    環境の dust、leaves、rainNET_Ambientなしすべて

    ゲート:system_plan にエラーがないこと。

  3. 作成前にタイミングを計画します。 スポーンスケジュール(キャストアニメーションからの予備動作、ヒットに向けた立ち上がり、ヒット時のフラッシュ、破片と火花、煙、終了時間)を記述し、spawn_schedule_verdict を実行します。strobe_risk(speed, head length) で、高速な先端に必要な伸長を確認します。 GATE:エラーがなく、伸長がテンプレート仕様に含まれていること。

  4. テンプレートと契約。 duplicate_template、user_parameters、contract_verdict を実行します。制御項目が不足している場合は、GUI でリクエストを 1 件作成します。そのリクエスト内のカーブは、fade_curve_verdict(寿命の中盤から不透明度がフェードし、縮小のみにならないこと)と flipbook_playback_verdict(速く再生してから遅くすること)に合格する必要があります。 GATE:契約が OK であること。

  5. 見た目:マテリアルとテクスチャ。 scenario-unreal-materials のマスターマテリアルとインスタンス(エロージョン、グラデーションマップ LUT、デプスフェード)を使用します。まずテクスチャを再利用し(Trümpler [00:16:33])、グロー、LUT、ノイズは Python で生成します。マスクは sRGB をオフにして TEXTUREGROUP_Effects でインポートし、大きなソースは Maximum Texture Size で上限を設定します。ベイク済みフリップブックはプリマルチプライドされているため、マテリアルで RGB を A で割る必要があります(premultiplied_check)。煙と炎には、デフォルトでベイク済みフリップブックを使用します。Fluids は Beta です。 GATE:audit_vfx_textures と flipbook_check に問題がないこと。

  6. システムプロパティとスケーラビリティ。 set_system_properties を使用します。effect_type、max_pool_size は該当タイプのシステム上限に設定し、再生途中でのロードに備えて prime を 0 に、warmup を 0 に設定します。静的エフェクトでは current-frame data をオフにします。ワールド空間のトレイルには、速度 x 寿命に基づく固定範囲が必要です(fixed_bounds_check)。EFFECT_TYPE_PRESETS の Effect Types を使用します(create_effect_type [verify] または GUI で一度設定)。 GATE:audit_niagara に NO_EFFECT_TYPE がなく、caps_verdict と budget_verdict に問題がないこと。

  7. ゲームプレイに接続します。 scenario-unreal-gameplay では、プーリング方式でスポーンし、ゲームプレイデータから User パラメーターを設定し、キャストアニメーションから予備動作をスポーンし、Data Channel ペイロードを書き込み、ヒット時にひずみを適用します(strain_plan。必ず壊す必要があるオブジェクトでは、衝突とひずみの両方を使用します)。ヒット時にトレイルを無効化し、パーティクルが消えるまで再生させます [added]。 GATE:PIE でヒットすると、プールからスポーンされること(FX Outliner の InUse / FreeInPool)。

  8. 破壊可能アセット。 水密で、自己交差のないソース(mesh_watertight_check)を使用します。シードを固定します。マテリアルに応じたパターン(コンクリートはノイズと目地、木材は収縮・破壊・伸長、ガラスはスライスまたはクラックマテリアル)にします。2〜3 階層にし、アンカーを設定します。面積しきい値を指定した Proximity グラフを使用します。ダメージモデルは 1 つにします。クラスターごとに凸形状を 1 つ使用します。距離から表面までのベイクを含む内側マテリアルを使用します(Caillaud t_jy [00:29:14])。Remove on Break の範囲と Cluster Crumbling を設定し、ローエンドデバイスのプロファイルでは削除倍率を設定します。安定後に起き上がらない破片は無効化します(Xiao Yue [00:28:45])。破壊時の VFX には、Project Settings での Chaos データ生成と、コンポーネントでの破壊通知が必要です(enable_break_events、Xiao Yue [00:08:42])。破壊されたボーンのみをデブリプロファイルに切り替えます。その後 harden_gc を実行し、ジム環境でピース数を 10、50、100 として確認します(Caillaud t_jy [00:35:12])。 GATE:gc_recipe_verdict、gc_verdict、physmat_check に問題がないこと。

  9. レビューループ。 テクスチャ付きのレビュー用レベル、Manual exposure、ゲームプレイカメラを使用します。クリーンプレートで live_capture_series.py または capture_ages を実行し、score_captures.py で確認します(空白フレームがあるとシリーズは無効になります)。色、グレースケール、目を細めたときのシートを確認します。PIE で繰り返し(「ビューポートは嘘をつく」、Shishido [00:05:05])、色覚特性の確認として緑と茶色の地面の上で、群衆グリッド内で、さらに sg.EffectsQuality を 0〜3 にして確認します。白飛びが起きたら、まず Debugger のカウントに対して duplicate_spawn_check を実行します。1 回のパスにつき変更は 1 つにします。 GATE:ルーブリックに不合格がなく、評価項目の行にスコアが付いていること(references/critique.md)。

  10. 計測します。 目標コア数で、最も負荷の高い戦闘を固定して計測します。stat unit、stat NiagaraOverview、Debug HUD、-statnamedevents を指定した Insights を使用します(これを指定しないと Niagara は表示されません。Kiraly [00:10:52])。init_for_performance_baseline() を実行し、変更の前に毎回 lever_check を実行します。予算機能が有効な場合は budget_oscillation を実行します。破壊については、破壊前後のフレームシリーズ、CVD、t.OverrideFPS 60 [verify] を使用します。 GATE:niagara_overview_verdict、before_after、destruction_run_verdict が予算内で、見た目が同等であること。

  11. 提出 予算シートを scenario-unreal-performance に渡します。

数値

値関連項目出典
NET_OneShot:システムあたり15、タイプあたり約30、スポーンのみ、破棄してクリア、即時カリング0.0一度限りの処理、重要ではないKiraly [00:22:26]
NET_PickupPersistent:5(視線)、継続、スリープ状態、カリング遅延1.0 s永続的、重要Kiraly [00:24:03]
プールの最大サイズ32、事前確保0(デフォルト);タイプ上限=プールサイズシステムあたりKiraly [00:32:18]、[00:33:22]
1024上のフリップブック8 x 8=128 pxタイル、最終フレーム63、30 fpsでベイクベイカーFlipbook Baker doc
しきい値5000 / 500 / 50;ひずみ50000、半径100、速度500クイックスタートの壁Chaos docs
相対サイズ0.3未満のボックス;4レベルに4,000個の破片、約200個のボディにヒットリーフプロキシ;クラスタリングXiao Yue [00:25:51]、[00:22:32]
スリープ時に3 sで削除;5~10 s後に削除し、その後プラットフォームごとの倍率を適用デブリCaillaud [00:10:43]、[00:11:24]

品質ゲート

  • 測定可能: 監査(audit_niagara、audit_gc、audit_vfx_textures、caps_verdict、 system_plan、gc_recipe_verdict);目標コア数でのスレッドごとの統計、平均値とスパイク;破壊時のスパイクと復旧;キャプチャ評価基準(フットプリントと半径、値の範囲、白飛び、値の低下に伴う彩度、焦点にアクセントを置いた60 / 30 / 10、時間経過後も維持されるサイズ分類、頭部のコントラスト、色覚多様性に配慮したコントラスト、強度カーブ、スケジュール、ストロボ);image_checksで空白のフレームを拒否します。
  • 視覚: ゲームプレイ時の距離でのグレースケールの見え方;ポップコーニング;ストーリー上の節目;群衆の見え方;品質レベルをまたいでポップがないこと;破壊時に厚みのある内部を持つ素材として認識できること、浮遊する破片がないこと、重量感のあるデブリ、粉じんで隠された除去。

よくある間違い

間違い状況修正方法
半径を手動で合わせるダメージ範囲よりリングが大きいゲームプレイから User.Radius を取得
白飛び平坦な白い塊重複数を数え、加算コアの後ろにアルファブレンドした彩度の高いレイヤーを配置
高速移動時に頭部が丸い点滅する点速度方向に伸ばし、テクスチャにモーションブラーを加える
ヒット後に蓄積し、フラッシュ前に煙が出る効果がぼやける生成スケジュール:ヒット時に停止し、原因となる効果を先に発生させる
縮小だけでフェードさせるカードがちらつくライフタイムの中盤から不透明度をフェードさせ、レイヤーの色を一致させる
エミッターごとに Effect Type を設定残り火にカリングされないタイプが適用されるシステムごとに 1 つのタイプを設定し、Scalability Mode Self にする
RT を削減するために距離カリングを行うRT が変わらないlever_check:上限、CPU シミュレーション、ステートレス
減衰なしで予算を設定するカリング、再生成、カリング減衰率を設定し、非クリティカルなタイプのみを対象にする
固定バウンドがトレイルより小さいトレイルが画面上で消えるfixed_bounds_check
衝突時に投射物を破棄するトレイルが途切れる無効化し、パーティクルが消えるまで待つ
壁に固定するためにスリープさせる少しぶつかると再び動き出すアンカーまたはキネマティックボーンを使う
デフォルトの接続グラフチャンクが浮く、角がヒンジになるProximity または Bounds Overlap Filtered を使う
調整済みのしきい値配列を使った MSC調整しても何も変わらない物理マテリアルで引張強度を設定する
弾丸ごとにフィールドまたはひずみのフォールオフを設定する物理演算が急増するひずみと破壊速度を使い、フォールオフは設定しない
GC 全体にデブリプロファイルを設定する壊れていない壁をプレイヤーが通り抜ける破壊イベントで破損したボーンに切り替える
スリープ状態のデブリが起きないソルバーの負荷がかかる無効にする
gc.removal_duration = ...拒否される(読み取り専用属性)set_editor_property

ハンドオフ

  • 受け取るもの:scenario-unreal-materials からは、パーティクルのマスター マテリアル、インスタンス、テクスチャ設定を受け取ります。scenario-unreal-gameplay からは、数値、キャストアニメーションのタイミング、プールされたスポーン、NDC の書き込み、ひずみの呼び出しを受け取ります。scenario-unreal-world-building からは、破壊可能オブジェクトの配置と数を受け取ります。
  • 引き渡すもの:scenario-unreal-performance には、予算シート(システム、Effect Type、上限、プール、シミュレーションの目標、スレッドあたりのコスト、コア数、品質、GC の破片数、アクティブなボディのピーク数、破壊時のスパイク、回復)と再現可能なシナリオを引き渡します。scenario-unreal-cinematics には、Chaos キャッシュとシネマティックのスケーラビリティを引き渡します。scenario-unreal-lighting-rendering には、パーティクルライトと Heterogeneous Volumes を引き渡します。クロスは scenario-unreal-animation の担当です。

UE 5.8 の注記

  • Data Channels は 5.5 からプロダクションレディです(GDC 2025 の講演ではまだ実験的とされています)。軽量エミッターは 5.5 からベータで、コンパイル手順は 5.7 で廃止されました。Niagara Fluids はベータです。「Empty」テンプレートは「Minimal」です。
  • r.HeterogeneousVolumes.Allow(5.8);Niagara Editor Preview Actor(5.7)。
  • Chaos:GC 作成時のデフォルトの Dataflow テンプレート、ランタイムの Dataflow 評価(5.8);Project Settings の破壊スロットル(5.6)。
  • GC Python:root_proxy_data、size_specific_data、set_dataflow_asset。ボーンごとのデータ(アンカー、破壊時に削除、一方向レベル)はクラスにありません。

参考資料

  • references/expert-notes.md:専門家による原則、タイムスタンプ、見解の相違、U7 の評価で不足していると判明した点。
  • references/procedures.md:各手順の完全なコード、テストパス、ステータス。
  • references/critique.md:評価基準(指標、しきい値、判定項目)。
  • references/gui-paths.md:同じ作業に使うエディターメニュー。
  • references/sources.md:すべてのソース、認証情報、URL、最適なタイムスタンプ、改訂履歴。
  • scripts/ue_vfx.py:オフライン判定と指標、エディター内ヘルパー(未実行)。

コメント