Dan Ebberts provides example expressions and tutorials for learning how to work with expressions on his MotionScript website. For example, Dan provides an excellent page about collision detection.
Colin Braley provides a tutorial and example project on his website that show how to use expressions to make one layer repel others in a natural-seeming manner.
The AE Enhancers forum provides many examples and much useful information about expressions, as well as scripts and animation presets. In this post on the AE Enhancers forum, Paul Tuersley provides a tutorial and example project that show how to use expressions to animate several layers in a swarm.
Rick Gerard provides an example on his website that demonstrates rolling a square object along a floor so that the sides stay in contact with the floor plane.
Carl Larsen provides a video tutorial on the Creative COW website that demonstrates how to use expressions and parenting to relate the rotation of a set of wheels to the horizontal movement of a vehicle.
Chris Zwar provides an example project on his website for automatically arranging still images or videos into a grid (like a video wall). You can easily adjust position and spacing with sliders that are connected to a system of expressions. There are three compositions in the project—one for stills, one for videos, and one to create an auto-storyboard in which a video is sampled at user-defined intervals and aligned into a grid.
JJ Gifford’s website provides several example projects that demonstrate how to use expressions.
Maltaannon (Jerzy Drozda, Jr.) provides a video tutorial on his website that shows how to use expressions to create a volume meter using the results of the Convert Audio To Keyframes command.
Harry Frank provides a tutorial on his graymachine website that shows how to use expressions to read data from an external text file.
You can create an expression without using properties from other layers. For example, you can make a layer revolve in a perfect circle.
You can use the pick whip to link rotation values between layers to animate the hands on a clock—as the hour hand moves from hour to hour, the minute hand rotates the full circumference of the clock face. This type of animation would take a long time to create if you had to set each keyframe for both hand layers, but with the pick whip, you can do it in a matter of minutes.
-
Import or create two long, narrow solid-color layers: an hour hand and a minute hand. (See Solid-color layers and solid-color footage items.)
-
Set the anchor points at the ends of the layers. (See Layer anchor points.)
-
Move the layers so that the anchor points are at the center of the composition. (See Move layers in space.)
-
Set Rotation keyframes for the hour hand. (See Set or add keyframes.)
This example expression positions and maintains one layer at a balanced distance between two other layers.
-
Start with three layers. (See Creating layers.)
-
Animate the positions of the first two layers in the Timeline panel. (See Motion paths.)
This example expression instructs a layer to be at the same position as the next higher layer in the Timeline panel, but delayed by a specified amount of time (in this case, 0.5 seconds). You can set similar expressions for the other geometric properties.
-
Start with two solid-color layers that are scaled to approximately 30% of the composition size. (See Solid-color layers and solid-color footage items.)
-
Animate the position of the first layer. (See Motion paths.)
All layers follow the same path, and each is delayed 0.5 seconds from the previous.
Dan Ebberts provides more examples and techniques for creating trails of images on his MotionScript website.
This example expression synchronizes the Bulge Center argument of the Bulge effect in one layer with the position of another layer. For example, you can create an effect that looks like a magnifying glass moving over a layer, with the contents under the magnifying glass bulging as the lens (that is, the overlying layer) moves. This expression uses the fromWorld method, which makes the expression work correctly regardless of whether you move the magnifying glass layer or the underlying layer. You can rotate or scale the underlying layer, and the expression stays intact.
You can also use other effects, such as Ripple, with this expression.
-
Start with two layers. Make one layer a magnifying glass or similar object with a hole in the middle and name it Magnifier. (See Creating layers.)
-
Animate the position of the magnifying glass layer. (See Motion paths.)
-
Apply the Bulge effect to the other layer. (See Apply an effect or animation preset.)
-
startFade = 500; // Start fade 500 pixels from camera. endFade = 1500; // End fade 1500 pixels from camera. try { // Check whether there's a camera C = thisComp.activeCamera.toWorld([0,0,0]); } catch(err) { // No camera, so assume 50mm w = thisComp.width * thisComp.pixelAspect; z = (w/2)/Math.tan(degreesToRadians(19.799)); C = [0,0,-z]; } P = toWorld(anchorPoint); d = length(C,P); linear(d,startFade,endFade,100,0)
Dan Ebberts explains this expression on his MotionScript website.
-
n = 0; t = 0; if (marker.numKeys > 0){ n = marker.nearestKey(time).index; if (marker.key(n).time > time) n--; } if (n > 0) t = time - marker.key(n).time; amp = 15; freq = 5; decay = 3.0; angle = freq * 2 * Math.PI * t; scaleFact = (100 + amp * Math.sin(angle) / Math.exp(decay * t)) / 100; [value[0] * scaleFact, value[1] / scaleFact];
You can use any expression in place of the wiggle expression used here, to begin and end the influence of any expression at a specific time.
timeToStart = 2; if (time > timeToStart) { wiggle(3,25); } else { value; }
timeToStop = 4; if (time > timeToStop) { value; } else { wiggle(3,25); }
Apply the following expression to a property to start wiggling it at time 2 seconds and stop wiggling it at time 4 seconds:
timeToStart = 2; timeToStop = 4; if ((time > timeToStart) && (time < timeToStop)) { wiggle(3,25); } else { value; }
-
Apply the following expression to the Focus Distance property of a camera layer to have its focus distance match the distance to the anchor point of a layer named “target”:
target = thisComp.layer("target"); V1 = target.toWorld(target.anchorPoint) - toWorld([0,0,0]); V2 = toWorldVec([0,0,1]); dot(V1,V2);
Dan Ebberts explains this expression example in detail on his Motionscript website.