パーティクル・システム(2D)

イントロ

単純な(しかしほとんどの用途には十分に柔軟な)パーティクル・システムが提供されています。パーティクル・システムは、火花、火、魔法の粒子、煙、霧などの複雑な物理的効果をシミュレートするために使用されます。

その考えは、 "particle" が一定の間隔でそして一定の寿命で放出されるということです。 その寿命の間、すべての粒子は同じ基本的なふるまいを持ちます。 各パーティクルを他のパーティクルとは異なるものにし、より有機的に見えるのは、各パラメータに関連付けられた "randomness" です。基本的に、パーティクルシステムを作成することは、基本物理パラメータを設定してから、それらにランダム性を追加することを意味します。

パーティクルノード

Godotは、2Dパーティクル用に2つの異なるノード、class_Particles2D および class_CPUParticles2D を提供します。 Particles2Dはより高度で、GPUを使用してパーティクルエフェクトを処理しますが、それはより高度なグラフィックスAPI、この場合はGLES3レンダラーに限定されます。 GLES2バックエンドを使用するプロジェクトの場合、CPUParticles2Dは、Particles2Dとほぼ同等の機能を備えたCPU駆動のオプションですが、パフォーマンスは低下します。 Particles2Dは class_ParticlesMaterial を介して(およびオプションでカスタムシェーダーを使用して)構成されますが、一致するオプションはCPUParticles2Dのノードプロパティを介して提供されます(トレイル設定を除く)。インスペクタでノードをクリックし、ツールバーの「Particles」メニューで「Convert to CPUParticles2D」を選択すると、Particles2DノードをCPUParticles2Dノードに変換できます。

../../_images/particles_convert.png

このチュートリアルの残りの部分では、Particles2Dノードを使用します。最初に、Particles2Dノードをシーンに追加します。そのノードを作成すると、白い点のみが作成され、インスペクタのParticles2Dノードの横に警告アイコンがあることに気付くでしょう。これは、ノードが機能するためにParticlesMaterialが必要だからです。

ParticlesMaterial

パーティクル・ノードにプロセス・マテリアルを追加するには、インスペクタパネルの Process Material に移動します。 Material の横のボックスをクリックし、ドロップダウン・メニューから New ParticlesMaterial を選択します。

../../_images/particles_material.png

これで、Particles2Dノードが下方に白いポイントを放出するようになります。

../../_images/particles1.png

Texture

パーティクルシステムは単一のテクスチャを使用します(将来、これはスプライトシートを介してアニメーションテクスチャに拡張される可能性があります)。テクスチャは、関連するテクスチャプロパティを介して設定されます。

../../_images/particles2.png

時間パラメータ

Lifetime

すべてのパーティクルが生き続ける秒単位の時間。ライフタイムが終了すると、新しいパーティクルが作成されて置き換えられます。

Lifetime: 0.5

../../_images/paranim14.gif

Lifetime: 4.0

../../_images/paranim15.gif

One Shot

有効にすると、Particles2Dノードはすべてのパーティクルを一度だけ放出し、その後は二度と放出しません。

Preprocess

パーティクルシステムは、パーティクルの放出がゼロから始まり、放出を開始します。これは、シーンを読み込むときに不便になる場合があり、トーチ、ミストなどのシステムは、入力した瞬間に放出を開始します。プリプロセスは、システムが実際に最初に描画される前に指定された秒数を処理するために使用されます。

Speed Scale

速度スケールのデフォルト値は 1 で、パーティクルシステムの速度を調整するために使用されます。値を小さくすると粒子が遅くなり、値を大きくすると粒子が非常に速くなります。

Explosiveness

ライフタイムが 1 で、パーティクルが10個ある場合、0.1秒ごとにパーティクルが放出されることを意味します。explosiveness パラメータはこれを変更し、パーティクルをすべて一緒に放出させます。範囲は次のとおりです。

  • 0: 一定の間隔でパーティクルを放出します(既定値)。
  • 1: すべてのパーティクルを同時に放出します。

中間の値も使用できます。この機能は、パーティクルの爆発や突然のバーストを作成する場合に便利です。

../../_images/paranim18.gif

Randomness

すべての物理パラメータをランダム化できます。ランダム値の範囲は 0 から 1 です。パラメータをランダム化する数式は次のとおりです:

initial_value = param_value + param_value * randomness

Fixed FPS

この設定を使用して、固定FPSでレンダリングするようにパーティクルシステムを設定できます。たとえば、値を 2 に変更すると、パーティクルは毎秒2フレームでレンダリングされます。これにより、パーティクルシステム自体の速度が低下することはありません。

Fract Delta

これを使用して、Fract Deltaをオンまたはオフにできます。

描画パラメータ

Visibility Rect

可視領域を設定する四角形は、画面上のパーティクルの可視性を制御します。この四角形がビューポートの外側にある場合、エンジンはパーティクルを画面にレンダリングしません。

長方形の W および H プロパティは、それぞれ幅と高さを制御します。X および Y プロパティは、パーティクルエミッタを基準とした長方形の左上隅の位置を制御します。

Godotは、2Dビューの上にあるツールバーを使用して、Visibility Rectを自動的に生成できます。これを行うには、Particles2Dノードを選択し、Particles > Generate Visibility Rect をクリックします。 Godotは数秒間パーティクルを放出するParticles2Dノードをシミュレートし、パーティクルがとるサーフェスに合うように四角形を設定します。

Generation Time (sec) オプションを使用して、放出時間を制御できます。最大値は25秒です。パーティクルが移動する時間が長くなる場合は、Particles2Dノードの preprocess の継続時間を一時的に変更できます。

Local Coords

デフォルトでは、このオプションはオンになっており、パーティクルが放出される空間がノードに対して相対的であることを意味します。ノードを移動すると、すべてのパーティクルも一緒に移動します:

../../_images/paranim20.gif

無効にすると、パーティクルはグローバルな空間に放出され、ノードを移動しても、既に放出されたパーティクルは影響を受けません。

../../_images/paranim21.gif

Draw Order

これにより、個々のパーティクルが描画される順序がコントロールされます。Index は、パーティクルが放出順序に従って描画される事を意味します(デフォルト)。Lifetime は、残っている寿命の順に描画されることを意味します。

パーティクルマテリアルの設定

Spread

このパラメータは、基本的な 放出方向 に対していずれかの方向にランダムに加算される角度(度単位)です。180 のスプレッドでは、すべての方向(+/- 180度)で放出されます。スプレッドが作用するためには、"Initial Velocity"パラメータが0より大きくなければなりません。

../../_images/paranim3.gif

Gravity

すべてのパーティクルに適用される重力。

../../_images/paranim7.gif

Initial Velocity

初期速度は、パーティクルが放出される速度(ピクセル/秒)です。速度は、後で重力または他の加速度によって変更される可能性があります(後で詳しく説明します)。

../../_images/paranim4.gif

Angular Velocity

角速度は、パーティクルに適用される初期角速度です。

Spin Velocity

回転速度は、パーティクルが中心軸で回転する速度(度/秒)です。

../../_images/paranim5.gif

Orbit Velocity

軌道速度は、パーティクルを発生点の周で回転させるために使用されます。

../../_images/paranim6.gif

Linear Acceleration

各パーティクルに適用される線形加速度。

Radial Acceleration

この加速度が正の場合、パーティクルは中心から遠ざかります。負の場合は、中心に吸収されます。

../../_images/paranim8.gif

Tangential Acceleration

この加速度は、中心への接線ベクトルを使用します。radial accelerationと組み合わせることで、素敵な効果が得られます。

../../_images/paranim9.gif

Damping

ダンピングはパーティクルに摩擦を加え、パーティクルを強制的に停止させます。通常、速い初速(velocity)で始まり、フェードすると停止する火花または爆発に特に役立ちます。

../../_images/paranim10.gif

Angle

パーティクルの初期角度(度単位)を決定します。このパラメーターは、主にランダム化に役立ちます。

../../_images/paranim11.gif

Scale

パーティクルの初期スケールを決定します。

../../_images/paranim12.gif

Color

放出されるパーティクルの色を変更するために使用します。

Hue variation

Variationの値は、各パーティクルに適用される初期の色相変化を設定します。 Variation Random の値は、色相変動のランダム性の比率を制御します。

Emission Shapes

パーティクルマテリアルを使用すると、パーティクルが放出される領域と方向を指定する放出マスクを設定できます。これらは、プロジェクト内のテクスチャから生成できます。

パーティクル マテリアルが設定され、パーティクル 2D ノードが選択されていることを確認します。ツールバーに「パーティクル」メニューが表示されます。

../../_images/emission_shapes1.png

それを開き、"Load Emission Mask" を選択します:

../../_images/emission_shapes2.png

次に、マスクとして使用するテクスチャを選択します。

../../_images/emission_shapes3.png

いくつかの設定を含むダイアログボックスが表示されます。

Emission Mask

テクスチャからは3種類の放出マスクを生成できます:

  • Solid Pixels: テクスチャの透過部分を除くすべての領域から、パーティクルが発生。
../../_images/emission_mask_solid.gif
  • Border Pixels: パーティクルはテクスチャの縁から発生。
../../_images/emission_mask_border.gif
  • Directed Border Pixels: Border Pixelsと同じで、さらに方向の情報をマスクに加えることで、パーティクルは縁から遠ざかるように発生。これを使用するには``Initial Velocity(初速)``をセットする必要があります。
../../_images/emission_mask_directed_border.gif

発光(Emission)色

`` Capture from Pixel`` は、パーティクルがマスクの発生ポイントから色を継承するようにします。

「OK」をクリックすると、マスクが生成され、Emission Shapeセクションの下にあるパーティクルマテリアルに設定されます。

../../_images/emission_shapes4.png

このセクション内のすべての値は、「Load Emission Mask」メニューによって自動的に生成されているため、通常はそのままにしておく必要があります。

注釈

画像を Point Texture または Color Texture に直接追加しないでください。代わりに、常に「Load Emission Mask」メニューを使用する必要があります。