godot-particles
Installation
SKILL.md
NEVER Do in Particle Systems
- NEVER use
amount_ratioto optimize performance dynamically — It does not save GPU memory or improve processing; the fullamountis still allocated. Change theamountproperty directly instead. - NEVER use CPUParticles2D for performance-critical effects on Desktop — Use GPUParticles unless targeting low-end mobile with no GPU support. However, use CPUParticles2D if you need Physics Interpolation for smooth trails on moving bodies in 2D.
- NEVER set
preprocessto extremely high values — High values (e.g., 60s) will force the GPU to simulate thousands of frames in a single render tick, potentially causing an immediate GPU crash. - NEVER leave
visibility_aabbunconfigured for large systems — Incorrect AABBs cause frustum culling errors (particles popping out) and break LOD calculations. Generate AABBs using the editor toolbar. - NEVER enable turbulence on Mobile/Web without testing — 3D noise evaluation per particle is extremely heavy. Disable via Feature Tags on lower-end platforms.
- NEVER use a Timer to lifetime-cleanup one-shots — Prefer smart_oneshot_recycler.gd:
finished+restart(), orqueue_free()only on truly disposable instances. - NEVER use
local_coords = truefor trails — Smoke or fire left behind by a projectile MUST use global space (local_coords = false) or the trail will follow the projectile like a stiff stick. - NEVER expect GPUParticles2D to interpolate correctly in Godot 4.3 — They stutter when parented to physics bodies. Use
CPUParticles2Dwithfract_delta = truefor high-speed 2D movement. - NEVER trigger
emitting = trueimmediately after afinishedsignal — Async GPU state delays can cause the restart to fail. Use therestart()method instead. - NEVER attempt recursion with sub-emitters — A particle system cannot be its own sub-emitter; it will silently fail.
- NEVER forget alpha in color gradients — Particles that disappear instantly at the end of their lifetime look harsh; always add a gradient point at 1.0 with 0.0 alpha for a smooth exit.
- NEVER use
EMISSION_SHAPE_POINTfor volumentric explosions — Spawning all particles at a single point looks flat. Use a Sphere or Box shape for natural 3D spread. - NEVER forget to set
emitting = falseinitially for one-shot VFX — This prevents unwanted emission at the scene origin before you've had a chance to position the node via script.
Choose Table (load only the matching script)
MANDATORY for the chosen row. Do NOT Load unused particle scripts for a single effect.