# My Top 5 After Effects Expressions

### 1. Intertial Bounce v1.2

Essentially, Inertial Bounce creates a bouncing motion of any parameter from one keyframe to the next, based on its velocity. Being that true “velocity” includes the vector (or traveling direction in 3D space), the bounce happens in whatever direction the object is traveling. This also accounts for scalar or array values, so you’ll find that this expression works just as well on 2D rotation as it does on 3D position. It’s very cool! This expression is a bit of a community effort. The seeds were certainly planted by the great Dan Ebberts, and then a modified version was posted on mograph.net. Although I’ve made a slight modification to it to make it a little more user friendly, it’s nothing that I will lay claim to as my own code. Nonetheless, it’s a great helper and I use it all the time. Modify “amp” for the amplitude or how much bounce is present. The variable “freq” is the frequency, or how frequently the bounce occurs. The “decay” is like a friction or mass setting, a higher value means a shorter decay over time.

```amp = .1;
freq = 2.0;
decay = 2.0;
n = 0;
time_max = 4;
if (numKeys > 0){
n = nearestKey(time).index;
if (key(n).time > time){
n--;
}}
if (n == 0){ t = 0;
}else{
t = time - key(n).time;
}
if (n > 0 && t < time_max){
v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}else{value}```

This is nothing brilliant, but it is something I wrote and use all the time. You’ll also find something similar in the After Effects preset “Behaviors” called Fade In + Out, which uses the Solid Composite effect and a custom interface. But, I like a simpler version that I use on Opacity. This is a slightly enhanced version that I’d revamped since I posted it in the “Auto Slideshow” presets and added the option to use markers. If there are no markers, the transition variable is used (where is says “transition=20″, this is in frames.) If there are *2* markers, the first marker is used for end point of the fade in, and the second marker is used to define the start of the fade out.

`//Autofade: Add to opacity`
```transition = 20;       // transition time in frames
if (marker.numKeys<2){
tSecs = transition / ( 1 / thisComp.frameDuration); // convert to seconds
linear(time, inPoint, inPoint + tSecs, 0, 100) - linear(time, outPoint - tSecs, outPoint, 0, 100)
}else{
linear(time, inPoint, marker.key(1).time, 0, 100) - linear(time, marker.key(2).time, outPoint, 0, 100)
}```

### 3. Snap Zoom In/Out

This is a cool expression to use on text. It creates a “snap” zoom on the in and out of the layer by modifying scale.

```//Snap zoom in and out: apply to scale
snapScale = 300; //percent of scale to zoom
trans = 4; //  transition time in frames
trans = trans * thisComp.frameDuration;
inTrans  = easeOut(time, inPoint, inPoint + trans, [snapScale,snapScale], [0,0]);
outTrans = easeIn(time, outPoint, outPoint - trans, [0,0], [snapScale, snapScale]);
value+ inTrans + outTrans```

If you prefer to use Z space position instead of scale, try this one:

```zoom = 5000; //distance to zoom
trans = 4; //  transition time in frames
trans = trans * thisComp.frameDuration;

inTrans  = easeIn(time, inPoint, inPoint + trans, [0,0,zoom], [0,0,0]);
outTrans = easeOut(time, outPoint, outPoint - trans*2, [0,0,0], [0,0,zoom]);
value+ inTrans - outTrans```

### 4. Y Axis Jitter

This is from Lesson 5 of my expressions series. This creates a random jittery motion in the Y axis. You can modify probability to make or less jitter, and the pos variable to define how large the jitter is.

```// Y Axis Jitter
probability = 8 ;  //higher is less likely
pos = 50;```
```val  = random(-probability-2, 1);
m = clamp(val, 0, 1);
y = wiggle(10, pos*m)-position;
value + [0, y]```

### 5 . toComp

This one you’ll have to watch a short tutorial for here, and you can read a lot more about it at motionscript.com. The idea is that you can apply the equivalent 3D location to any 2D location. This might not sound exciting. But, think of all the 2D parameters out there, like lens flare location, Shine source, beams, etc. It is probably my most commonly used expression. But, the basic idea is this:

```layer = thisComp.layer("Null 1")
layer.toComp([0,0,0])```

Note: I intentionally left off the semicolon, as you technically don’t need it in this case. Therefore, all you need to do is pickwhip your layer where the “layer =” variable is.