【Godot】GPUParticles2Dで実現する爆発、煙、魔法エフェクト

作成: 2025-12-08最終更新: 2026-07-08

GodotのGPUParticles2Dで、爆発・煙・魔法のエフェクトを作る方法。3つの必須要素、ParticleProcessMaterialで作る「粒の一生」、One ShotとExplosiveness、プーリングによる最適化まで解説します。

敵を倒しても、ただ消えるだけ。魔法を撃っても、地味な玉が飛ぶだけ——そんな画面に「爆発の飛沫」「立ち昇る煙」「きらめく魔法の粒」を足すと、同じゲームが一気に生き生きします。この 粒の演出 を担うのがパーティクルです。

Godotには CPUParticles2DGPUParticles2D があり、大量の粒を軽く描くなら GPUParticles2D が主役です。この記事では、その基本構造と ParticleProcessMaterial の勘どころを押さえ、定番の 爆発・煙・魔法 を作れるようにします。

中央の一点からソフトブルーの粒子が四方八方へ放射状に飛び散る、パーティクル爆発のイメージ

この記事でわかること

  • GPUParticles2D の3要素(Amount / ParticleProcessMaterial / Texture
  • ParticleProcessMaterial で作る、1粒の 一生(Lifetime・初速・重力・Color Ramp・Scale Curve)
  • One ShotExplosiveness で「一瞬で弾ける」爆発を作る
  • 爆発・煙・魔法の 設定レシピ と、プーリングでの使い回し

Sponsored

GPUParticles2Dの3要素

GPUParticles2D は、粒の計算を GPUの並列処理 に任せます。だから数千〜数万の粒でも、ゲームのロジックが動くCPUにほとんど負荷をかけずに描けます。逆に、GDScriptで1粒ずつ細かく操作したい・数が少ないなら CPUParticles2D の方が向きます。

特徴GPUParticles2DCPUParticles2D
処理場所GPUCPU
得意なこと数千〜数万の粒(爆発・炎・雨・吹雪)数十個・1粒ずつコードで制御(足元の砂埃など)

GPUParticles2D を動かすには、最低でも次の3つを設定します。

Amount(数)・ParticleProcessMaterial(振る舞い)・Texture(粒の見た目)の3要素が合わさってGPUParticles2Dの粒子が放出される図
  1. Amount :一度に出せる粒の最大数。多いほど見応えは増えますが、その分重くなります。
  2. Process MaterialNew ParticleProcessMaterial で作る、動き・色・サイズなど 振る舞い を決める心臓部。
  3. Texture :粒1つの見た目。中心が明るく外へ透明になる白黒グラデが万能です(Color で色を掛ければ使い回せます)。

ParticleProcessMaterialで「粒の一生」を作る

ParticleProcessMaterial は、粒の「発生 → 移動 → 消滅」という一生を作るための設定集です。1粒がどう生まれ、どう動き、どう消えるかを決めます。

1粒の一生を時間軸で表した図。発生→移動(初速・重力)→消滅と変化し、下にColor RampのグラデーションバーとScale Curveの曲線

とくによく使うのはこのあたりです。

  • 時間Lifetime(消えるまでの秒数)、One Shot(1回だけ放出)、Preprocess(開始時に事前計算しておく)
  • 形と方向Emission Shape(Point / Sphere / Ring など発生源の形)、DirectionSpread(飛ぶ向きと広がり角)
  • 動きInitial Velocity(初速。Min/Maxでばらつき)、Gravity(煙は負の値で上昇)、Damping(抵抗で減速)
  • 見た目の変化Scale Curve(寿命に沿ったサイズ)、Color Ramp(寿命に沿った色)

見た目のリアリティを大きく左右するのが Color Ramp です。ここで 寿命の終わりにアルファ(透明度)を0にし忘れる と、消える瞬間に黒い粒がパッと残ってしまいます。最後は必ず透明に落とす——これが滑らかに消すコツです。

Sponsored

One ShotとExplosivenessで弾けさせる

爆発のように「一瞬でドンと出す」には、One ShotExplosiveness の組み合わせが鍵になります。

Explosiveness 0は時間軸に沿って少しずつ放出、Explosiveness 1は一点から全粒子を一気に放出する対比図
  • One ShotAmount の数だけ放出して止まります(連続放出でなく単発)。
  • Explosiveness0 なら Lifetime をかけて 少しずつ 放出(噴水・炎向き)、1 なら 全部を0フレームで一気に 放出(爆発向き)。

爆発は One Shot: onExplosiveness: 1.0 が基本形です。この2つで「パッと弾けて、すっと消える」タイミングが作れます。

実践:爆発・煙・魔法の3レシピ

3要素と「粒の一生」が分かれば、あとは値の組み合わせで多彩なエフェクトが作れます。アクションでもSTGでもRPGでも使い回せる、定番の3つを見てみましょう。

爆発(放射状バースト)・煙(立ち昇る)・魔法(リング状に広がる)の3エフェクトを並べた図

爆発:一瞬で弾ける

  • 時間Lifetime: 0.8 / One Shot: on / Explosiveness: 1.0
  • 方向Spread: 180(全方位へ)
  • 動きInitial Velocity: 200〜300 / Gravity: (0, 0)
  • 見た目Scale Curve は最初大きく→0へ。Color Ramp は 白 → 黄 → オレンジ → 透明

爆発は使い捨てなので、放出が終わったら自分を消します。One Shot のときだけ出る finished シグナルを使うのがきれいです。

extends GPUParticles2D

func _ready() -> void:
    finished.connect(queue_free)   # 放出し終わったら自分を消す(One Shot時のみ発火)

func explode(pos: Vector2) -> void:
    global_position = pos
    restart()                      # 最初から放出し直す

煙:ゆっくり昇る

  • 時間Lifetime: 3.5 / One Shot: off(出し続ける)
  • 動きGravity: (0, -30)(上昇)/ Damping: 5
  • ゆらぎTurbulence をオンにして、風に揺れる感じを出す
  • 見た目Scale Curve はゆっくり拡大。Color Ramp は 白 → 灰・半透明 → 透明

煙は連続放出なので finished は出ません。止めるときは emitting = false にします。

魔法弾:軌道を描く

  • 時間Lifetime: 1.5 / One Shot: on
  • Emission Shape: Ring(リング状に発生)
  • 動きInitial Velocity: 50〜80
  • 見た目Color Ramp は 水色 → 青 → 紫・透明。Hue Variation で色相に少し幅を出す

魔法弾のように 頻繁に出す エフェクトを、毎回 instantiate() / queue_free() していると生成コストがかさみます。作ったインスタンスを使い回す オブジェクトプーリング を使うと、ぐっと軽くなります。

Sponsored

よくある間違いとベストプラクティス

毎回instantiate/queue_freeするより、事前に作ったエフェクトをプールで使い回す方が軽いことを示す対比図
よくある間違いベストプラクティス
Amount を必要以上に大きくする最小限の Amount にして、粒の Scale や動きで密度感を出す
Visibility Rect を設定しない描画範囲を Visibility Rect で指定し、画面外の描画を抑える
Color Ramp のアルファを0にし忘れ、黒い粒が残る寿命の終わりで必ずアルファを0にして滑らかに消す
頻出エフェクトを毎回 instantiate / queue_free するオブジェクトプーリング でインスタンスを使い回す
半透明の粒を重ねすぎてオーバードローで重くなる粒のサイズや数を抑え、テクスチャアトラスでドローコールも削減する

おまけ:先に知っておくと良いこと

  • 色は Texture × Color で使い回す :白黒グラデのテクスチャを1枚用意し、Color で色を掛ければ、炎も魔法も同じ画像から作れます。
  • 光ると映える :爆発や魔法に 2Dライティング の光を重ねると、粒がぼうっと発光して迫力が増します。
  • 凝った動きはシェーダーで :うねる炎や歪みなど、標準設定で足りない動きは Fragment Shaderの基礎 の領域です。
  • アトラスでまとめる :複数のエフェクト画像を1枚のテクスチャアトラスにすると、マテリアルを共有できてドローコールが減ります。

まとめ

  • 3要素Amount(数)・ParticleProcessMaterial(振る舞い)・Texture(粒の見た目)
  • 粒の一生LifetimeInitial VelocityGravity で動きを、Color RampScale Curve で見た目の変化を作る
  • 弾けさせるOne ShotExplosiveness: 1.0 で一瞬の爆発
  • 使い回す :頻出エフェクトはプーリングで軽く、Visibility Rect で描画を抑える

まずは白黒グラデのテクスチャで爆発を1つ作り、Color RampExplosiveness をいじってみましょう。値を変えるだけで、炎にも噴水にも魔法にも化けます。そこに光や影を重ねれば、画面の説得力が一段と上がります。