thedivergentai/godot-particles
Expert blueprint for GPU particle systems (explosions, magic effects, weather, trails) using GPUParticles2D/3D, ParticleProcessMaterial, gradients, sub-emitters, and custom shaders. Use when creating VFX, environmental effects, or visual feedback. Keywords GPUParticles2D, ParticleProcessMaterial, emission_shape, color_ramp, sub_emitter, one_shot.
npx skills add https://github.com/thedivergentai/GD-Agentic-Skills --skill godot-particles
GPU-accelerated VFX with material-driven emission, recyclers, and MultiMesh swarms — not beginner effect recipes.
amount_ratio to optimize performance dynamically — It does not save GPU memory or improve processing; the full amount is still allocated. Change the amount property directly instead.preprocess to 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.visibility_aabb unconfigured for large systems — Incorrect AABBs cause frustum culling errors (particles popping out) and break LOD calculations. Generate AABBs using the editor toolbar.finished + restart(), or queue_free() only on truly disposable instances.local_coords = true for 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.CPUParticles2D with fract_delta = true for high-speed 2D movement.emitting = true immediately after a finished signal — Async GPU state delays can cause the restart to fail. Use the restart() method instead.EMISSION_SHAPE_POINT for volumentric explosions — Spawning all particles at a single point looks flat. Use a Sphere or Box shape for natural 3D spread.emitting = false initially for one-shot VFX — This prevents unwanted emission at the scene origin before you've had a chance to position the node via script.> MANDATORY for the chosen row. Do NOT Load unused particle scripts for a single effect.
| Goal | Prefer | Script |
|------|--------|--------|
| Burst / one-shot VFX (hit, muzzle, explode) | GPUParticles* + recycle | MANDATORY particle_burst_emitter.gd + smart_oneshot_recycler.gd |
| Trails behind movers | local_coords = false | MANDATORY local_vs_global_coords.gd |
| Weather (rain/snow) heightfield | camera-snapped collision | MANDATORY screenspace_weather_heightfield.gd |
| Million-entity swarms | MultiMesh, not GPUParticles | MANDATORY massive_swarm_multimesh.gd |
| Custom GPU motion / userdata | process material shader | custom_particle_logic.gdshader, dynamic_userdata_modulation.gd |
| Impact sub-emitters | collision subparticle | sub_emitter_impact.gdshader |
| Attractors without global cost | cull_mask isolation | particle_attractor_opt.gd |
| Distant env VFX LOD | visibility_range | particle_lod_manager.gd |
| 2D physics-parented trails stutter | CPUParticles2D + fract_delta | MANDATORY 2d_physics_interpolation_fix.gd |
| Shader param orchestration | material helpers | vfx_shader_manager.gd |
GPUParticles vs CPUParticles vs MultiMesh
Golden path for one-shot lifecycle: finished + restart() — never Timer-based free.
One-shot bursts wired to the recycler.
Aura vs trail coordinate space + teleport restart().
Global weather via camera-snapped heightfield collision.
Million-entity path with set_buffer_interpolated().
Procedural GPU particle motion with CUSTOM/USERDATA.
Collision-driven emit_subparticle() impacts.
Attractor cull_mask isolation.
Runtime USERDATA without breaking GPU batches.
visibility_range hierarchy for env VFX.
CPUParticles2D + fract_delta for physics-parented 2D trails.
Custom shader integration helpers for particle materials.
emitting = false at scene origin → place → restart() (smart_oneshot_recycler.gd).local_coords = false or the trail sticks to the projectile.> Progressive disclosure: open Official Documentation links only when researching a specific API; load Related Skills when routing to a peer domain — do not preload the whole lattice.
local_coords = false).shader_type particles, CUSTOM/USERDATA, COLLIDED/emit_subparticle(), and keep_data process loops.finished handlers, and safe restart()/await patterns used by pools and burst spawners.shader_type particles process logic.finished and one-shot connection hygiene for pooled recyclers that must not leak ghost callbacks.Take thedivergentai/godot-particles from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.