INDIE INDEX

レベル:実践

パーティクルとは|火花・煙・光などを、多数の小さな粒で表現する演出

言葉の意味

パーティクルは、火花・炎・魔法の粒・煙・霧などの、複雑な物理の効果を再現するために使う仕組みです。

たとえば Godot でも、この意味で使われています。決まった間隔で、決まった寿命を持つ粒が生まれ続ける、という考え方で、物理の基本の値を決めたうえで、そこにばらつきを加えることで、粒ごとに違いが出て、より自然な見た目になります。2Dの粒を扱う部品は GPUParticles2D と CPUParticles2D の2種類あり、前者は GPU で、後者は CPU で粒の効果を処理します。後者は、粒の数が多いときは GPUParticles2D より性能が低くなる一方で、性能の低い環境、または GPU が処理の足かせになる場面では、GPUParticles2D より性能が高くなることもあります。

作り手がパーティクルの効果を作るときは、粒の数・寿命・向き・色などの値を決めます。たとえば GPUParticles2D と CPUParticles2D には、1回の放出で出す粒の数と、各粒が存在する時間の欄があります。CPUParticles2D には、粒を出す向き・粒ごとの最初の向きの範囲を決める角度・寿命のあいだの色の変わり方を決めるグラデーションなどの欄もあります。1回の放出のなかで粒を出す速さの割合を決める値は、0 なら一定の間隔で、1 ならすべての粒を同時に放出し、その間の値も使えます。爆発または粒の突然の噴出を作るのに役立つ設定です。

放出を1回で止める場面もあります。GPUParticles2D と CPUParticles2D のどちらにも、放出の周期を1回だけ行う one_shot(1回だけの放出)の欄があります。放出の周期の途中で true にすると、その周期の終わりで放出が止まります。GPUParticles2D では、one_shot が true のとき emitting(放出中かどうか)を true にしても、動いている粒がすべて処理を終えるまでは放出の周期がやり直されません。粒がすべて処理を終えたことは finished(終了)シグナルで分かり、このシグナルを出すのは one_shot の放出元だけです。finished を受けたあとにも、GPU で粒を計算する都合で、emitting を true にしても放出の周期が再開しない短い間がある場合があります。GPUParticles2D で、放出の周期を最初からやり直し、いまある粒を消すのは restart() です。

シーンを読み込んだ直後から松明や霧などの粒が出ている状態にする場面もあります。粒の系は粒が0の状態から放出を始めるので、何もしなければ読み込んだ時点から放出が始まります。preprocess(事前処理)は、最初に描かれる前に、指定した秒数ぶん粒の処理を進める欄です。GPUParticles2D では、値が大きいと、処理の負荷がとても高くなることがあります。

GPUParticles2D には、粒の系が動くために画面に見えている必要がある範囲を決める visibility_rect(表示の範囲)の欄もあります。この四角形がビューポートの外にあると、粒は画面に描かれません。粒が占める範囲に合わせて作り直すには、エディタで次の操作をします。

  1. シーンで GPUParticles2D のノードを選びます。
  2. 2D 画面の上のツールバーで、Particles → Generate Visibility Rect(表示の範囲を作る)を選びます。

Godot は、粒が数秒間放出されるようすを試したうえで、粒が占める範囲に合わせて四角形を設定します。試す長さは Generation Time (sec)(作る時間・秒)で決められ、最大値は 25 秒です。

AI に頼んだ文、粒の数(16個)、1・2キーでの切り替え、画面を持たないブラウザでキーを送って確かめた結果は、Godot ではなくブラウザで動くゲームの記録として、弾が当たったときの粒と画面の揺れを作らせる頼み方【AIでゲーム開発】にあります。

次に読む

爆発や魔法などを見た目で伝える演出の全体は、エフェクトにあります。

情報源

関連ページ22

このページの内容の誤りは、問い合わせの窓口で受け付けています。