<p>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.</p>

<p>e.g. 
<a href="http://people.redgiantsoftware.com/explore/presetdetail.aspx?presetid=831" rel="nofollow">http://people.redgiantsoftware.com/explore/presetdetail.aspx?presetid=831</a></p>

CC BY-SA 3.0
2014-10-09T21:10:38.227Z
2014-10-09T21:10:38.227Z
tomh
<p>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. </p>

<p>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.</p>

<p>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?:</p>

<pre><code>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&gt;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
    posX=random(thisComp.width);

    wiggleX=thisComp.layer("stop").effect("Point Control")("Point")[0];
    wiggleY=thisComp.layer("stop").effect("Point Control")("Point")[1];
    startY=thisComp.layer("start").transform.position[1];
    stopY=thisComp.layer("stop").transform.position[1];

    wigglepoint=thisComp.layer("stop").transform.anchorPoint;
    //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
    thisComp.layer("start").transform.position
}
</code></pre>

<p>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 <a href="https://onedrive.live.com/redir?resid=5408802B7CF7224B!12181&amp;authkey=!ALpmF0zgZs5ASHc&amp;ithint=file%2caep" rel="nofollow">here</a></p>

CC BY-SA 3.0
2014-10-09T20:43:22.217Z
2014-10-10T01:17:32.570Z
2014-10-10T01:17:32.570Z
stib
<p>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.</p>

CC BY-SA 3.0
2014-10-08T17:31:37.797Z
2014-10-08T17:31:37.797Z
timonsku
<p>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?</p>

<p>Thanks,
Andy.</p>

<after-effects><animation>
Relative Animation Presets
Andy Cheeseman
# Relative Animation Presets

(Asked by: username_0 on 2014-10-08)

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.

**Tags:** after-effects, animation


---

## 3 answers

### Answer by username_1 on 2014-10-09. Score: 2

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>


---

### Answer by username_2 on 2014-10-09. Score: 1

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
    posX=random(thisComp.width);

    wiggleX=thisComp.layer("stop").effect("Point Control")("Point")[0];
    wiggleY=thisComp.layer("stop").effect("Point Control")("Point")[1];
    startY=thisComp.layer("start").transform.position[1];
    stopY=thisComp.layer("stop").transform.position[1];

    wigglepoint=thisComp.layer("stop").transform.anchorPoint;
    //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
    thisComp.layer("start").transform.position
}

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


---

### Answer by username_3 on 2014-10-08. Score: 1

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.


---

