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 |
in float PI |
定数 |
in float TAU |
定数 TAU` は円周率の2倍 ( |
in float E |
An |
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 |
パーティクルがアクティブな場合は |
inout vec4 COLOR |
パーティクルの色。書き込むことができ、メッシュのシェーダーからアクセスされます。 |
inout vec3 VELOCITY |
パーティクルの速度。更新中に変更できます。 |
inout mat4 TRANSFORM |
パーティクルのトランスフォーム。 |
inout vec4 CUSTOM |
カスタムパーティクルデータ。メッシュのシェーダーから INSTANCE_CUSTOM としてアクセス可能。 |
inout float MASS |
パーティクルの質量。アトラクターの処理で使用されることを意図しています。デフォルトは |
in vec4 USERDATAX |
補足的なユーザー定義データをParticleシェーダーに統合できるようにするベクトル。 |
in uint FLAG_EMIT_POSITION |
|
in uint FLAG_EMIT_ROT_SCALE |
|
in uint FLAG_EMIT_VELOCITY |
|
in uint FLAG_EMIT_COLOR |
|
in uint FLAG_EMIT_CUSTOM |
|
in vec3 EMITTER_VELOCITY |
パーティクルノードの速度。 |
in float INTERPOLATE_TO_END |
パーティクルノードの |
in uint AMOUNT_RATIO |
パーティクルノードの |
注釈
StandardMaterial3D で COLOR 変数を使用するには、 vertex_color_use_as_albedo を true に設定します。 ShaderMaterial では COLOR 変数を使用してアクセスします。
start()のビルトイン
ビルトイン |
説明 |
|---|---|
in bool RESTART_POSITION |
|
in bool RESTART_ROT_SCALE |
|
in bool RESTART_VELOCITY |
|
in bool RESTART_COLOR |
|
in bool RESTART_CUSTOM |
|
process()のビルトイン
ビルトイン |
説明 |
|---|---|
in bool RESTART |
現在のプロセスフレームがパーティクルの初回であるときは |
in bool COLLIDED |
パーティクルがパーティクルコライダーと衝突した時は |
in vec3 COLLISION_NORMAL |
最後の衝突時の法線ベクトル。衝突が検出されていない場合 |
in float COLLISION_DEPTH |
最後の衝突時の法線の長さ。衝突が検出されていない場合 |
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) |
サブエミッターからパーティクルを放出します。 |