mcpField
R
roblox-vfx

roblox-vfx

github.com/nonloopedクリエイティブ・メディア24736 回インストール1 週間前に更新
リポジトリ

roblox-vfx について

roblox-vfxは、Roblox開発者向けのパーティクルエフェクト制作・最適化スキルです。ParticleEmitterの外観、形状、フリップブックアニメーション、描画設定に加え、クライアント側の演出、距離カリング、性能計測、一時エミッターの後処理を扱います。

主な機能

  1. 01パーティクルの外観と動きの調整
  2. 02エミッター形状とフリップブック設定
  3. 03ライティングと描画効果の制御
  4. 04オーバードロー計測と性能最適化
  5. 05クライアント発生とエフェクト後処理

活用シーン

  1. 01環境パーティクルや単発バーストの作成
  2. 02モバイル向けパーティクル描画の最適化
  3. 03キャラクター部品やアニメーションイベントへの効果の連携
  4. 04遠距離エフェクトのカリングとエミッターの後処理

インストール

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

$npx skills add https://github.com/nonlooped/roblox-suite --skill roblox-vfx

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

同梱ファイル

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

references/
particle-emitter-properties.md
shapes-flipbooks-and-advanced.md
scripts/
EffectBurst.lua

詳細

roblox-vfx

主な資料: https://create.roblox.com/docs/en-us/effects/particle-emitters + ドキュメントの「Effects」セクションと「ParticleEmitter」クラスのリファレンス。

パーティクルの寿命、サイズ、透明度、発生率をまとめて調整します。透明なエフェクトが重なり合う場合は、対象となる最も性能の低いデバイスでプロファイリングします。

マーカーに反応するバーストについては、roblox-animationを参照してください。UI パーティクルについては、roblox-user-interfacesを参照してください。ParticleEmitter は ViewportFrame 内には描画されません。

作成と親の設定

  • ParticleEmitter は BasePart(境界内、または選択した EmissionDirection の面から放出)または(制御しやすいため強く推奨)Attachment の子にします。
  • 放出方向を調整するには、親または Attachment を回転させます。Attachment の子にした場合、EmissionDirection は無視されます。パーティクルの向きは Attachment 自体を回転させて調整します。
  • EmissionDirection が有効なのは、パーツの子にした場合のみです。

パーティクルの見た目を調整する

  1. テクスチャ(アルファ付きの .png を推奨します。グレースケールにして LightEmission=1 を設定すると、暗い部分を隠せます)。
  2. 色(ColorSequence。Studio では、Color3 を 1 つだけ指定した場合も、1 つのキーポイントを持つ ColorSequence として保存されます。寿命に応じたグラデーションに使用します)。
  3. サイズ(NumberSequence。自然なばらつきを出すため、エンベロープを使うことがよくあります)。**警告:**サイズを大きくすると、GPU のフィルレートコストが高くなります。
  4. 透明度(NumberSequence)。パーティクルが突然表示・消失するのを防ぐため、フェードインまたはフェードアウトさせます。
  5. 寿命(またはパーティクルごとのランダム設定には NumberRange)。
  6. 発生率(1 秒あたりのパーティクル数。エミッターあたりの上限は、デスクトップで約 400、モバイルで約 100 です。低く保ち、ほかのプロパティで密度を調整します)。

続いて動きを調整します(発生時の Speed、SpreadAngle、重力や風に対する Acceleration、グローバル風が有効な場合の Drag と WindAffectsDrag、VelocityInheritance、LockedToPart、TimeScale)。

エミッターの形状

Shape = Box / Sphere / Cylinder / Disc。

  • ShapeStyle = Volume(内部全体)または Surface(表面のみ)。
  • ShapeInOut = Inward / Outward / InAndOut。
  • ShapePartial で形状をさらに調整します。Cylinder:放出側の半径。Disc:内半径の割合(0 = 完全に閉じた円盤、1 = 外周のみから放出)。Sphere:半球の角度(1 = 球全体、0.5 = 半球、0 = 点)。

Sphere/Cylinder 形状は、エミッターを Attachment の子にすると正しく表示されません。BasePart の子にした場合にのみ使用してください(パーツは小さく、透明でもかまいません)。

フリップブック(パーティクルの寿命に応じて変化するアニメーションテクスチャ)

グリッドシート(2x2、4x4、8x8、Custom)を用意します。フレーム間に透明な余白を設けると、ミップフィルタリングで隣のフレームがサンプリングされるのを防げます。

  • FlipbookLayout、FlipbookSizeX/Y。
  • FlipbookFramerate(またはランダム範囲。最大 30)。
  • FlipbookMode:Loop、OneShot(爆発向け。FlipbookFramerate を無視し、パーティクルの Lifetime 全体で正確に 1 回再生します)、PingPong、Random(クロスフェード付き。有機的なばらつきを出すのに最適です)。
  • FlipbookBlendFrames:Loop/OneShot/PingPong で隣接するフレームをクロスフェードし、アニメーションを滑らかにします。
  • FlipbookStartRandom:各パーティクルをランダムなフレームから開始します(静止させながら見た目に変化をつけるため、フレームレートを 0 にすると便利です)。

**メモリに関する警告:**フリップブックは負荷が高くなります。テクスチャを再利用し、解像度を適切に保ち、メモリの少ないクライアントでは独自のアニメーション付きエミッターの数を制限してください(古いスマートフォンではフリップブックが自動的に無効になります)。

ライティングと描画の設定

  • LightEmission:0 は通常、1 は加算合成/発光(暗いシーンでも機能します)。
  • LightInfluence:0 = ワールドの光を無視、1 = 完全に影響を受ける。
  • Brightness:LightInfluence が 0 の場合に、エミッターが加える光の強さを調整します。LightInfluence が 1 の場合、効果はありません。
  • Orientation:FacingCamera(従来型のビルボード)、FacingCameraWorldUp、VelocityParallel、VelocityPerpendicular。
  • ZOffset:スタッド単位の描画レイヤーオフセット(3D 上で移動させずに、複数のエミッターを重ねます)。

デバイスごとのパフォーマンス

  • 充填率(重なり合う透明レイヤーで覆われたピクセル数)とオーバードローが、主な GPU コストです。
  • 率 × サイズ × 平均不透明度 × 画面上で重なり合う数 = コストです。
  • Studio Editor Quality Level の最低と最高の両方で、必ずテストしてください。
  • モバイルでは率の上限が低く設定されています。
  • 一時停止するには .Enabled = false を使用します(既存のパーティクルは消えるか、:Clear() を呼び出すまで残ります)。
  • 率が高く、サイズが大きく、透明度の高いエミッターを多数同時に使用すると、ローエンドのクライアントではエンジンによって処理が制限されたり、エフェクトが破棄されたりします。
  • Studio で View → Stats → GPU → Fill Rate と Render → Overdraw を使ってオーバードローを測定してください。率を下げる前に、合計の不透明ピクセル領域を減らしてください。

レプリケーションとクライアント主導の放出

  • ParticleEmitter の状態はレプリケーションされますが、個々のパーティクルはレプリケーションされません。サーバー所有のエミッターは、すべてのクライアントで同じパーティクルを自動的に生成します。
  • 単発のバーストには、クライアント主導の放出を推奨します。サーバーがイベントを通知し、影響を受ける各クライアントがローカルでバーストを生成します。これにより、バーストごとのタイミングをネットワーク経由でレプリケーションする必要がなくなり、各クライアントの品質設定も尊重されます。
  • RemoteEvent:FireClient またはローカルシグナルを使用して、クライアント側で一時的なビジュアルエフェクトを管理し、ゲームプレイのロジックはサーバー側で権威的に処理してください。

LOD と距離によるカリング

  • カメラが遠い場合は、高コストのエミッターを停止するか、出力を減らしてください。一般的なしきい値は、100~300 studs で無効化し、距離が半分になったら Rate を半分にすることです。
  • workspace.CurrentCamera による距離チェックまたはゾーンシステムを使用してください。多くのエミッターに対してフレームごとに Magnitude を確認するのは避け、タグ付きのカリング用ハートビートまたは空間分割を使ってください。
  • 環境の天候や大勢の群衆では、エミッターを全体に生成するのではなく、カメラ周辺の領域だけに生成してください。

テクスチャのプリロード

  • フリップブックアトラスや目立つエフェクトテクスチャは、必要になる前(ロード画面中や戦闘シーケンスの前など)に ContentProvider:PreloadAsync({texture}) を呼び出してプリロードしてください。これにより、ローエンドデバイスでバースト中にテクスチャが後から表示されるのを防げます。

パターン

  • 継続的な環境エフェクト(炎、煙、雨):通常のカメラ距離で適切な密度に見えるよう、Rate、Lifetime、Size を調整します。
  • 単発のバースト(爆発、衝撃、マズルフラッシュ):Rate を低くするか 0 に設定し、アニメーションマーカーまたはイベントから emitter:Emit(num) を呼び出します。
  • アタッチするエフェクト(足元の砂ぼこり、武器の軌跡、オーラ):エミッターまたはそのアタッチメントを、動くパーツまたはボーンに親子付けします。適切に LockedToPart または VelocityInheritance を使用してください。
  • 風に反応するエフェクト:環境内でグローバルな風を有効にし、エミッターで Drag > 0 と WindAffectsDrag = true を設定します。
  • アニメーションとの連携:「FootStep」マーカー → 足の Attachment を見つける → Emit を呼び出すか、短い単発エミッターを再生します。

一般的なエフェクトに関する網羅的なプロパティリファレンス、視覚的な例、最適化チェックリスト、具体的なコードについては、references/ フォルダー(particle-emitter-properties.md、shapes-flipbooks-and-advanced.md)を参照してください(統合については SKILL とスキル横断メモで説明しています)。

関連するエフェクト(パーティクルと併用されることが多いもの)

  • Beam:2 つの Attachment 間に描画するテクスチャ付きのリボン(レーザー、エネルギー、ロープなど)です。主なプロパティ:Texture、TextureMode/TextureLength/TextureSpeed、Color、Transparency(ビームに沿った NumberSequence)、Width0/Width1、CurveSize0/CurveSize1、FaceCamera、LightEmission、LightInfluence、ZOffset。
  • Trail:親パーツの移動に合わせて、2 つの Attachment の後ろに残るリボン(剣の軌跡、飛翔体の軌道、残像など)です。主なプロパティ:Color、Transparency、Texture、TextureMode、TextureLength、MinLength、MaxLength、WidthScale、LightEmission、LightInfluence、FaceCamera、Lifetime。
  • Highlight:低コストで効果的なアウトライン(選択、ターゲット指定、「パワーアップ」など)です。アウトラインと塗りつぶされた内部の両方を設定できます(FillColor/FillTransparency、OutlineColor/OutlineTransparency)。DepthMode は、壁越しにハイライトを表示するか(AlwaysOnTop)、遮られていない場合にのみ表示するか(Occluded)を制御します。クライアント側では、同時に存在できる Highlight インスタンス数の上限は 255 です(無効化されたインスタンスも上限に数えられます)。
  • 全体的な雰囲気を整え、パーティクルを適切に見せるには、PointLight / SpotLight / SurfaceLight、Atmosphere、PostProcessing を使用します。

一時的なエミッターのクリーンアップ

  • 単発エミッターのクローンは、最大寿命が経過した後に必ず破棄してください(Debris:AddItem または task.delay を使用します)。無効化したエミッターインスタンスをワークスペース内に蓄積させないでください。
  • アタッチされた継続的なエミッターは、再親化または破棄する前に Enabled = false に設定し、:Clear() を呼び出して、パーティクルが残らないようにしてください。
  • エミッターをプールする場合は、再利用する前に Rate、Lifetime、Size、Transparency を既定値にリセットし、前の状態が次のバーストに引き継がれないようにしてください。

スクリプト

  • scripts/EffectBurst.lua:単発パーティクルバースト用のクローン作成・破棄ヘルパーです。テンプレートの Attachment/BasePart の下にあるすべての ParticleEmitter をクローンし、ローカルでバーストを発生させ、最大寿命の経過後にクリーンアップをスケジュールします。元のエミッターは変更されないため、継続的なエミッターにも安全に使用できます。

リファレンス索引

  • particle-emitter-properties.md:パーティクルの外観、動き、発生、またはレンダリングコストを調整します。
  • shapes-flipbooks-and-advanced.md:エミッターの形状、アニメーションテクスチャ、バースト、または距離によるカリングを設定します。

コメント