Applying a zoom out effect to multiple objects in sequence and overlapping in time

Hi there!

I’m currently displaying a series of dots which appear in sequence based on an animated timeline. Each dot corresponds to an event which happened at a given time in the past and when the timeline reaches that event’s year the corresponding dot is revealed on a map. This part is already working to my satisfaction.

I would now like to have each dot appear larger at first and then reduce in size over a second or so. Zooming out if you will. I’ve managed to achieve this effect manually on a single dot using a trigger chop whose output value is used to change an individual dot’s radius over time. I would now like to apply a similar effect to each dot in succession as it gets revealed. The problem is that many of these zoom out effects will be overlapping as some of the dots will appear before the previous ones have had time to complete their own “zoom out”.

My conventional programmer’s approach to this would be to start a distinct thread for each circle as it gets revealed. Each one of these threads progressively decreasing the corresponding circle’s radius over a predetermined time. My feeling however is that there must be a more “TouchDesigny” way to achieve this. Possibly through a replicator but I’m not sure how to proceed.

Here is how my current setup works:

All the dots are circle ops whose bypass parameter are initially = 1. The circles’ bypass parameters get disabled in sequence from a chopexec’s onValueChange. As the input values change over time the chopexec looks up corresponding circle TOP names in a table and changes their bypass parameter from 1 to 0. I would like to use this same table’s information to simultaneously trigger my radius “zoom out” effect.

Any ideas better than starting a series of threads? If I recall correctly multithreaded Python scripts isn’t the best way to do things in TD.


Hi @tohox - I think the technique you’re looking for here is instancing. This will let you draw as many copies of a geometry as you’d like, and then change their attributes with TOPs, CHOPs, or SOPs.

This takes a slightly different approach to what you’re after, but will help you get very performant results.

You can see a collection of instancing examples here:

Hope that keeps you moving!

For the part that you already got working to your satisfaction, I’m curious if the PhaserCHOP would show another way of doing it. You could check the op snippets for it (right-click Phaser in the op create dialog) and the example titled “time-offset animations”. This example connects the output of the Phaser CHOP to an animation lookup. Maybe this will accomplish some of the second part of what you want. You could normalize your timeline years from 0 to 1 and use it as the phase, which is the phaser’s second input. Then design an animation for circle scaling as a result of a lookup. Then use geometry instancing.

Thank you both for your suggestions! Instancing was on my ToLearn list so I’ll get to it right away.