Is there any way to create an animation (a bubble for example, that rises up on the y axis and fades in from 0 to 100 opacity), that can be saved as an animation preset, then that can be added to another bubble (from animation preset) in another position, and to have it take the change in position into effect?

Thanks, Andy.

3 Answers 3


If you're trying to make multiple bubbles rise up, you'd probably be better off designing a single bubble, then using it as a particle, inside a particle engine (AE has free particle engines like "CC particle systems" built in, but it's tricky to use). Trapcode Particular is quicker and easier, but not free.

e.g. http://people.redgiantsoftware.com/explore/presetdetail.aspx?presetid=831


If you need a relative position change I can only think of doing the animation in an expression. An expression can use the current value of a property as the starting point when being applied to the layer.


Do the animation of the position and opacity of your first drop, select the keyframes and any other property I-beams you want and create the animation preset.

Now create your other drops, apply the preset and then offset them using their Anchor Points rather than their positions. This won't work if you're animating their scale or rotation however, because scale and rotation work around the anchor point.

Of course there's always different ways to do thing in AE. You can create particle systems using expressions, as Prof. Sparkles said. Here's an expression that you can apply to the position property of each bubble. Use two nulls to control the start, lifespan and wiggly-ness of the bubbles. It's not quite up to the trapcode preset, but whadayawantforfree?:

wigglespeed=1; //controls the frequency of the wiggles; change this to whatever you want

seedRandom(index, timeless = true); //create static random numbers

start=random(thisComp.layer("start").inPoint, thisComp.layer("start").outPoint); 
//when the bubble starts, set by the in and out points of the start null

//only do all the hooh-hah if it's time to start bubbling (saves processor cycles)
if (time>start) 
    lifespan=random(thisComp.layer("stop").inPoint, thisComp.layer("stop").outPoint);
    //how long the bubble takes to go up, set by the stop null's in and out point

    wiggleX=thisComp.layer("stop").effect("Point Control")("Point")[0];
    wiggleY=thisComp.layer("stop").effect("Point Control")("Point")[1];

    //this should be [0,0] so that the wiggle doesn't introduce unweanted offset

    posY=startY+(startY -stopY)*(start-time)/lifespan;
    pos=[posX, posY]+[wigglepoint.wiggle(wigglespeed, wiggleX)[0], wigglepoint.wiggle(wigglespeed,wiggleY)[1]]
} else { 
    //not time to go yet

For this expression to work you need two nulls called start and stop, and a point control effect (effect>expression controls>point control) applied to the start null. project file here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.