【Godot4.4】2Dエフェクト作成:GPUParticles2DとParticleProcessMaterial

GodotEngine

この記事では、Godotにおけるパーティクルエフェクト作成において重要な、GPUParticles2DとParticleProcessMaterialの概要と各プロパティについて一覧でまとめています。
GPUParticles2DとParticleProcessMaterialの概要とともにプロパティの概要を確認し、ざっくりとどのような内容が調整できるのかを把握することを目的としています。

この記事について:
・使用しているGodotのバージョンは4.4 stableです
・2Dパーティクルを対象としているため、3Dパーティクルに関する情報は省いています。
・プロパティの並び順はGodotエディタのインスペクターに準じています
・辞書的な使い方を想定しているため、一覧性を重視し解説は短めにしています
・学習コスト低減のため、個人的によく使うものや重要(と思われる)プロパティには「★」をつけています
 (★がついていないものは、用途が限定的で高度だったり、デフォルトでほぼ触らない項目になります)

GPUParticles2D

GPUParticles2Dは、Godotエンジンに搭載された2Dパーティクルシステムを取り扱うためのノードです。
GPUを活用して大量の粒子を効率よく描画できるため、ゲームに軽快で美しいエフェクトを追加できます。

例 (gif画像にしている都合でカクカクですが、実際は滑らかに表示されています):

コメント
コメント

パーティクルエフェクトノードは、粒子状の描画を行う点がポイントで、主に炎や煙、爆発のほか、雨や雪といった天候のエフェクト作成などで特に強力です。

基本プロパティ

基本プロパティでは、パーティクルの発生有無やサイクルごとのパーティクル量、テクスチャ設定など、パーティクルエフェクトの基本となる設定値を取り扱います。

プロパティ名概要
emittingパーティクル放出の有効/無効
amount1回の放出サイクルごとのパーティクル数
amount_raitoamountを基準とした実際の放出量の比率。
(実際の放出量 = amount * amount_raito)
sub_emitterサブエミッターとして使用するGPUParticles2Dの参照
textureパーティクルのテクスチャ。nullの場合は1×1ピクセルの正方形になる。

Timeプロパティ

Timeプロパティでは、パーティクルの表示時間やタイミングに関する設定が可能です。

プロパティ名概要
lifetimeパーティクルエフェクトが継続(生存)する秒数。
interp_to_end同じノードからのすべてのパーティクルを、その寿命の終わりに向かって同時に補間する
one_shot1サイクルだけパーティクルを放出するかのフラグ
preprocess指定した秒数分パーティクル処理が進行した状態で開始させる
speed_scaleパーティクルエフェクトの速度
explosiveness爆発力。パーティクルの放出間隔を設定 0: 一定間隔でパーティクルを放出 / 1: すべてのパーティクルを同時に放出
randomnessパーティクルエフェクトの放出寿命(lifetime)のランダムレート設定。(1に近いほどばらつきが大きい)
use_fixed_seedseed値の仕様有無。視覚的な結果を固定したい場合に使用。 有効にすると、seedプロパティが表示。
fixed_fpsパーティクルシステムの固定フレームレート設定。
interpolateパーティクル補間の有効/無効。fixed_fpsが画面のリフレッシュレートより低い場合に動きがスムーズになる
fract_deltaTrueにすると分数デルタ計算が行われ、より滑らかな粒子表示効果が得られます。

Collisionプロパティ

Collisionプロパティでは、ParticleProcessMaterialのcollision_modeが、COLLISION_RIGIDまたCOLLISION_HIDE_ON_CONTACTの場合に適用される、パーティクルの衝突判定を設定します。

プロパティ名概要
collision_base_sizeパーティクルの衝突半径の倍率。(パーティクルは常に球形のコリジョン形状)
設定値が「1.0」の時、スプライトの大きさに対応

Drawingプロパティ

Drawingプロパティでは、可視領域や前後関係など、描画にかかわる設定を行います。

プロパティ名概要
visibility_rectパーティクルの可視領域を矩形で設定するプロパティ
(設定領域の一部が画面内にあればパーティクルの描画が発生し、なければ省略される)
local_coordsローカル座標の使用有無。
Trueにすると、GPUParticles2Dノードの変形(拡大縮小など)がパーティクルにも影響する。
draw_orderパーティクルの描画順序(前後関係)の設定。

Trailsプロパティ

Trailsプロパティでは、パーティクルトレイル(軌跡)に関する設定を行います。
各プロパティは、Trail_enabledがTrue(有効)である場合にのみ適用されます。

プロパティ名概要
trail_enabledパーティクルトレイル(軌跡)の有効/無効。
trail_lifetime軌跡の表示時間。
trail_sections軌跡のレンダリングに使用するセクションの数。
trail_section_subdivisions軌跡のレンダリングに使用するサブディビジョンの数。

ProcessMaterialプロパティ

ProcessMaterialプロパティは、パーティクルを処理するマテリアルの設定を行います。
今回の記事ではParticleProcessMaterialについての解説のみですが、ShaderMaterialの適用も可能です。

プロパティ名概要
process_materialパーティクルを処理するためのマテリアル設定。 ParticleProcessMaterialまたはShaderMaterialをアタッチ可能。

ParticleProcessMaterial

ParticleProcessMaterialは、パーティクルのプロパティと動作を定義するためのマテリアルで、主にGPUParticles2D/3Dノードにアタッチして使用します。

コメント
コメント

イメージとしては、
・GPUParticles2D    :粒子の全体的な放出の仕方(+レンダリング)を設定
・ParticleProcessMaterial:粒子単体の挙動を設定
     といった役割になります。

準備手順:

ParticleProcessMaterialを使用する時は、GPUParticles2DのProcessMaterialプロパティから追加を行います。

追加されたParticleProcessMaterialをクリックすることで、各プロパティを展開・編集できます。

基本プロパティ

基本プロパティには、4.4時点でlifetime_randomnessのみが配置されています。

lifetime_randomness粒子単体の放出寿命(lifetime)のランダムレート設定。
(1に近いほどばらつきが大きい)

GPUParticles2D.randomness と ParticleProcessMaterial.lifetime_randomness は、どちらもlifetime(生存寿命)のばらつきを調整するプロパティですが、その適用対象が異なるため、注意が必要です。

・GPUParticles2D.randomness :同サイクルで発生するすべての粒子に対して、lifetimeのばらつきが発生する
・ParticleProcessMaterial.lifetime_randomness:各粒子ごとにlifetimeのばらつきが発生する

コメント
コメント

ランダム化する対象が、
パーティクルエフェクト全体の継続時間ならGPUParticles2D.randomness 
発生する粒子ごとの継続時間ならParticleProcessMaterial.lifetime_randomness を使用します

ParticleFlagsプロパティ

ParticleFlagsプロパティでは、パーティクルの挙動において前提条件にあたるような、各種フラグを設定します。

プロパティ名概要
particle_flag_align_yパーティクルの Y 軸をその速度の方向に合わせる
particle_flag_rotate_yパーティクルはがY 軸を中心にangle_minだけ回転
particle_flag_disable_z粒子が Z 軸上で移動しなくなる(2Dパーティクルではデフォルトで有効になる)
particle_flag_damping_as_friction減衰特性の動作を、線形減速から速度のパーセンテージに基づく減速に変更

Spawnプロパティ

Spawnプロパティでは、パーティクルの生成方法や、生成時の各種パラメータ(速度や方向など)を設定します。

プロパティ名概要
emission_shape_offsetemission_shapeで設定した領域のオフセット
emission_shape_scaleemission_shapeで設定した領域のスケール
emission_shapeパーティクルが放出される領域の形状設定。列挙型 EmissionShape で設定。
  
angle_min
  angle_max
各粒子に適用される、初期回転値の最小/最大。 ※particle_flag_disable_zまたは、particle_flag_rotate_y が有効な場合に適用
angle_curve回転値のアニメーションに適用させるCurveTexture の設定
  
inherit_velocity_ratio生成時に各粒子が継承する、アタッチ先(GPUParticles2D など)の速度パーセンテージ
velocity_pivot粒子の半径速度と軌道速度を計算するために使用されるピボットポイント。 (対象プロパティはAnimatedVelocity参照)
directionパーティクルの放出方向を指定
spread各粒子の初期方向
flatnessY 軸に沿った広がりの量
initial_velocity_min
  initial_velocity_max
各粒子に適用される、初期速度の最小/最大。
spreadやflatnessはこの値が0(初速0)では効果として現れないので注意。

Animated Velocityプロパティ

Animated Velocityプロパティでは、パーティクルに適用するアニメーション速度挙動の設定を行います。
イメージとしては、動きの方向性を決めるようなプロパティで、Spawnと組み合わせることで粒子がどういった挙動を取ろうとするかを設定できます。

プロパティ名概要
angular_velocity_min angular_velocity_max各粒子に適用される、初期回転速度の最小/最大。 ※particle_flag_disable_zまたは、particle_flag_rotate_y が有効な場合に適用
angular_velocity_curve粒子の回転速度に適用させるCurveTexture の設定
directional_velocity_min directional_velocity_max各粒子に適用される、(移動)速度の最小/最大。
directional_velocity_curve粒子の(移動)速度に適用させるCurveTexture の設定
orbit_velocity_min orbit_velocity_max各粒子に適用される、軌道速度(※)の最小/最大。 ※パーティクルが原点の周りを回転する動きのことで、1 秒あたりの原点の周回数で指定
orbit_velocity_curve粒子の軌道速度に適用させるCurveTexture の設定
radial_velocity_min / radial_velocity_max各粒子に適用される、半径速度(※)の最小/最大。 ※プラス値であれば原点 (velocity_pivot) から遠ざかり、マイナス値なら近づく
radial_velocity_curve粒子の半径速度に適用させるCurveTexture の設定
velocity_limit_curveパーティクルの存続期間中の最大速度を定義するCurveTexture
※アニメーション化された速度は減衰の影響を受けないため、ここで設定。

Accelerationsプロパティ

Accelerationsプロパティは、名前の通り加速に関する設定を行います。
「放出された粒子が、時間経過とともにどのように動いていくか」をこのプロパティで設定していきます。

プロパティ名概要
gravity粒子に適用される重力値
linear_accel_min / linear_accel_max各粒子の移動方向に対して適用される、線形加速度の最小/最大。
linear_accel_curve粒子の線形加速度に適用させるCurveTexture の設定
radial_accel_min / radial_accel_max各粒子に適用される、半径加速度(※)の最小/最大。 ※プラス値であれば原点 (velocity_pivot) から遠ざかり、マイナス値なら近づく
radial_accel_curve粒子の半径加速度に適用させるCurveTexture の設定
tangential_accel_min / tangential_accel_max各粒子に適用される、接線加速度(※)の最小/最大。
※接線加速度は粒子の速度に対して垂直であり、粒子に旋回運動を与える。
tangential_accel_curve粒子の半径加速度に適用させるCurveTexture の設定
damping_min /
  damping_max
各粒子に適用される、減衰速度(※)の最小/最大。  
damping_curve粒子の減衰速度に適用させるCurveTexture の設定
attractor_interaction_enabledパーティクルアトラクターとの相互作用有無の設定 (3D用の機能)

Displayプロパティ

Displayプロパティは、粒子の見た目(形や色など)に関する設定を行います。
Curveによって時間的な変化も付けられるため、豪華なエフェクトを作成する時はかなり便利に使用できます。

プロパティ名概要
scale_min / scale_max粒子に適用される、初期スケールの最小/最大。
scale_curve粒子の初期スケールに適用させるCurveTexture またはCurveXYZTextureの設定
scale_over_velocity_min / scale_over_velocity_maxscale_over_velocity_curveのスケーリングで仕様留守速度の最小/最大。
scale_over_velocity_curve粒子を指定速度に基づいてスケーリングするCurveTextureまたはCurveXYZTextureの設定
color粒子の初期色。GPUParticles2D が定義されている場合は、このtexture色が乗算。
color_ramp粒子の色変化に適用させる、GradientTexture1Dの設定 ※シェーダーを使用する場合は、「ALBEDO *= COLOR.rgb;fragment()」の適用が必要な点に注意
color_initial_ramp粒子の初期色の変化に適用させる、GradientTexture1Dの設定
alpha_curve粒子のアルファ値(透明度)に適用させるCurveTexture の設定
emission_curve粒子の色変化に適用させるCurveTexture の設定
hue_variation_min / hue_variation_max粒子に適用される、色相変化の最小/最大。
hue_variation_curve粒子の色相変化に適用させるCurveTexture の設定
anim_speed_min / anim_speed_max粒子に適用される、アニメーション速度のの最小/最大。
anim_speed_curve粒子のアニメーション速度に適用させるCurveTexture の設定
anim_offset_min / anim_offset_max粒子に適用される、アニメーションオフセット値の最小/最大。
(0 が最初のフレーム、1 が最後のフレーム)
anim_offset_curve粒子のアニメーションオフセットに適用させるCurveTexture の設定

Turbulenceプロパティ

Turbulenceプロパティは、乱流効果(=要はノイズによる揺らぎ)の適用有無と、適用する場合の各種パラメータの設定を行います。

プロパティ名概要
turbulence_enabled乱流効果の有効化。設定したノイズに応じてパーティクルの動きに変化をつける。
turbulence_noise_strength乱流ノイズの強さ
turbulence_noise_scale乱流ノイズのスケール。(値が大きいほどノイズが滑らかになる)
turbulence_noise_speed乱流フィールドのスクロール速度
turbulence_noise_speed_random乱流フィールドのその場での変化率。(値が 0.0 の場合、パターンは固定)
turbulence_influence_min / turbulence_influence_max各粒子に対する乱流影響量の最小/最大
(実際の影響量は最小~最大の値の間でランダムな値として計算される)
turbulence_initial_displacement_min / turbulence_initial_displacement_max各粒子に対する発生位置変位の最小/最大
(実際の影響量は最小~最大の値の間でランダムな値として計算される)
turbulence_influence_over_life粒子の乱流効果の影響に適用させるCurveTexture の設定

Collisionプロパティ

Collisionプロパティは、パーティクルの衝突判定に関する設定を行います。デフォルトでは無効ですが、モードを選択すると対応したプロパティが表示され、必要なパラメータを編集することが可能になります。(今回説明は割愛します)

プロパティ名概要
collision_modeパーティクルの衝突モードの選択。
collision_use_scaleパーティクルのスケールを子リジョンにも使用する

SubEmitter

SubEmitterプロパティは、サブエミッターモードの設定と、必要パラメータの設定を行います。
サブエミッターは、ざっくり言うと「パーティクルからパーティクルを放出する」仕組みのことで、花火のようなエフェクト作成で活躍する機能ですが、やや複雑な内容となるため、本記事内では説明を割愛します。

プロパティ名概要
sub_emitter_modeサブエミッターモードの選択。
sub_emitter_keep_velocityサブエミッターが生成時に親パーティクルの速度を継承する

まとめ

以上がGPUParticles2DとParticleProcessMaterialと各プロパティの概要となります。
設定可能な項目がかなり多く、初めのうちは混乱するかと思いますが、

 ・パーティクルエフェクト全体を設定するGPUParticles2Dのプロパティ
 ・そこで放出される各粒子単体の挙動を設定するParticleProcessMaterial

といった関係を理解し、「これは使えそう/使ってみたい」といったプロパティをいろいろ調整していくと、学習とともに新たな発見も得られるかと思います。

また、「Godot Particle」などで検索をかけると、様々なチュートリアル動画やエフェクトの作成例などもヒットしますので、そちらをベースに各種プロパティを変化させ、その結果がどうなるかを見てみるのもおすすめです。

おすすめの本①
おすすめの本➁(Godot)
GodotEngine
ひらまめ(hiramame)をフォローする

コメント

タイトルとURLをコピーしました