pluginagentmarketplace/custom-plugin-game-developer/particle-systems
Trust tier 3
- community
- By pluginagentmarketplace
- Design
- pluginagentmarketplace/custom-plugin-game-developer
- skills/particle-systems/SKILL.md
- Updated 10 Oct 2026
- Version 1.0.01 version recorded
Source check pending
Checking that the SKILL.md file is still in the repository.
Creating visual effects using particle systems, physics simulation, and post-processing for polished, dynamic game graphics.
Install
npx vskill@latest install pluginagentmarketplace/custom-plugin-game-developer/particle-systemsSKILL.md
Particle Systems
Particle System Architecture
┌─────────────────────────────────────────────────────────────┐│ PARTICLE LIFECYCLE │├─────────────────────────────────────────────────────────────┤│ EMISSION ││ ├─ Spawn Rate (particles/second) ││ ├─ Burst (instant spawn count) ││ └─ Shape (point, sphere, cone, mesh) ││ ↓ ││ SIMULATION ││ ├─ Velocity (initial + over lifetime) ││ ├─ Forces (gravity, wind, turbulence) ││ ├─ Collision (world, depth buffer) ││ └─ Noise (procedural movement) ││ ↓ ││ RENDERING ││ ├─ Billboard (camera-facing quads) ││ ├─ Mesh (3D geometry per particle) ││ ├─ Trail (ribbon following path) ││ └─ GPU Instancing (batched draw) ││ ↓ ││ DEATH ││ └─ Lifetime expired → recycle or destroy │└─────────────────────────────────────────────────────────────┘
Common Effect Recipes
EXPLOSION EFFECT:┌─────────────────────────────────────────────────────────────┐│ LAYERS: ││ 1. Flash (instant, bright, 0.1s) ││ 2. Core fireball (expanding sphere, 0.3s) ││ 3. Debris (physics-enabled chunks, 1-2s) ││ 4. Smoke (slow rising, fade out, 2-3s) ││ 5. Sparks (fast, gravity-affected, 0.5-1s) ││ 6. Shockwave (expanding ring, 0.2s) ││ ││ SETTINGS: ││ • Emission: Burst only (no rate) ││ • Start speed: 5-20 (varies by layer) ││ • Gravity: -9.8 for debris, 0 for smoke ││ • Color: Orange→Red→Black over lifetime ││ • Size: Start large, shrink (fireball) or grow (smoke) │└─────────────────────────────────────────────────────────────┘FIRE EFFECT:┌─────────────────────────────────────────────────────────────┐│ LAYERS: ││ 1. Core flame (upward, orange-yellow, looping) ││ 2. Ember particles (small, floating up) ││ 3. Smoke (dark, rises above flame) ││ 4. Light source (flickering point light) ││ ││ SETTINGS: ││ • Emission: Continuous (50-100/sec) ││ • Velocity: Upward (2-5 units/sec) ││ • Noise: Turbulence for natural movement ││ • Color: White→Yellow→Orange→Red over lifetime ││ • Size: Start small, grow, then shrink ││ • Blend: Additive for glow effect │└─────────────────────────────────────────────────────────────┘MAGIC SPELL EFFECT:┌─────────────────────────────────────────────────────────────┐│ LAYERS: ││ 1. Core glow (pulsing, bright center) ││ 2. Orbiting particles (circle around core) ││ 3. Trail particles (follow movement path) ││ 4. Impact burst (on hit/destination) ││ 5. Residual sparkles (lingering after effect) ││ ││ SETTINGS: ││ • Emission: Rate + burst on cast/impact ││ • Velocity: Custom curves for orbiting ││ • Trails: Enable for mystical streaks ││ • Color: Themed to element (blue=ice, red=fire) ││ • Blend: Additive for ethereal glow │└─────────────────────────────────────────────────────────────┘
Unity Particle System Setup
csharp
// ✅ Production-Ready: Particle Effect Controllerpublic class ParticleEffectController : MonoBehaviour{[Header("Effect Settings")][SerializeField] private ParticleSystem mainEffect;[SerializeField] private ParticleSystem[] subEffects;[SerializeField] private AudioSource audioSource;[SerializeField] private Light effectLight;[Header("Pooling")][SerializeField] private bool usePooling = true;[SerializeField] private float autoReturnDelay = 3f;private ParticleSystem.MainModule _mainModule;private float _originalLightIntensity;public event Action OnEffectComplete;private void Awake(){_mainModule = mainEffect.main;if (effectLight != null)_originalLightIntensity = effectLight.intensity;}public void Play(Vector3 position, Quaternion rotation){transform.SetPositionAndRotation(position, rotation);// Play all particle systemsmainEffect.Play();foreach (var effect in subEffects){effect.Play();}// Play audioif (audioSource != null)audioSource.Play();// Animate lightif (effectLight != null)StartCoroutine(AnimateLight());// Auto-return to poolif (usePooling)StartCoroutine(ReturnToPoolAfterDelay());}public void Stop(){mainEffect.Stop(true, ParticleSystemStopBehavior.StopEmitting);foreach (var effect in subEffects){effect.Stop(true, ParticleSystemStopBehavior.StopEmitting);}}private IEnumerator AnimateLight(){effectLight.intensity = _originalLightIntensity;effectLight.enabled = true;float duration = _mainModule.duration;float elapsed = 0f;while (elapsed < duration){elapsed += Time.deltaTime;float t = elapsed / duration;effectLight.intensity = Mathf.Lerp(_originalLightIntensity, 0f, t);yield return null;}effectLight.enabled = false;}private IEnumerator ReturnToPoolAfterDelay(){yield return new WaitForSeconds(autoReturnDelay);OnEffectComplete?.Invoke();// Reset for reuseStop();if (effectLight != null){effectLight.enabled = false;effectLight.intensity = _originalLightIntensity;}}public void SetColor(Color color){var startColor = _mainModule.startColor;startColor.color = color;_mainModule.startColor = startColor;if (effectLight != null)effectLight.color = color;}public void SetScale(float scale){transform.localScale = Vector3.one * scale;}}
GPU Particles (Compute Shader)
hlsl
// ✅ Production-Ready: GPU Particle Compute Shader#pragma kernel UpdateParticlesstruct Particle{float3 position;float3 velocity;float4 color;float size;float lifetime;float maxLifetime;};RWStructuredBuffer<Particle> particles;float deltaTime;float3 gravity;float3 windDirection;float windStrength;float turbulenceStrength;float time;float noise3D(float3 p){// Simple 3D noise for turbulencereturn frac(sin(dot(p, float3(12.9898, 78.233, 45.164))) * 43758.5453);}[numthreads(256, 1, 1)]void UpdateParticles(uint3 id : SV_DispatchThreadID){Particle p = particles[id.x];if (p.lifetime <= 0)return;// Apply forcesfloat3 acceleration = gravity;// Windacceleration += windDirection * windStrength;// Turbulencefloat3 turbulence = float3(noise3D(p.position + time) - 0.5,noise3D(p.position + time + 100) - 0.5,noise3D(p.position + time + 200) - 0.5) * turbulenceStrength;acceleration += turbulence;// Update velocity and positionp.velocity += acceleration * deltaTime;p.position += p.velocity * deltaTime;// Update lifetimep.lifetime -= deltaTime;// Fade outfloat lifetimeRatio = p.lifetime / p.maxLifetime;p.color.a = lifetimeRatio;p.size *= (0.5 + 0.5 * lifetimeRatio);particles[id.x] = p;}
Performance Optimization
PARTICLE BUDGET GUIDELINES:┌─────────────────────────────────────────────────────────────┐│ PLATFORM │ MAX PARTICLES │ MAX DRAW CALLS │ NOTES │├────────────────┼───────────────┼────────────────┼──────────┤│ Mobile Low │ 500 │ 5 │ Simple ││ Mobile High │ 2,000 │ 10 │ Moderate ││ Console │ 50,000 │ 50 │ Complex ││ PC Low │ 10,000 │ 20 │ Moderate ││ PC High │ 1,000,000+ │ 100+ │ GPU sim ││ VR │ 5,000 │ 15 │ 90 FPS! │└────────────────┴───────────────┴────────────────┴──────────┘OPTIMIZATION TECHNIQUES:┌─────────────────────────────────────────────────────────────┐│ REDUCE COUNT: ││ • LOD system (fewer particles at distance) ││ • Cull off-screen emitters ││ • Limit max particles per system ││ ││ REDUCE OVERDRAW: ││ • Use smaller particle sizes ││ • Reduce transparency layers ││ • Use cutout instead of transparent ││ ││ BATCH DRAWS: ││ • Share materials between systems ││ • Use texture atlases ││ • Enable GPU instancing ││ ││ GPU SIMULATION: ││ • Use compute shaders for >10K particles ││ • Move physics to GPU ││ • VFX Graph (Unity) / Niagara (Unreal) │└─────────────────────────────────────────────────────────────┘
Effect Pooling System
csharp
// ✅ Production-Ready: VFX Pool Managerpublic class VFXPoolManager : MonoBehaviour{public static VFXPoolManager Instance { get; private set; }[System.Serializable]public class EffectPool{public string effectName;public ParticleEffectController prefab;public int initialSize = 5;public int maxSize = 20;}[SerializeField] private EffectPool[] effectPools;private Dictionary<string, Queue<ParticleEffectController>> _pools;private Dictionary<string, EffectPool> _poolConfigs;private void Awake(){Instance = this;InitializePools();}private void InitializePools(){_pools = new Dictionary<string, Queue<ParticleEffectController>>();_poolConfigs = new Dictionary<string, EffectPool>();
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/particle-systems/SKILL.md
Popularity
- Installs
- 2
- Unique users
- 1
- Repository stars
- 17
- Repository forks
- 3
- 7-day trend score
- 14
Installs come from the vskill CLI. Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 25 Mar 2026, 7 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/pluginagentmarketplace/custom-plugin-game-developer/particle-systems)Something wrong with this skill or its page? Tell us.