mcpField
S
scenario-roblox-vfx-audio

scenario-roblox-vfx-audio

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

scenario-roblox-vfx-audio について

Roblox Studio 開発者向けの VFX・オーディオスキルです。データ駆動のテンプレートでエフェクトを作り、サーバー検証後にクライアントで再生し、測定でオーディオグラフを確認してから人が耳でミックスを評価します。

主な機能

  1. 01粒子、ビーム、トレイルのレイヤー構築
  2. 02サーバー検証後にクライアントへエフェクト配信
  3. 03エフェクト監査と時間別キャプチャ
  4. 04オーディオグラフ接続と可聴性の測定
  5. 05足音と音楽のダッキング設定

活用シーン

  1. 01複数プレイヤー向けのヒットや弾道エフェクト作成
  2. 02時間経過に沿ったエフェクトの見た目確認
  3. 03未接続または無音のオーディオグラフの調査
  4. 04素材別の足音設定と音楽ミックス

インストール

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

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

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

同梱ファイル

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

references/
copy-ready.md
critique.md
expert-notes.md
gui-paths.md
procedures.md
sources.md
scripts/
rbx_vfx_audio.py
scripts/agentkit/vfx-audio/
AudioAudit.luau
AudioKit.luau
VfxAudit.luau
VfxKit.luau
scripts/agentkit/vfx-audio/runtime/
Footsteps.luau
FxReplicator.luau

詳細

Roblox VFX とオーディオ

対象:macOS 上の Roblox Studio(2026年10月ビルド)。scenario-roblox-expert ツールキットを介して操作します。

熟練したエフェクトは一目で伝わり、すぐに視界から消えます。サーバーが判断して一度だけ放つレイヤー状のバーストを、各クライアントが描画します。熟練したオーディオは、誰かが聴く前に接続を確認し、測定した有線グラフです。エージェントはエフェクトをデータとして構築し、時間をかけて固定・キャプチャし、Wire.Connected、GetAudibilityFor、アナライザーでオーディオを確認します。ミックスの判断は人の耳に委ねます。ここで名前が挙がっている兄弟スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください(npx skills add scenario-labs/skills --skill <name>)。無人で作業する場合は、ツールのスキーマに基づいて進め、不足している点を明記してください。

必須の背景知識: scenario-roblox-expert(チャンネル、レビューの反復、ツールキット、現在の Roblox での落とし穴)。

状況(2026-10-19): Studio 0.743 で実施した17件のライブテストすべてに合格(MCP のタイムアウト後、再実行で2件に合格)。プレイテストを実施し、そのままコピーできるスクリプトも含まれています。5件のオフラインチェックすべてに合格(モジュールとすべてのスニペットで rbx_check のエラーは0件、フリップブックとオーディオファイルのチェック、Lune の円弧計算)。試聴は人に委ねられています。

熟練者の考え方(専門家との違い)

  1. 大きなスプライトを1つ使うのではなく、レイヤーを重ねて一度だけ放ちます。 5つ以上のテクスチャ(ホットスポット、暗い下地レイヤー)を重ね、EmitCount 属性の数だけ一度に放ちます(Twist VFX、zlKdwujvP2A [00:00:13-00:06:13]、MoldySugar、XXCGWREKpo0 [00:00:29])。バーストには Emit、残る尾には Enabled を使います(MoldySugar [00:04:16])。
  2. フラッシュの形が見分けられるなら、表示時間が長すぎます。 衝撃フラッシュの Lifetime は約0.05秒、斬撃レイヤーは0.2~0.3秒にします(Twist VFX [00:44:26, 00:00:13])。
  3. 速度方向に向くパーティクルの Speed は0.001~0.01にし、決して0にしません。 「速度が0だと、ただ消えてしまいます」(Twist VFX [00:00:13])。確認済み:Speed が0の VelocityPerpendicular パーティクルは何も描画されず、0.01では描画されました。
  4. ビームの円弧は目測ではなく規則で作ります。 半円には、弦の長さの2/3を CurveSize に設定し、両端をふくらみ側に向け、FaceCamera を有効にします。セグメントは曲線の場合にのみ使います(Twist VFX [00:10:55, 00:56:19])。すると中点は半径上に位置します(Beam のドキュメントにあるベジェ曲線の説明。実機で検証済み)。
  5. サーバーが判断し、各クライアントが描画します。 ローカルエフェクトはそのクライアントでしか見えないため、衝撃エフェクトにはサーバーとそのレイキャストが必要です(Develuper、TkNZETIu0CM [00:02:15, 00:04:42])。サーバーの判断(名前、CFrame、または原点、速度、サーバー時刻)を近くのクライアントに送り、各クライアントでテンプレートを複製させます[追加]。サーバーはエフェクトのインスタンスを保持せず、クライアント側で距離に基づいて表示対象から除外します。
  6. 世界が無音なら、リスナーが設定されていません。 AudioListener も AudioDeviceOutput もなければ、何も聞こえません(Cookie Tech、FminS9nvqJg [00:14:59])。テンプレートのプレースでは DefaultListenerLocation が Default のままで、プレイテストにもどちらもありませんでした(確認済み)。編集時に Camera を一度設定します。
  7. ホップごとに Wire を1本つなぎ、その後に検証します。 エフェクトが n 個なら、Wire は n + 1 本必要です(ByteBlox、LAYhd_j-thI [00:05:46]、Cookie Tech [00:19:35])。すべての Wire.Connected が true であること、またソースが AudioDeviceOutput に到達することをアサートします。ピン名が間違っていたり、循環があったりすると false になります(確認済み)。
  8. 足音は足に合わせます。 接地フレームで left または right を指定した footstep アニメーションイベントと、いくつかのマテリアルセットを使い、サウンドを1つループさせないようにします(GnomeCode、PNYtTkMidE8 [00:04:42, 00:08:23])。デフォルトの R15 アニメーションにはマーカーがなく、デフォルトのキャラクターサウンドは旧式の Sound です(確認済み)。歩幅ベースのフォールバックを用意し、Running をミュートするか置き換えます。

最初に確認すること

  • 各エフェクトを誰に見せるか: 詠唱者のみ(フィードバックとして即座に描画)か、周囲にいる全員か(サーバーで検証)。
  • デバイス: モバイルでは各エミッターの上限が毎秒100パーティクルで、メモリ不足時にはフリップブックが破棄されます(パーティクルエミッターのドキュメント)。
  • 参考資料: 見た目のクリップ。エキスパートはゼロからではなく、参考資料を基に作成します(Twist VFX [00:49:09])。
  • オーディオスタック: 新規作業にはAudio APIを使用し、既存のゲームではレガシーのSoundをそのまま使用します(非推奨ではありません。差分表の21行目)。ボイスチャットを有効にするかどうか。
  • アセット: 組み込みの代替素材、またはアップロード済みIDを使用します。アップロードは人が行う手順です(Asset Managerを使用。WindowメニューまたはHomeタブから開けます)。エージェントはファイルの準備と確認を行います。

デフォルト:ReplicatedStorage.FxLibrary内のテンプレート、実行中のコピー用のworkspace.Fxフォルダー、DefaultListenerLocationはCamera、sync_runtimeで同期するAgentKitモジュール。

手順

キットを使わない場合(回答だけの場合、またはゲームに同梱しない場合)は、copy-ready.mdにあるスタンドアロンスクリプトを使用してください。レプリケーター、オーディオグラフ、マーカー式の足音、1プレイヤー向けポストエフェクト、Highlightによる被弾フラッシュ、ラグテストが含まれます。

  1. プレースをセットアップします。 VA.sync_runtime(studio)はVfxKit、AudioKit、FxReplicator、FootstepsをModuleScriptとして書き込みます。DefaultListenerLocationをCameraに設定します(リスナーのセットアップ)。GATE:モジュールが存在し、AudioAudit.audit(game)でno-listenerが報告されないこと。
  2. テンプレートをデータとして作成します。 エフェクトごとにVfxKit.buildの仕様を1つ作成します。エミッター、ビーム、トレイル、ライト、サウンドの各レイヤーと、属性によるタイミングを設定します(テンプレート)。LightInfluenceとテクスチャを明示的に設定します。GATE:VfxAuditのエラーと警告がともに0件であること(監査)。
  3. 時間の経過に沿って確認します。 VA.timelineはTimeScaleを0にして、選択した時刻でエフェクトを固定し、それぞれをキャプチャします。コンタクトシートを開き、critique.mdを参考に評価します。GATE:image_checksに合格すること、連続するフレーム間に差があること、最初のフレームでシルエットが読み取れること、最後のフレームで何も残っていないこと。
  4. レプリケートします。 FxReplicator.serverはタイプ、クールダウン、範囲を検証してレイキャストを実行し、ブロードキャストします。FxReplicator.clientは再生とカリングを行います(レプリケーション)。プレイテストでのGATE:サーバーのworkspace.Fxの子要素が0件のままであること、クライアントのコピーがlifetime()後に0件に戻ること、連続送信と範囲外のリクエストが拒否されること、プレイのキャプチャで投射物とそのトレイルが確認できること。
  5. オーディオを接続します。 バスはAudioFaderから1つのAudioDeviceOutputに接続します。エフェクトはAudioKit.chainで追加します。3Dソースは、Attachmentに配置したAudioEmitterです(オーディオグラフ)。GATE:すべての配線が接続されていること、AudioKit.pathsがAudioDeviceOutputに到達すること、IsPlayingとTimePositionが変化すること、アナライザーでレベルを読み取れること、GetAudibilityForが意図したカーブと一致すること。
  6. 動作を組み合わせます。 ヒット音の間はAudioCompressorのSidechainで音楽をダッキングします(ダッキング)。足音はマーカーまたは歩幅に基づいて再生します(足音)。GATE:dB単位で減衰量を測定すること、距離あたりの歩数と、床の素材ごとに設定された歩数を確認すること。
  7. 聴感確認を担当者に引き継ぎます。 人間にしか判断できない項目(critique.mdの耳で確認する項目)を、聴くべき場所とタイムスタンプを正確に示して列挙します。

数値

値数値対象、出典
エミッターのレート上限毎秒400回。モバイルでは毎秒100回エミッターごと(ドキュメント)
パーティクルの寿命上限20秒エンジン(ドキュメント)
インパクトフラッシュ寿命は約0.05秒Twist VFX
スラッシュレイヤー寿命0.2~0.3秒、速度0.001~0.01Twist VFX
レイヤー間のZOffset0.001Twist VFX [00:02:24]
ビームの半円CurveSize = 弦の長さ x 2/3(弦の長さ20スタッドの場合:13.33、頂点10)弦の長さ(Twist VFX、実測)
曲線ビームのセグメント数最大約50。Instance.newでは10曲率(Twist VFX、観察値)
ビームテクスチャの繰り返しStretch:TextureLengthの倍数。WrapとStatic:長さ / TextureLengthビームの長さ(Beamsドキュメント)
フリップブックシート1024 x 1024。2x2、4x4、または8x8。最大30 fpsテクスチャごと(ドキュメント)
オーディオのインポート20 MB未満、7分未満、最大48 kHz。mp3、ogg、wav、flacファイルごと(ドキュメント)
AudioCompressorThreshold -60~0 dB、Ratio 1~50、Attack 0.0001~0.5 s、Release 0.01~5 s参考値
AudioFaderのVolume0~3参考値
デフォルトのエミッターのロールオフ距離に対して約4:30スタッドで0.133、90スタッドで0.044GetAudibilityFor(観察値)
足音の歩幅約4.4スタッドWalkSpeed 16でのデフォルトのR15走行(観察値)
足音の音量草地で0.3、デフォルトで0.5素材セットごと(GnomeCode [00:08:23])
ダッキング開始Threshold -30 dB、Ratio 8、Attack 0.01 s、Release 0.3 s[追加]。音楽で-21 dBを測定(テストL8)
ラウドネスの目標値音楽:-16 LUFS、トゥルーピーク:-1.5 dB。一発音:ピーク-1.5 dBFS[追加]

品質ゲート

  • 測定可能: VfxAuditとAudioAuditで問題がないこと。すべてのWire.Connectedが接続済みであること。paths()が出力に到達すること。再生中のアナライザーのRmsLevelが0を上回ること。サーバーにエフェクトインスタンスが保持されていないこと。クライアントのコピーが0に戻ること。距離ごとの足音の回数。オーディオファイルがcheck_audioに合格し、シートがcheck_flipbookに合格すること。
  • 視覚: Editでフリーズフレームのコンタクトシートを作成し、固定カメラで時間経過に伴う再生をキャプチャして、critique.mdに基づいて評価します。評価前にStudioのEditor Quality Levelを上げてください(File > Studio Settings > Rendering。MoldySugar、9dQR7FySSLg。gui-paths.md)。
  • 聴覚(人間のみ): バランス、映像に対するタイミング、音色、繰り返しによる疲労、クリッピングを耳で確認します。

よくある間違い

間違い症状修正
速度を重視するエミッターで Speed を 0 にするパーティクルが表示されないSpeed を 0.001~0.01 にする
LightInfluence が 1 のときに明るさを上げる変化がない(観測:1 と 6 で同じ)LightInfluence を 1 未満にする(TrendyV2、rIXyQ4RAwws [00:02:35])
Instance.new でエミッターを作成するLightInfluence が 0(観測)なのに対し、Studio から挿入すると 1(ドキュメント)LightInfluence を明示的に設定する
Attachment が 1 つの Trail または Beam何も描画されないAttachment0 と Attachment1 を設定する
エフェクトをサーバーでクローンするエフェクトが二重になり、ネットワークコストが増加し、カリングされないブロードキャストし、クライアントでクローンする
Sound を SoundGroup の子にするグループの音量が無視されるSound.SoundGroup を設定する(ドキュメント)
AudioPlayer.AssetId非推奨AudioPlayer.Asset
AudioEmitter を Folder または Model の下に置く音が出ないAttachment、パーツ、または Camera の子にする
Listener を Default のままにする再生中に 3D オーディオが無音になるDefaultListenerLocation を Camera にする
MoveDirection から足音を生成するHumanoid:MoveTo の使用中に足音が出ない(観測)ルートの速度
組み込みの explosion01_smoke_main または fire_sparks_main を代用品として使うレイヤーが見えない:テクスチャがほぼ黒い(観測)smoke_main.dds、SquareParticle.png
Edit で ModuleScript.Source を編集する古いコードが引き続き実行される(観測)ModuleScript インスタンスを置き換える

引き継ぎ

  • scenario-game-assets と scenario-sprite-animation から: VFX テクスチャとフリップブックのフレーム (2x2、4x4、または 8x8 のグリッド)。make_flipbook でパッケージ化し、check_flipbook で確認してから、人がアップロードします。
  • scenario-audio と scenario-elevenlabs から: 効果音、音楽、音声。prepare_audio (トリミング、48 kHz、レベル調整)と check_audio を実行してから、人がアップロードします。
  • scenario-roblox-animation から: アニメーションの footstep およびヒットフレームのマーカー。
  • scenario-roblox-gameplay から: ヒットイベント、projectile id、origin、velocity。このスキルで描画します。
  • scenario-roblox-networking との連携: エフェクトリクエストのリモート検証とレート制限。
  • scenario-roblox-environment へ: アンビエント音と、照明エフェクトの参照先。照明のレシピはそちらにあります:暖色の光と寒色の影(aq0Fi0R2FAY [00:03:38])、Bloom Threshold は約 0.03(aq0Fi0R2FAY [00:07:37])。
  • scenario-roblox-performance へ: フレーム予算に対する、シーンごとのエミッター、ビーム、フリップブックの数。

現在のRobloxに関するメモ

  • Audio APIは2024-09-10以降、一般提供されています。AudioPlayer.AssetはAssetIdに置き換わっています。AudioPlayerの内部音量は2025年に2倍になったため、以前のレベルを再確認してください(差分の21行目)。
  • 参照するプロパティはSoundService.DefaultListenerLocationです(プラグインのセキュリティ:Editで設定してください)。
  • FlipbookIncompatibleには「Particle texture must be 1024 by 1024 to use flipbooks.」と表示されます。レイアウトがNoneの場合や、アニメーションするシートでも表示されることが確認されています。これは状態ではなく、ヒントです。
  • パーティクルのTextureContentに設定したEditableImageは何も描画しませんでしたが、同じ画像はDecalでは描画されました(確認済み)。プレビュー用シートはDecalに表示してください。
  • Lighting.Technologyは廃止されています。ライティングはscenario-roblox-environmentに属します。

参考資料

コメント