All skills
thedivergentai avatar

/godot-particles

@9d6e91e

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.

Use this Skill: https://skilld.dev/gh/thedivergentai/gd-agentic-skills/godot-particles

This session only. Nothing lands on disk.

SKILL.md

β‰ˆ91 tokens always: the name and description. β‰ˆ3.3k when used: this file. β‰ˆ1.7k more on demand in 2 files.

NEVER Do in Particle Systems

  • NEVER use 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.
  • 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 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.
  • NEVER leave 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.
  • 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(), or queue_free() only on truly disposable instances.
  • NEVER use 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.
  • NEVER expect GPUParticles2D to interpolate correctly in Godot 4.3 β€” They stutter when parented to physics bodies. Use CPUParticles2D with fract_delta = true for high-speed 2D movement.
  • NEVER trigger emitting = true immediately after a finished signal β€” Async GPU state delays can cause the restart to fail. Use the restart() 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_POINT for 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 = 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.

Choose Table (load only the matching 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

  • GPUParticles* β€” default for desktop/console VFX amount budgets.
  • CPUParticles2D β€” only when 2D physics interpolation / smooth parenting is required (see NEVER).
  • MultiMesh β€” when entity count leaves the particle domain (fish/insects/debris fields).

Available Scripts

smart_oneshot_recycler.gd

Golden path for one-shot lifecycle: finished + restart() β€” never Timer-based free.

particle_burst_emitter.gd

One-shot bursts wired to the recycler.

local_vs_global_coords.gd

Aura vs trail coordinate space + teleport restart().

screenspace_weather_heightfield.gd

Global weather via camera-snapped heightfield collision.

massive_swarm_multimesh.gd

Million-entity path with set_buffer_interpolated().

custom_particle_logic.gdshader

Procedural GPU particle motion with CUSTOM/USERDATA.

sub_emitter_impact.gdshader

Collision-driven emit_subparticle() impacts.

particle_attractor_opt.gd

Attractor cull_mask isolation.

dynamic_userdata_modulation.gd

Runtime USERDATA without breaking GPU batches.

particle_lod_manager.gd

visibility_range hierarchy for env VFX.

2d_physics_interpolation_fix.gd

CPUParticles2D + fract_delta for physics-parented 2D trails.

vfx_shader_manager.gd

Custom shader integration helpers for particle materials.

Expert Pointers

  • One-shots: emitting = false at scene origin β†’ place β†’ restart() (smart_oneshot_recycler.gd).
  • Trails: local_coords = false or the trail sticks to the projectile.
  • Do not invent explosion/smoke/sparkle material recipes here β€” Official Docs cover material UI; this skill owns lifecycle, coords, LOD, and swarm routing.

Deep dives (on demand)

  • Collision sub-emitters, fluid shaders, VFX pools β†’ expert-vfx-patterns.md
  • VFX pool recycle pattern β†’ vfx_pool_manager.gd
  • WHY GPU particles cannot drive per-collision SFX β€” CPU has no collision callbacks; sub-emitters or looping impact beds only.

Reference

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.

Official Documentation

  • Particle systems (2D) β€” GPUParticles2D/CPUParticles2D setup, amount/lifetime/one-shot, and when 2D trails need CPU particles for smooth motion.
  • ParticleProcessMaterial 2D β€” emission shapes, gravity/velocity curves, and color ramps that drive most 2D VFX without custom shaders.
  • Creating a 3D particle system β€” GPUParticles3D scene wiring, process material assignment, and first-emission checklist for 3D VFX.
  • Process material properties β€” ParticleProcessMaterial emission, forces, scale/color curves, and collision/sub-emitter modes used by expert patterns.
  • Particle properties β€” node-level amount, lifetime, explosiveness, local_coords, visibility AABB, preprocess, and restart/finished lifecycle.
  • Particle subemitters β€” chaining impact/debris systems and why a particle system cannot recurse as its own sub-emitter.
  • Particle collision β€” GPUParticlesCollision* shapes, rigid/hide modes, and GPU collision limits versus CPU-synced SFX.
  • Particle attractors β€” attractor types plus cull_mask/layer isolation so global weather does not pay every attractor cost.
  • Particle trails β€” trail ribbons and why smoke/fire trails must use global space (local_coords = false).
  • Particle shader β€” shader_type particles, CUSTOM/USERDATA, COLLIDED/emit_subparticle(), and keep_data process loops.
  • Using MultiMesh β€” when millions of entities should bypass GPUParticles via MultiMesh + interpolated buffers.
  • Visibility ranges β€” GeometryInstance3D distance fade/hysteresis that stops distant environmental particle processing.

Related Skills

Prerequisites
  • godot-project-foundations β€” scenes, resources, and import basics before packing VFX Prefabs and GradientTexture1D materials.
  • godot-gdscript-mastery β€” typed GPUParticles APIs, finished handlers, and safe restart()/await patterns used by pools and burst spawners.
  • godot-shaders-basics β€” ShaderMaterial workflow and shading-language fundamentals required before shader_type particles process logic.
Complements
  • godot-3d-materials β€” draw materials, transparency sorting, and next_pass stacks that render quads/meshes spawned by GPUParticles3D.
  • godot-3d-lighting β€” emissive fire/sparks vs environment exposure; pair particle albedo with real lights when VFX must light the scene.
  • godot-audio-systems β€” impact/loop SFX while GPU emitters are active when per-particle collision audio is unavailable.
  • godot-performance-optimization β€” amount budgets, visibility AABB, attractor masks, and MultiMesh cutovers when VFX dominate GPU time.
  • godot-camera-systems β€” camera-follow heightfields, visibility-range thresholds, and frustum-aware weather emitters.
  • godot-signal-architecture β€” finished and one-shot connection hygiene for pooled recyclers that must not leak ghost callbacks.
  • godot-2d-physics β€” physics-parented 2D trails where CPUParticles2D + interpolation replaces stuttering GPUParticles2D.
Downstream / consumers
  • godot-combat-system β€” hit sparks, blood/debris bursts, and muzzle FX spawned from damage resolution.
  • godot-ability-system β€” cast/channel/impact VFX attached to ability lifecycle and targeting feedback.
  • godot-genre-shooter β€” muzzle flash, tracers, explosions, and environmental smoke stacks built on these particle patterns.
  • godot-monte-carlo-balancer β€” when VFX density/readability changes perceived difficulty or telegraph clarity, simulate juice budgets with combat outcomes.
Master
  • godot-master β€” library router and mirrored module entry for cross-skill discovery.

Source: SKILL.md on GitHub

1 warning16d5 checks Β· Risk SAFE
  • Gen Agent Trust Hub16d

    The skill is a collection of Godot Engine blueprints and scripts for GPU-based particle systems. It provides standard VFX implementations and contains no malicious patterns, unauthorized network access, or data exfiltration techniques.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW Β· No issues

  • Runlayer7mo

    3/3 files flagged

  • ZeroLeaks5mo

    Score: 93/100 Β· 2 sections analyzed

Signed by skilld at 9d6e91e. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 3 weeks ago.

Activeupdated 2 months ago

README badge

README badge for thedivergentai/gd-agentic-skills/godot-particles