Up to date

This page is up to date for Godot 4.3. If you still find outdated information, please open an issue.

Particleシェーダー

Particleシェーダーはオブジェクトが描画される前に実行される特別なタイプのシェーダーです。これらは、色、位置、回転などのマテリアルのプロパティを計算するために使用されます。これらは2Dか3Dかに応じて、CanvasItemまたはSpatialの通常のマテリアルを使用して描画されます。

Particleシェーダーはオブジェクト自体を描画するためには使用されないという点でユニークです。これらはパーティクルのプロパティを計算するために使用され、その後CanvasItemまたはSpatialシェーダーによって使用されます。これらには start()process() という 2 つのプロセッサー関数が含まれています。

他のシェーダータイプとは異なり、Particleシェーダーは前のフレームに出力されたデータを保持します。したがってParticleシェーダーは複数のフレームにわたって実行される複雑なエフェクトに使用できます。

注釈

ParticleシェーダはGPUベースのパーティクル ノード (GPUParticles2D および GPUParticles3D) でのみ使用できます。

CPUベースのパーティクルノード (CPUParticles2D および CPUParticles3D) は、GPU上で レンダリング されます (つまりカスタムCanvasItemまたはSpatialシェーダーを使用できる) が、その動きは CPU 上で シミュレート されます。

レンダリングモード

レンダリングモード

説明

keep_data

再起動時に以前のデータをクリアしない。

disable_force

アトラクターの力を無効にします。

disable_velocity

VELOCITY 値を無視します。

collision_use_scale

コリジョンにパーティクルサイズを適用します。

ビルトイン

"in"としてマークされた変数は読み取り専用です。"out"とマークされた変数はオプションの書き込み用であり、必ずしも適切な値を含むとは限りません。"inout"とマークされた変数は、適切なデフォルト値を提供し、オプションで書き込むことができます。サンプラーは書込みの対象ではなく、マークされていません。

グローバルビルトイン

グローバルビルトインは、カスタム関数を含め、どこでも使用できます。

ビルトイン

説明

in float TIME

Global time since the engine has started, in seconds. It repeats after every 3,600 seconds (which can be changed with the rollover setting). It's not affected by time_scale or pausing. If you need a TIME variable that can be scaled or paused, add your own global shader uniform and update it each frame.

in float PI

定数 PI は円周率 (3.141592)。円の円周と直径の比率と、半回転のラジアン量です。

in float TAU

定数 TAU` は円周率の2倍 (6.283185)。 PI * 2 と、1回転のラジアン量に相当します。

in float E

An E constant (2.718281). Euler's number and a base of the natural logarithm.

start()とprocess()のビルトイン

これらのプロパティは start() 関数と process() 関数の両方からアクセスできます。

関数

説明

in float LIFETIME

パーティクルの寿命。

in float DELTA

デルタ時間。

in uint NUMBER

放出開始以降のユニークな番号。

in uint INDEX

パーティクル インデックス(パーティクル全体から)。

in mat4 EMISSION_TRANSFORM

エミッタの変換(非ローカルシステムに使用)。

in uint RANDOM_SEED

乱数のベースとして使用される乱数シード。

inout bool ACTIVE

パーティクルがアクティブな場合は true 。更新中に false に設定できます。

inout vec4 COLOR

パーティクルの色。書き込むことができ、メッシュのシェーダーからアクセスされます。

inout vec3 VELOCITY

パーティクルの速度。更新中に変更できます。

inout mat4 TRANSFORM

パーティクルのトランスフォーム。

inout vec4 CUSTOM

カスタムパーティクルデータ。メッシュのシェーダーから INSTANCE_CUSTOM としてアクセス可能。

inout float MASS

パーティクルの質量。アトラクターの処理で使用されることを意図しています。デフォルトは 1.0

in vec4 USERDATAX

補足的なユーザー定義データをParticleシェーダーに統合できるようにするベクトル。 USERDATAX は番号で識別される 6 つのビルトインであり、X には 1 から 6 までの番号を指定できます。

in uint FLAG_EMIT_POSITION

emit_subparticle 関数の最後の引数で使用するフラグ。新しいパーティクルのトランスフォームの位置を設定します。

in uint FLAG_EMIT_ROT_SCALE

emit_subparticle 関数の最後の引数で使用するフラグ。新しいパーティクルのトランスフォームの回転とスケールを設定します。

in uint FLAG_EMIT_VELOCITY

emit_subparticle 関数の最後の引数で使用するフラグ。新しいパーティクルの速度を設定します。

in uint FLAG_EMIT_COLOR

emit_subparticle 関数の最後の引数で使用するフラグ。新しいパーティクルの色を設定します。

in uint FLAG_EMIT_CUSTOM

emit_subparticle 関数の最後の引数で使用するフラグ。新しいパーティクルのカスタムデータベクトルを設定します。

in vec3 EMITTER_VELOCITY

パーティクルノードの速度。

in float INTERPOLATE_TO_END

パーティクルノードの interp_to_end プロパティの値。

in uint AMOUNT_RATIO

パーティクルノードの amount_ratio プロパティの値。

注釈

StandardMaterial3D で COLOR 変数を使用するには、 vertex_color_use_as_albedotrue に設定します。 ShaderMaterial では COLOR 変数を使用してアクセスします。

start()のビルトイン

ビルトイン

説明

in bool RESTART_POSITION

true のとき、パーティクルが再起動された、またはカスタムの位置が設定されずに放出された (つまりこのパーティクルが FLAG_EMIT_POSITION フラグなしで emit_subparticle() によって作成された)。

in bool RESTART_ROT_SCALE

true のとき、パーティクルが再起動された、またはカスタムの回転とスケールが設定されずに放出された (つまりこのパーティクルが FLAG_EMIT_ROT_SCALE フラグなしで emit_subparticle() によって作成された)。

in bool RESTART_VELOCITY

true のとき、パーティクルが再起動された、またはカスタムの速度が設定されずに放出された (つまりこのパーティクルが FLAG_EMIT_VELOCITY フラグなしで emit_subparticle() によって作成された)。

in bool RESTART_COLOR

true のとき、パーティクルが再起動された、またはカスタムの色が設定されずに放出された (つまりこのパーティクルが FLAG_EMIT_COLOR フラグなしで emit_subparticle() によって作成された)。

in bool RESTART_CUSTOM

true``のとき、パーティクルが再起動された、またはカスタムのプロパティが設定されずに放出された (つまりこのパーティクルが ``FLAG_EMIT_CUSTOM フラグなしで emit_subparticle() によって作成された)。

process()のビルトイン

ビルトイン

説明

in bool RESTART

現在のプロセスフレームがパーティクルの初回であるときは true

in bool COLLIDED

パーティクルがパーティクルコライダーと衝突した時は true

in vec3 COLLISION_NORMAL

最後の衝突時の法線ベクトル。衝突が検出されていない場合 vec3(0.0) になります。

in float COLLISION_DEPTH

最後の衝突時の法線の長さ。衝突が検出されていない場合 0.0 になります。

in vec3 ATTRACTOR_FORCE

パーティクルに対するその時点でのアトラクターの合成された力。

process()で使える関数

emit_subparticle は現在Particleシェーダでサポートされている唯一のカスタム関数です。これを使うとユーザーはサブエミッターから指定されたパラメーターを持つ新しいパーティクルを追加できます。新しく作成されたパーティクルは、 flags パラメーターと対応するプロパティのみが設定されます。たとえば次のコードは、指定された位置と速度と色を持つパーティクルを放出しますが、回転とスケールとカスタム値は設定されません。

mat4 custom_transform = mat4(1.0);
custom_transform[3].xyz = vec3(10.5, 0.0, 4.0);
emit_subparticle(custom_transform, vec3(1.0, 0.5, 1.0), vec4(1.0, 0.0, 0.0, 1.0), vec4(1.0), FLAG_EMIT_POSITION | FLAG_EMIT_VELOCITY | FLAG_EMIT_COLOR);

関数

説明

bool emit_subparticle (mat4 xform, vec3 velocity, vec4 color, vec4 custom, uint flags)

サブエミッターからパーティクルを放出します。