Filter / lag pops

Is there an easy way to smooth changes to attributes over time, like with a filter CHOP or lag CHOP?

Hello @tekt
You can use a Cache POP and a Cache Blend POP to smooth attributes over time. In this example, a circle position is smoothed over time.
SmoothOverTime.toe (3.9 KB)

2 Likes

Awesome thanks!

Hey @Guillaume.L, thanks for sharing your example. I noticed that the cache and cache blend pops don’t have an option for selecting the attribute to blend. I only want to apply the filter on a particular attribute of the pop. Is there any way I can do that?
For more context, I am working in a particle system with the particle pop. I have a field pop that is generating the Weight attribute based on an input spec pop. I want to add a filter/lag on this Weight parameter before it is passed on to the next pop

Hello @rajatgupta

When working with a constant number of points, you can use a Select POP before a Cache POP to isolate the attribute you want to smooth over time. After applying a Cache Blend POP, use an Attribute Combine POP to merge the smoothed attribute back into the original stream.
However, when using a Particle POP, the point count and order change dynamically over time. In this case, using the feedback loop is more appropriate for filtering attributes across frames, allowing you to accumulate and smooth data despite the changing topology.
Here’s an example demonstrating how to do this.
FilteringOnSpecificPartAttribute.toe (7.7 KB)

1 Like

Thanks! That really helps

Hello,

thank you very much for this tip, it works great. However there is one thing I have noticed and I thought I might mention it. With larger number of attributes Cache Blend POP seems to take quite some CPU time. I have 17 point attributes (most of which are floats, but some are float2 / float3) and filtering (50 cached samples) on 25 points quickly bumps CPU cook time to nearly 1ms (on my hardware). I am not sure if this is expected or not, but at first glance it seemed a bit heavy. Thanks :slightly_smiling_face:

The Cache Blend POP blends every attribute present on its inputs. When many attributes are present, the node has to bind a separate GPU buffer for each one before the blend can run. That buffer‑binding step—not the amount of data being blended—is what introduces overhead.
With 17 point attributes, the node ends up issuing a relatively large number of buffer bindings per cook, and that can add noticeable CPU cost depending on the driver and hardware. Even if each attribute is small, the sheer number of bindings can become the bottleneck.
A practical workaround for now is to reduce the number of buffers the node needs to bind. You can do that by:

  • Passing through only the attributes that actually need blending, instead of all point attributes.
  • Packing multiple attributes into array attributes, so fewer buffers need to be bound.

Both approaches help keep the buffer count down and should reduce the CPU overhead you’re seeing.

1 Like

Thanks for info @Guillaume.L, I have reduced the number of attributes that go into filtering stage to bring the CPU overhead down. Since these are all quite unique attributes, it didn’t make much sense for me to join them into arrays, but from optimization standpoint it would definitely help. Thanks once again for reply :slightly_smiling_face: