particles flow along curves with POP particles

Hey everyone,
I’m trying to emit particles at the start of curves and have them flow along the curves to the end with POPs particle. The curves have a curveu attribute, and I also tried setting the particle velocity to the DispNext vector, but it doesn’t really work. The particles follow the curves a bit at first, but then they start drifting away.

I’m also not sure how to emit particles only at the beginning of the curves. I’m quite new to POPs/particles , so I’d really appreciate any help.

Thanks in advance!

particlesAlongLines.toe (13.7 KB)

Hello @madstracct

Your example is missing an asset, but from what I can see, the main issue in your setup is that you’re only giving the particles an initial velocity that roughly points along the curve. After that first moment, nothing is actively keeping them aligned to the path, so they naturally drift away. Particles don’t inherently “stick” to a curve unless you add logic that continuously pulls them back or directly places them on the curve each frame.

One way to handle this is to use forces that steer particles toward the nearest point on the curve and push them forward along it. This can work, but it tends to be difficult to tune. Small adjustments in force strength can cause wobbling or drifting, especially when particles move quickly, so a force‑based method often becomes hard to control.

A more stable and predictable approach is to directly control the particle positions based on their parametric location along the curve. When a particle is born, you can store its initial offset from the curve as well as its current curveu value. Each frame, you increment that curveu value, sample the curve at the new parameter, and then add the stored offset back to compute the particle’s updated position. This ensures the particle follows the curve consistently instead of relying on physics.

Whichever method you choose, you’ll need a feedback loop so the Particle POP receives the updated positions or forces you compute each frame. The Wiki shows how to set up a particle feedback loop, and that structure is essential for this kind of controlled motion.

As for emitting particles only at the start of each curve, the Particle POP simply emits from whatever points you feed into its first input. If you want emission only from the beginning of the path, isolate the first points of your curves and use those as the emitter input.

3 Likes

Thank you very much for your detailed answer. I will definetely give it a try! :slight_smile:

Hi again, The second method you mentioned in your answer is actually exactly what I need. However, I couldnt wrap my head around it so far. I cant upload the missing asset since its a houdini hclassic file so I made a similar curve asset directly in touchdesigner (there is no curveu attribute anymore but a DistEndNorm attribute from the linemetrics POP). I would appreciate if you can have a look into my file so I can understand how to do it properly :slight_smile: Thank you very much

particlesAlongLinesv002.toe (13.7 KB)

Hello @madstracct

You can use the Particle POP to create a feedback loop that controls particle motion over time. Here’s an example showing how this can be done.

ParticlesFollowingPath.toe (7.5 KB)

By the way, we don’t yet support saving and loading locked POPs, but that’s a feature we plan to add at a later date.

3 Likes

Thank you so much for the example @Guillaume.L :slight_smile: if I have multiple curves where particles are emitting at the beginning of the curves and flow along each curve simultaneously how can I do that? Right now the particles are flowing along one curve after another. Thanks again!

Edit: I duplicated the lookup POP for every curve I have and it works, but I’m still wondering if there is a more elegant way :slight_smile:

If you define a range of lookup values based on the path a particle follows, you can use a single Lookup Attribute POP to handle everything. It might be easier to express this range in point index units, since that avoids interpolation across multiple line strips.
You can compute the point‑index range for each particle source using a combination of Line Metrics and Math Mix POPs, then transfer that range to the particles. Here’s an example demonstrating how this setup can work.

ParticlesFollowingPath.toe (8.4 KB)

1 Like

Thats exactly what I was looking for. Thank you very much! :blush:

1 Like