# GPU particle systems and targetStopDuration

**URL:** <https://forum.babylonjs.com/t/gpu-particle-systems-and-targetstopduration/60680>\
**Category:** Bugs\
**Created:** [September 27, 2025, 1:41pm UTC](https://forum.babylonjs.com/t/gpu-particle-systems-and-targetstopduration/60680 "2025-09-27T13:41:07Z")\
**Posts on this page:** 1\
**Showing post:** 2

<div class="post-metadata">

**Author:** ![Evgeni\_Popov](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/evgeni_popov/32/4432_2.png) [@Evgeni\_Popov](https://forum.babylonjs.com/u/Evgeni_Popov)\
**Post date:** [September 29, 2025, 7:30am UTC](https://forum.babylonjs.com/t/gpu-particle-systems-and-targetstopduration/60680/2 "2025-09-29T07:30:56Z")

</div>

> [@julien-moreau](#):
>
> The PS always returns “true” when calling `ps.isStarted()` even when the stop duration is reached and no particle drawn anymore. Maybe this is expected but this behavior is different from classic ParticleSystem implementation

I think it’s because of:

> [@GPU Particle System - Particles remain alive after stop()](https://forum.babylonjs.com/t/gpu-particle-system-particles-remain-alive-after-stop/42361/4):
>
> This is expected: GPU particles cannot be removed from the CPU (well we can but it is overly expensive). Hence the choice to simply skip the stopped ones By the way, it does not generate additional draw calls as the GPU particles are all rendered in one draw call wink

> [@GPU particle system start delay if active particles is "full"](https://forum.babylonjs.com/t/gpu-particle-system-start-delay-if-active-particles-is-full/60561):
>
> Hi everyone! I’m struggling a bit with my gun muzzle effect, trying to use particles with that. I have a pooling system for particle systems, so my muzzle gpu particle system is stopped after a really small time and then reactivated some time later when a gun is shot again. However, I struggle to start the system exactly when the start function is called. I do preheat the system as well. I don’t really know if I’ve understood something wrong or where the problem is face_with_peeking_eye Her…

Particles are not removed from a GPU particle system, they are just skipped when they are not alive anymore, so `isStarted` for a GPU PS always stays **true** after it has been started.

> [@julien-moreau](#):
>
> Once stop duration is reached, impossible to start the system again. The only ways is to set `_actualFrame = 0`. This behaviour is also from the one implemented in ParticleSystem class.

This one is probably a bug, as `this._actualFrame = 0;` is done in the `start` function of `ThinParticleSystem` but not in `GPUParticleSystem`:

> <https://github.com/BabylonJS/Babylon.js/pull/17207>
>
> See https://forum.babylonjs.com/t/gpu-particle-systems-and-targetstopduration/60…680

Thanks for reporting!

(note that you can do `particleSystem.isStopped()` instead of `particleSystem["_stopped"]`)

---

_[View the full topic](https://forum.babylonjs.com/t/gpu-particle-systems-and-targetstopduration/60680)._
