GpuParticles3D
A 3D particle emitter.
A 3D particle emitter.
3D particle node used to create a variety of particle systems and effects. GpuParticles3D features an emitter that generates some number of particles at a given rate.
Use GpuParticles3D.ProcessMaterial to add a ParticleProcessMaterial to configure particle appearance and behavior. Alternatively, you can add a ShaderMaterial which will be applied to all particles.
Declarations checked against C# SDK 1.0.0. Expand a name to see declarations and documentation.
Constructors1
GpuParticles3DConstructor
public GpuParticles3D();Properties32
AmountProperty
public int Amount { get; set; }Capacity, at least 1. Changing it in the current RenderingDevice implementation frees particle data and resets phase for reallocation. Use AmountRatio for emission fraction without changing capacity. Not an exact visible-particle count.
AmountRatioProperty
public float AmountRatio { get; set; }Emission fraction of allocated Amount; supply 0 to 1. Does not reduce allocated capacity or instantly remove live particles. Birth behavior also depends on the simulation material.
CollisionBaseSizeProperty
public float CollisionBaseSize { get; set; }Base particle collision size. Distinct from mesh scale and VisibilityAabb; the material CollisionUseScale controls scale participation. CollisionMode and a GPU-particle collider are required.
DrawOrderProperty
public GpuParticles3D.DrawOrderEnum DrawOrder { get; set; }Particle draw order.
Note: GpuParticles3D.DrawOrderEnum.Index is the only option that supports motion vectors for effects like TAA. It is suggested to use this draw order if the particles are opaque to fix ghosting artifacts.
DrawPass1Property
public Mesh DrawPass1 { get; set; }First drawing-pass mesh. Its surface determines appearance separately from ProcessMaterial. Null hides this pass geometry but does not stop simulation.
DrawPass2Property
public Mesh DrawPass2 { get; set; }Mesh that is drawn for the second draw pass.
DrawPass3Property
public Mesh DrawPass3 { get; set; }Mesh that is drawn for the third draw pass.
DrawPass4Property
public Mesh DrawPass4 { get; set; }Mesh that is drawn for the fourth draw pass.
DrawPassesProperty
public int DrawPasses { get; set; }The number of draw passes when rendering particles.
DrawSkinProperty
public Skin DrawSkin { get; set; }EmittingProperty
public bool Emitting { get; set; }Controls new particle births. False neither removes live particles nor pauses simulation; a one-shot can report false before its effect disappears. Use Restart for a new cycle: repeated true during an active one-shot can cancel its Finished notification.
ExplosivenessProperty
public float Explosiveness { get; set; }Birth-interval compression: 0 distributes births through the cycle, 1 concentrates them at the burst start. Does not set travel velocity or ProcessMaterial forces.
FixedFpsProperty
public int FixedFps { get; set; }Fixed simulation-step rate, not a drawing frame-rate limit. A positive value selects steps of 1/FPS. At 0, current RD uses variable delta for ordinary particles, while trails can require an internal fixed step. Defaults to 30; the example explicitly selects 60.
FractDeltaProperty
public bool FractDelta { get; set; }Refines the DELTA fraction for a particle born within a step. This is neither general float precision nor draw interpolation. Current RD applies it during ordinary emission-phase calculation; do not assume identical effects for all manual/sub-emission paths.
InterpToEndProperty
public float InterpToEnd { get; set; }Value supplied to a particle shader as INTERPOLATE_TO_END, clamped to 0–1. Built-in ParticleProcessMaterial uses it in age calculation; a custom ShaderMaterial must apply it explicitly. It is neither Lifetime duration nor Interpolate frame smoothing.
InterpolateProperty
public bool Interpolate { get; set; }Draw interpolation between simulation steps. It neither replaces FixedFps nor adds process() calls and is distinct from InterpToEnd. Current RD uses it when applying the time remainder to instance data.
LifetimeProperty
public double Lifetime { get; set; }Lifetime/cycle duration in seconds, strictly greater than zero. Along with Amount and birth timing affects density; not the time until Emitting stops or an exact frame count.
LocalCoordsProperty
public bool LocalCoords { get; set; }If true, live particles follow the emitter transform; if false, spawned particles remain in world space as it moves. Choose the space before starting: switching a live effect does not guarantee preserving its appearance.
OneShotProperty
public bool OneShot { get; set; }One cycle instead of looping. Finished reports one-shot completion, not every manual stop of a continuous emitter. An explosive cycle can stop spawning before its particles expire.
PreprocessProperty
public double Preprocess { get; set; }Amount of time to preprocess the particles before animation starts. Lets you start the animation some time after particles have started emitting.
Note: This can be very expensive if set to a high number as it requires running the particle shader a number of times equal to the GpuParticles3D.FixedFps (or 30, if GpuParticles3D.FixedFps is 0) for every second. In extreme cases it can even lead to a GPU crash due to the volume of work done in a single frame.
ProcessMaterialProperty
public Material ProcessMaterial { get; set; }Simulation material, such as ParticleProcessMaterial. Controls behavior rather than the mesh surface. A visible effect separately needs a draw-pass mesh with a surface material.
RandomnessProperty
public float Randomness { get; set; }Emission randomness ratio.
SeedProperty
public uint Seed { get; set; }Particle random seed. To preserve it across Restart, enable UseFixedSeed or pass keepSeed=true. The seed alone does not fix all simulation conditions and steps.
SpeedScaleProperty
public double SpeedScale { get; set; }Simulation progression scale. Zero pauses ordinary progression but does not hide live geometry. Camera motion and transforms with LocalCoords can change the image while paused. Not rendering FPS. 1.0.0 timing limitation: after a long SpeedScale = 0 pause and resuming to 1, the tested one-shot can emit Finished while GPU particles are still visible. The scene timer multiplies accumulated elapsed time by the current speed scale; it is not a GPU-expiry fence. Do not recycle a time-scaled effect from this signal alone. Keeping a simple one-shot at fixed speed avoids this particular pause/resume case; validate a separate lifecycle policy when changing simulation time.
SubEmitterProperty
public EntityPath SubEmitter { get; set; }Path from this emitter to an existing target GpuParticles3D. Assign after both Entities exist; births also require the primary ProcessMaterial mode. Does not create an Entity per particle. Avoid self-links/cycles; revalidate after hierarchy changes.
TrailEnabledProperty
public bool TrailEnabled { get; set; }Enables trail history. Requires compatible mesh poses and UseParticleTrails on the effective surface. The current RenderingDevice rebuilds data when this setting is assigned; do not update it every frame as a cheap animation.
TrailLifetimeProperty
public double TrailLifetime { get; set; }History duration in seconds, not particle Lifetime or rest-mesh length. Minimum approximately 0.01; the current RD backend caps history at 10 seconds although the scene getter stores the request. Changes rebuild data/phase; account for motion, step and budget.
TransformAlignProperty
public GpuParticles3D.TransformAlignEnum TransformAlign { get; set; }Alignment of the rendered particle transform. YToVelocity is the example starting point for directional geometry/trails. Does not change velocity or guarantee freedom from twisting/flattening on every path.
TransformAlignAxisProperty
public RenderingServer.ParticlesTransformAlignAxis TransformAlignAxis { get; set; }When using transform align local billboard, which axis to use for the billboarding. Supports only X or Y.
TransformAlignChannelFilterProperty
public RenderingServer.ParticlesTransformAlignCustomSrc TransformAlignChannelFilter { get; set; }In the case of billboarded particles, which custom channel to read from to calculate their angle.
UseFixedSeedProperty
public bool UseFixedSeed { get; set; }Preserves the assigned Seed during ordinary restarts. Helps repeat an effect but does not guarantee bitwise determinism across drivers, time steps or builds.
VisibilityAabbProperty
public Aabb VisibilityAabb { get; set; }Custom culling bound for the whole emitter. If offscreen, it can hide otherwise visible particles. Not current-frame CaptureAabb, a trajectory clamp or a collider; cover the entire effect and mesh sizes.
Methods65
CaptureAabbAabb
public Aabb CaptureAabb();Reads current active particle bounds. Observing a running effect does not cover all future trajectories or automatically assign VisibilityAabb. GPU readback can have a cost.
AabbAabb of the current state; inspect multiple times and extreme settings before using it for culling.
ConvertFromParticlesvoid
public void ConvertFromParticles(Entity particles);Sets this node's properties to match a given CpuParticles3D node.
| Name | Type | Default |
|---|---|---|
particles | Entity | — |
EmitParticlevoid
public void EmitParticle(Transform3D xform, Vector3 velocity, Color color, Color custom, uint flags);Requests manual emission of one GPU particle. Flags identify supplied fields; custom start() code must respect RESTART_POSITION/ROT_SCALE/VELOCITY/COLOR/CUSTOM to preserve them. A particle is not a new Entity. Available capacity, ProcessMaterial, draw material and correct bounds are required; the method does not return visibility confirmation.
| Name | Type | Default |
|---|---|---|
xform | Transform3D | — |
velocity | Vector3 | — |
color | Color | — |
custom | Color | — |
flags | uint | — |
xformParticle transform. Position and RotationScale flags select translation and basis separately; do not apply EMISSION_TRANSFORM again to already-world-space data.
velocityInitial velocity when the Velocity flag is set; match its space to LocalCoords.
colorParticle COLOR when the Color flag is set. The draw surface must use it.
customFour CUSTOM components when the Custom flag is set. C# uses Color as a carrier; the shader defines their meaning.
flagsBitwise GpuParticles3D.EmitFlags combination explicitly cast to uint. An absent flag requires the corresponding field to be initialized in start().
GetAmountint
public int GetAmount();Returns Amount. Capacity, at least 1. Changing it in the current RenderingDevice implementation frees particle data and resets phase for reallocation. Use AmountRatio for emission fraction without changing capacity. Not an exact visible-particle count.
intCurrent Amount value in the described units; account for the property limitations.
GetAmountRatiofloat
public float GetAmountRatio();Returns AmountRatio. Emission fraction of allocated Amount; supply 0 to 1. Does not reduce allocated capacity or instantly remove live particles. Birth behavior also depends on the simulation material.
floatCurrent AmountRatio value in the described units; account for the property limitations.
GetCollisionBaseSizefloat
public float GetCollisionBaseSize();floatGetDrawOrderGpuParticles3D.DrawOrderEnum
public GpuParticles3D.DrawOrderEnum GetDrawOrder();GpuParticles3D.DrawOrderEnumGetDrawPassMeshMesh
public Mesh GetDrawPassMesh(int pass);Returns the Mesh that is drawn at index pass.
| Name | Type | Default |
|---|---|---|
pass | int | — |
MeshGetDrawPassesint
public int GetDrawPasses();intGetExplosivenessRatiofloat
public float GetExplosivenessRatio();Returns Explosiveness. Birth-interval compression: 0 distributes births through the cycle, 1 concentrates them at the burst start. Does not set travel velocity or ProcessMaterial forces.
floatCurrent Explosiveness value in the described units; account for the property limitations.
GetFixedFpsint
public int GetFixedFps();Fixed simulation-step rate, not a drawing frame-rate limit. A positive value selects steps of 1/FPS. At 0, current RD uses variable delta for ordinary particles, while trails can require an internal fixed step. Defaults to 30; the example explicitly selects 60.
intStored FixedFps rate.
GetFractionalDeltabool
public bool GetFractionalDelta();Refines the DELTA fraction for a particle born within a step. This is neither general float precision nor draw interpolation. Current RD applies it during ordinary emission-phase calculation; do not assume identical effects for all manual/sub-emission paths.
boolStored fractional-delta flag.
GetInterpToEndfloat
public float GetInterpToEnd();Value supplied to a particle shader as INTERPOLATE_TO_END, clamped to 0–1. Built-in ParticleProcessMaterial uses it in age calculation; a custom ShaderMaterial must apply it explicitly. It is neither Lifetime duration nor Interpolate frame smoothing.
floatStored value after clamping to 0–1.
GetInterpolatebool
public bool GetInterpolate();Draw interpolation between simulation steps. It neither replaces FixedFps nor adds process() calls and is distinct from InterpToEnd. Current RD uses it when applying the time remainder to instance data.
boolStored Interpolate flag.
GetLifetimedouble
public double GetLifetime();Returns Lifetime. Lifetime/cycle duration in seconds, strictly greater than zero. Along with Amount and birth timing affects density; not the time until Emitting stops or an exact frame count.
doubleCurrent Lifetime value in the described units; account for the property limitations.
GetOneShotbool
public bool GetOneShot();Returns OneShot. One cycle instead of looping. Finished reports one-shot completion, not every manual stop of a continuous emitter. An explosive cycle can stop spawning before its particles expire.
boolCurrent OneShot value in the described units; account for the property limitations.
GetPreProcessTimedouble
public double GetPreProcessTime();doubleGetProcessMaterialMaterial
public Material GetProcessMaterial();Returns ProcessMaterial. Simulation material, such as ParticleProcessMaterial. Controls behavior rather than the mesh surface. A visible effect separately needs a draw-pass mesh with a surface material.
MaterialCurrent ProcessMaterial value in the described units; account for the property limitations.
GetRandomnessRatiofloat
public float GetRandomnessRatio();floatGetSeeduint
public uint GetSeed();Returns Seed. Particle random seed. To preserve it across Restart, enable UseFixedSeed or pass keepSeed=true. The seed alone does not fix all simulation conditions and steps.
uintCurrent Seed value in the described units; account for the property limitations.
GetSkinSkin
public Skin GetSkin();SkinGetSpeedScaledouble
public double GetSpeedScale();Returns SpeedScale. Simulation progression scale. Zero pauses ordinary progression but does not hide live geometry. Camera motion and transforms with LocalCoords can change the image while paused. Not rendering FPS. 1.0.0 timing limitation: after a long SpeedScale = 0 pause and resuming to 1, the tested one-shot can emit Finished while GPU particles are still visible. The scene timer multiplies accumulated elapsed time by the current speed scale; it is not a GPU-expiry fence. Do not recycle a time-scaled effect from this signal alone. Keeping a simple one-shot at fixed speed avoids this particular pause/resume case; validate a separate lifecycle policy when changing simulation time.
doubleCurrent SpeedScale value in the described units; account for the property limitations.
GetSubEmitterEntityPath
public EntityPath GetSubEmitter();Returns SubEmitter. Path from this emitter to an existing target GpuParticles3D. Assign after both Entities exist; births also require the primary ProcessMaterial mode. Does not create an Entity per particle. Avoid self-links/cycles; revalidate after hierarchy changes.
EntityPathCurrent SubEmitter value; account for units and the setting/effective-result distinction.
GetTrailLifetimedouble
public double GetTrailLifetime();Returns TrailLifetime. History duration in seconds, not particle Lifetime or rest-mesh length. Minimum approximately 0.01; the current RD backend caps history at 10 seconds although the scene getter stores the request. Changes rebuild data/phase; account for motion, step and budget.
doubleCurrent TrailLifetime value; account for units and the setting/effective-result distinction.
GetTransformAlignGpuParticles3D.TransformAlignEnum
public GpuParticles3D.TransformAlignEnum GetTransformAlign();Returns TransformAlign. Alignment of the rendered particle transform. YToVelocity is the example starting point for directional geometry/trails. Does not change velocity or guarantee freedom from twisting/flattening on every path.
GpuParticles3D.TransformAlignEnumCurrent TransformAlign value; account for units and the setting/effective-result distinction.
GetTransformAlignAxisRenderingServer.ParticlesTransformAlignAxis
public RenderingServer.ParticlesTransformAlignAxis GetTransformAlignAxis();RenderingServer.ParticlesTransformAlignAxisGetTransformAlignChannelFilterRenderingServer.ParticlesTransformAlignCustomSrc
public RenderingServer.ParticlesTransformAlignCustomSrc GetTransformAlignChannelFilter();RenderingServer.ParticlesTransformAlignCustomSrcGetUseFixedSeedbool
public bool GetUseFixedSeed();Returns UseFixedSeed. Preserves the assigned Seed during ordinary restarts. Helps repeat an effect but does not guarantee bitwise determinism across drivers, time steps or builds.
boolCurrent UseFixedSeed value in the described units; account for the property limitations.
GetUseLocalCoordinatesbool
public bool GetUseLocalCoordinates();Returns LocalCoords. If true, live particles follow the emitter transform; if false, spawned particles remain in world space as it moves. Choose the space before starting: switching a live effect does not guarantee preserving its appearance.
boolCurrent LocalCoords value in the described units; account for the property limitations.
GetVisibilityAabbAabb
public Aabb GetVisibilityAabb();Returns VisibilityAabb. Custom culling bound for the whole emitter. If offscreen, it can hide otherwise visible particles. Not current-frame CaptureAabb, a trajectory clamp or a collider; cover the entire effect and mesh sizes.
AabbCurrent VisibilityAabb value in the described units; account for the property limitations.
IsEmittingbool
public bool IsEmitting();Returns Emitting. Controls new particle births. False neither removes live particles nor pauses simulation; a one-shot can report false before its effect disappears. Use Restart for a new cycle: repeated true during an active one-shot can cancel its Finished notification.
boolCurrent Emitting value in the described units; account for the property limitations.
IsTrailEnabledbool
public bool IsTrailEnabled();Returns TrailEnabled. Enables trail history. Requires compatible mesh poses and UseParticleTrails on the effective surface. The current RenderingDevice rebuilds data when this setting is assigned; do not update it every frame as a cheap animation.
boolCurrent TrailEnabled value; account for units and the setting/effective-result distinction.
RequestParticlesProcess2 overloads
public void RequestParticlesProcess(float processTime);Requests the particles to process for extra process time during a single frame.
process_time defines the time that the particles will process while emitting is on. process_time_residual defines the time that particles will process with emitting turned off for the simulation. When combined with GpuParticles3D.SpeedScale set to 0.0, this is useful to be able to seek a particle system timeline.
| Name | Type | Default |
|---|---|---|
processTime | float | — |
public void RequestParticlesProcess(float processTime, float processTimeResidual = 0f);Requests the particles to process for extra process time during a single frame.
process_time defines the time that the particles will process while emitting is on. process_time_residual defines the time that particles will process with emitting turned off for the simulation. When combined with GpuParticles3D.SpeedScale set to 0.0, this is useful to be able to seek a particle system timeline.
| Name | Type | Default |
|---|---|---|
processTime | float | — |
processTimeResidual | float | 0f |
Restart2 overloads
public void Restart();Clears/restarts the cycle and enables emission. Can deliberately interrupt a live effect: waiting for Finished before every call is not required. A new seed is chosen only without UseFixedSeed and without keepSeed.
public void Restart(bool keepSeed = false);Clears/restarts the cycle and enables emission. Can deliberately interrupt a live effect: waiting for Finished before every call is not required. A new seed is chosen only without UseFixedSeed and without keepSeed.
| Name | Type | Default |
|---|---|---|
keepSeed | bool | false |
keepSeedTrue preserves the current seed. False permits a new one if UseFixedSeed is also disabled.
SetAmountvoid
public void SetAmount(int amount);Sets Amount. Capacity, at least 1. Changing it in the current RenderingDevice implementation frees particle data and resets phase for reallocation. Use AmountRatio for emission fraction without changing capacity. Not an exact visible-particle count.
| Name | Type | Default |
|---|---|---|
amount | int | — |
amountCapacity, at least 1. Changing it in the current RenderingDevice implementation frees particle data and resets phase for reallocation. Use AmountRatio for emission fraction without changing capacity. Not an exact visible-particle count.
SetAmountRatiovoid
public void SetAmountRatio(float ratio);Sets AmountRatio. Emission fraction of allocated Amount; supply 0 to 1. Does not reduce allocated capacity or instantly remove live particles. Birth behavior also depends on the simulation material.
| Name | Type | Default |
|---|---|---|
ratio | float | — |
ratioEmission fraction of allocated Amount; supply 0 to 1. Does not reduce allocated capacity or instantly remove live particles. Birth behavior also depends on the simulation material.
SetCollisionBaseSizevoid
public void SetCollisionBaseSize(float size);| Name | Type | Default |
|---|---|---|
size | float | — |
SetDrawOrdervoid
public void SetDrawOrder(GpuParticles3D.DrawOrderEnum order);| Name | Type | Default |
|---|---|---|
order | GpuParticles3D.DrawOrderEnum | — |
SetDrawPassMeshvoid
public void SetDrawPassMesh(int pass, Mesh mesh);Sets the Mesh that is drawn at index pass.
| Name | Type | Default |
|---|---|---|
pass | int | — |
mesh | Mesh | — |
SetDrawPassesvoid
public void SetDrawPasses(int passes);| Name | Type | Default |
|---|---|---|
passes | int | — |
SetEmittingvoid
public void SetEmitting(bool emitting);Sets Emitting. Controls new particle births. False neither removes live particles nor pauses simulation; a one-shot can report false before its effect disappears. Use Restart for a new cycle: repeated true during an active one-shot can cancel its Finished notification.
| Name | Type | Default |
|---|---|---|
emitting | bool | — |
emittingControls new particle births. False neither removes live particles nor pauses simulation; a one-shot can report false before its effect disappears. Use Restart for a new cycle: repeated true during an active one-shot can cancel its Finished notification.
SetExplosivenessRatiovoid
public void SetExplosivenessRatio(float ratio);Sets Explosiveness. Birth-interval compression: 0 distributes births through the cycle, 1 concentrates them at the burst start. Does not set travel velocity or ProcessMaterial forces.
| Name | Type | Default |
|---|---|---|
ratio | float | — |
ratioBirth-interval compression: 0 distributes births through the cycle, 1 concentrates them at the burst start. Does not set travel velocity or ProcessMaterial forces.
SetFixedFpsvoid
public void SetFixedFps(int fps);Fixed simulation-step rate, not a drawing frame-rate limit. A positive value selects steps of 1/FPS. At 0, current RD uses variable delta for ordinary particles, while trails can require an internal fixed step. Defaults to 30; the example explicitly selects 60.
| Name | Type | Default |
|---|---|---|
fps | int | — |
fpsZero or a positive simulation rate. The setter stores a setting, not a display refresh-rate cap.
SetFractionalDeltavoid
public void SetFractionalDelta(bool enable);Refines the DELTA fraction for a particle born within a step. This is neither general float precision nor draw interpolation. Current RD applies it during ordinary emission-phase calculation; do not assume identical effects for all manual/sub-emission paths.
| Name | Type | Default |
|---|---|---|
enable | bool | — |
enableEnable fractional birth-step delta.
SetInterpToEndvoid
public void SetInterpToEnd(float interp);Value supplied to a particle shader as INTERPOLATE_TO_END, clamped to 0–1. Built-in ParticleProcessMaterial uses it in age calculation; a custom ShaderMaterial must apply it explicitly. It is neither Lifetime duration nor Interpolate frame smoothing.
| Name | Type | Default |
|---|---|---|
interp | float | — |
interpValue from 0 through 1; out-of-range values clamp to the nearest bound.
SetInterpolatevoid
public void SetInterpolate(bool enable);Draw interpolation between simulation steps. It neither replaces FixedFps nor adds process() calls and is distinct from InterpToEnd. Current RD uses it when applying the time remainder to instance data.
| Name | Type | Default |
|---|---|---|
enable | bool | — |
enableEnable draw interpolation.
SetLifetimevoid
public void SetLifetime(double secs);Sets Lifetime. Lifetime/cycle duration in seconds, strictly greater than zero. Along with Amount and birth timing affects density; not the time until Emitting stops or an exact frame count.
| Name | Type | Default |
|---|---|---|
secs | double | — |
secsLifetime/cycle duration in seconds, strictly greater than zero. Along with Amount and birth timing affects density; not the time until Emitting stops or an exact frame count.
SetOneShotvoid
public void SetOneShot(bool enable);Sets OneShot. One cycle instead of looping. Finished reports one-shot completion, not every manual stop of a continuous emitter. An explosive cycle can stop spawning before its particles expire.
| Name | Type | Default |
|---|---|---|
enable | bool | — |
enableOne cycle instead of looping. Finished reports one-shot completion, not every manual stop of a continuous emitter. An explosive cycle can stop spawning before its particles expire.
SetPreProcessTimevoid
public void SetPreProcessTime(double secs);| Name | Type | Default |
|---|---|---|
secs | double | — |
SetProcessMaterialvoid
public void SetProcessMaterial(Material material);Sets ProcessMaterial. Simulation material, such as ParticleProcessMaterial. Controls behavior rather than the mesh surface. A visible effect separately needs a draw-pass mesh with a surface material.
| Name | Type | Default |
|---|---|---|
material | Material | — |
materialSimulation material, such as ParticleProcessMaterial. Controls behavior rather than the mesh surface. A visible effect separately needs a draw-pass mesh with a surface material.
SetRandomnessRatiovoid
public void SetRandomnessRatio(float ratio);| Name | Type | Default |
|---|---|---|
ratio | float | — |
SetSeedvoid
public void SetSeed(uint seed);Sets Seed. Particle random seed. To preserve it across Restart, enable UseFixedSeed or pass keepSeed=true. The seed alone does not fix all simulation conditions and steps.
| Name | Type | Default |
|---|---|---|
seed | uint | — |
seedParticle random seed. To preserve it across Restart, enable UseFixedSeed or pass keepSeed=true. The seed alone does not fix all simulation conditions and steps.
SetSkinvoid
public void SetSkin(Skin skin);| Name | Type | Default |
|---|---|---|
skin | Skin | — |
SetSpeedScalevoid
public void SetSpeedScale(double scale);Sets SpeedScale. Simulation progression scale. Zero pauses ordinary progression but does not hide live geometry. Camera motion and transforms with LocalCoords can change the image while paused. Not rendering FPS. 1.0.0 timing limitation: after a long SpeedScale = 0 pause and resuming to 1, the tested one-shot can emit Finished while GPU particles are still visible. The scene timer multiplies accumulated elapsed time by the current speed scale; it is not a GPU-expiry fence. Do not recycle a time-scaled effect from this signal alone. Keeping a simple one-shot at fixed speed avoids this particular pause/resume case; validate a separate lifecycle policy when changing simulation time.
| Name | Type | Default |
|---|---|---|
scale | double | — |
scaleSimulation progression scale. Zero pauses ordinary progression but does not hide live geometry. Camera motion and transforms with LocalCoords can change the image while paused. Not rendering FPS. 1.0.0 timing limitation: after a long SpeedScale = 0 pause and resuming to 1, the tested one-shot can emit Finished while GPU particles are still visible. The scene timer multiplies accumulated elapsed time by the current speed scale; it is not a GPU-expiry fence. Do not recycle a time-scaled effect from this signal alone. Keeping a simple one-shot at fixed speed avoids this particular pause/resume case; validate a separate lifecycle policy when changing simulation time.
SetSubEmittervoid
public void SetSubEmitter(EntityPath path);Sets SubEmitter. Path from this emitter to an existing target GpuParticles3D. Assign after both Entities exist; births also require the primary ProcessMaterial mode. Does not create an Entity per particle. Avoid self-links/cycles; revalidate after hierarchy changes.
| Name | Type | Default |
|---|---|---|
path | EntityPath | — |
pathPath from this emitter to an existing target GpuParticles3D. Assign after both Entities exist; births also require the primary ProcessMaterial mode. Does not create an Entity per particle. Avoid self-links/cycles; revalidate after hierarchy changes.
SetTrailEnabledvoid
public void SetTrailEnabled(bool enabled);Sets TrailEnabled. Enables trail history. Requires compatible mesh poses and UseParticleTrails on the effective surface. The current RenderingDevice rebuilds data when this setting is assigned; do not update it every frame as a cheap animation.
| Name | Type | Default |
|---|---|---|
enabled | bool | — |
enabledEnables trail history. Requires compatible mesh poses and UseParticleTrails on the effective surface. The current RenderingDevice rebuilds data when this setting is assigned; do not update it every frame as a cheap animation.
SetTrailLifetimevoid
public void SetTrailLifetime(double secs);Sets TrailLifetime. History duration in seconds, not particle Lifetime or rest-mesh length. Minimum approximately 0.01; the current RD backend caps history at 10 seconds although the scene getter stores the request. Changes rebuild data/phase; account for motion, step and budget.
| Name | Type | Default |
|---|---|---|
secs | double | — |
secsHistory duration in seconds, not particle Lifetime or rest-mesh length. Minimum approximately 0.01; the current RD backend caps history at 10 seconds although the scene getter stores the request. Changes rebuild data/phase; account for motion, step and budget.
SetTransformAlignvoid
public void SetTransformAlign(GpuParticles3D.TransformAlignEnum align);Sets TransformAlign. Alignment of the rendered particle transform. YToVelocity is the example starting point for directional geometry/trails. Does not change velocity or guarantee freedom from twisting/flattening on every path.
| Name | Type | Default |
|---|---|---|
align | GpuParticles3D.TransformAlignEnum | — |
alignAlignment of the rendered particle transform. YToVelocity is the example starting point for directional geometry/trails. Does not change velocity or guarantee freedom from twisting/flattening on every path.
SetTransformAlignAxisvoid
public void SetTransformAlignAxis(RenderingServer.ParticlesTransformAlignAxis align);| Name | Type | Default |
|---|---|---|
align | RenderingServer.ParticlesTransformAlignAxis | — |
SetTransformAlignChannelFiltervoid
public void SetTransformAlignChannelFilter(RenderingServer.ParticlesTransformAlignCustomSrc channelFilter);| Name | Type | Default |
|---|---|---|
channelFilter | RenderingServer.ParticlesTransformAlignCustomSrc | — |
SetUseFixedSeedvoid
public void SetUseFixedSeed(bool useFixedSeed);Sets UseFixedSeed. Preserves the assigned Seed during ordinary restarts. Helps repeat an effect but does not guarantee bitwise determinism across drivers, time steps or builds.
| Name | Type | Default |
|---|---|---|
useFixedSeed | bool | — |
useFixedSeedPreserves the assigned Seed during ordinary restarts. Helps repeat an effect but does not guarantee bitwise determinism across drivers, time steps or builds.
SetUseLocalCoordinatesvoid
public void SetUseLocalCoordinates(bool enable);Sets LocalCoords. If true, live particles follow the emitter transform; if false, spawned particles remain in world space as it moves. Choose the space before starting: switching a live effect does not guarantee preserving its appearance.
| Name | Type | Default |
|---|---|---|
enable | bool | — |
enableIf true, live particles follow the emitter transform; if false, spawned particles remain in world space as it moves. Choose the space before starting: switching a live effect does not guarantee preserving its appearance.
SetVisibilityAabbvoid
public void SetVisibilityAabb(Aabb aabb);Sets VisibilityAabb. Custom culling bound for the whole emitter. If offscreen, it can hide otherwise visible particles. Not current-frame CaptureAabb, a trajectory clamp or a collider; cover the entire effect and mesh sizes.
| Name | Type | Default |
|---|---|---|
aabb | Aabb | — |
aabbCustom culling bound for the whole emitter. If offscreen, it can hide otherwise visible particles. Not current-frame CaptureAabb, a trajectory clamp or a collider; cover the entire effect and mesh sizes.
Signals and events1
FinishedEvent
public event Action Finished;One-shot cycle completion. Connect before triggering. Not a general disappearance event after manually stopping a continuous emitter; repeated Emitting=true during an active one-shot can cancel the notification. 1.0.0 timing limitation: after a long SpeedScale = 0 pause and resuming to 1, the tested one-shot can emit Finished while GPU particles are still visible. The scene timer multiplies accumulated elapsed time by the current speed scale; it is not a GPU-expiry fence. Do not recycle a time-scaled effect from this signal alone. Keeping a simple one-shot at fixed speed avoids this particular pause/resume case; validate a separate lifecycle policy when changing simulation time.
Fields and constants1
MaxDrawPassesField
public const long MaxDrawPasses = 4;Maximum number of draw passes supported.
GpuParticles3D.DrawOrderEnum
| Value | Description |
|---|---|
Index = 0 | Particles are drawn in the order emitted. |
Lifetime = 1 | Particles are drawn in order of remaining lifetime. In other words, the particle with the highest lifetime is drawn at the front. |
ReverseLifetime = 2 | Particles are drawn in reverse order of remaining lifetime. In other words, the particle with the lowest lifetime is drawn at the front. |
ViewDepth = 3 | Particles are drawn in order of depth. |
GpuParticles3D.EmitFlags
| Value | Description |
|---|---|
Color = 8 | Particle starts with specified color. |
Custom = 16 | Particle starts with specified |
Position = 1 | Particle starts at the specified position. |
RotationScale = 2 | Particle starts with specified rotation and scale. |
Velocity = 4 | Particle starts with the specified velocity vector, which defines the emission direction and speed. |
GpuParticles3D.TransformAlignEnum
| Value | Description |
|---|---|
Disabled = 0 | Do not align particle transforms relative to the camera or velocity. |
LocalBillboard = 4 | Align each particle's Z axis to face the camera, while preserving a given axis (X or Y). |
YToVelocity = 2 | Align each particle's Y axis to the velocity vector. |
ZBillboard = 1 | Align each particle's Z axis to face the camera. |
ZBillboardYToVelocity = 3 | Align each particle's Z axis to face the camera and Y axis to the velocity vector. |