a collection of expressions for adobe after effects

22
total training, inc www.totaltraining.com A Minor ColleCtion of UsefUl expressions { for use with adobe after effects } featuring michael natkin, fred lewis, dan ebberts, brian maffitt  & steve holmes

Upload: hexinfx

Post on 01-Dec-2015

205 views

Category:

Documents


3 download

DESCRIPTION

Expressions for Adobe After Effects

TRANSCRIPT

Page 1: A Collection of Expressions for Adobe After Effects

t o t a l t r a i n i n g , i n cw w w . t o t a l t r a i n i n g . c o m

A Minor ColleCtion of UsefUl expressions

{  for use with adobe after effects }

featur ing

michael natkin,  fred lewis,  dan ebberts,br ian maffitt & steve holmes

Page 2: A Collection of Expressions for Adobe After Effects

This generates perfect circular motion centered around the original position of the layer. I recommend that you map the radius and cycle inputs to Expression Control sliders, and the phase input to an Expression Control angle.

Apply this expression to the position of the layer.

radius = 75; // the radius of the circle cycle = 1; // number of seconds to complete a circle; higher value = slower if(cycle ==0){cycle = 0.001;} //avoids a "divide by zero" error phase = 27; // initial angle in degrees from bottom reverse = 1; // 1 for ccw, -1 for cw

x = Math.sin( reverse * degrees_to_radians(time * 360 / cycle + phase)); y = Math.cos(degrees_to_radians(time * 360 / cycle + phase)); add(mul(radius, [x, y]), position)

CI RCLE FU Nby Michael Natkin & Brian Maffitt

Page 3: A Collection of Expressions for Adobe After Effects

This expression is designed to track the position of a layer that has been parented to one or more layers. Use the expression below on the position property that you wish to animate, changing the name “Child” to match the name of the layer you wish to track. For instance, if you want to use write-on to track the position of a layer called “moon”, apply this expression to the “brush position” property of the write-on filter, and change “child” to “moon”.

c = this_comp.layer("child"); c.to_comp(c.anchor_point)

TR ACK A CH I LDby Michael Natkin

Page 4: A Collection of Expressions for Adobe After Effects

Use this expression as an interactive, keyframeable Wiggler. Apply it to the property of the layer you wish to wiggle. The variable names in the first three lines can be named whatever you like, but remember to change their corresponding use in the last line of the script.

wigfreq = 3; //wiggle frequency wigamt = 30; //wiggle amount wigdetail = 3; //detail of noise wiggle(wigfreq, wigamt, wigdetail)

ADJUSTABLE W IGGLEby Brian Maffitt

Page 5: A Collection of Expressions for Adobe After Effects

Use this expression as an interactive, keyframeable Wiggler, but constrained along a single axis. Apply it to the position or anchor point of the layer you wish to wiggle.

FOR TWO DIMENSIONS wigfreq = 5; //wiggle frequency wigangle = 45; //wiggle amplitude wignoise = 3; //octaves of noise just = wiggle(wigfreq, wigangle, wignoise); [position[0], just[1]] //will wiggle just on Y.

FOR THREE DIMENSIONS wigfreq = 5; //wiggle frequency wigangle = 45; //wiggle amplitude wignoise = 3; //octaves of noise just = wiggle(wigfreq, wigangle, wignoise); [position[0], position[1], just[2]] //will wiggle just on Z.

ON E-DI MENSIONA L POSI TION W IGGLEby Brian Maffitt

Page 6: A Collection of Expressions for Adobe After Effects

Creates an oscillating motion between two specified 2-dimensional positions over a specified period of time (in seconds). Use an adjustment layer with Expression Control position points for “ from”, “to”, and an Expression Control slider assigned to “period”. Change “linear” to

“ease” for smoother interpolation.

from = [50, 90]; //one end of your oscillation to = [190, 30]; //the other end of your oscillation period = 1.5; //time between oscillation points (multiply by 2 for a round trip) t = time % (period * 2); if (t > period) t = 2 * period - t; linear(t, 0, period, from, to)

OSCI LLATE POSI TIONby Michael Natkin & Brian Maffitt

Page 7: A Collection of Expressions for Adobe After Effects

Creates an oscillating motion between two specified values over a specified period of time (in seconds). Use Expression Control angles or sliders for “ from”, “to”, and an Expression Control slider assigned to “period” for fine control. You can apply these to any layer.

Change “linear” to “ease” for smoother interpolation.

from = -45; //one end of your oscillation to = 45; //the other end of your oscillation period = 1.5; //time between oscillation points (multiply by 2 for a round trip) t = time % (period * 2); if (t > period) t = 2 * period - t; linear(t, 0, period, from, to)

OSCI LLATE ROTATION { OR A N Y SI NGLE VA LU E }by Michael Natkin & Brian Maffitt

Page 8: A Collection of Expressions for Adobe After Effects

Creates a bouncing (sine wave) motion between two specified 2-dimensional positions over a specified period of time (in seconds). Useful for creating bouncing balls.

Use Expression Control position points for “ from”, “to”, and an Expression Control slider assigned to “period” for fine control. You can apply these to any layer.

surface = [320, 480]; //the position of the "bounce" surface apogee = [320, 50]; //the "apogee" of the bounce period = 1.5; //the length of time from surface to apogee t = time % (period * 2); if (t > period) t = 2 * period - t; linear(Math.sin(t * Math.PI / period), 0, 1, surface, apogee)

BOU NCEby Michael Natkin & Brian Maffitt

Page 9: A Collection of Expressions for Adobe After Effects

These two expressions create a “ follow the leader” effect. One works from the top down, the other from the bottom up. Only use one. A follower will tag along after the leader, deviating from the path according to the wiggle properties that are specified in the inputs. Once applied to a single follower, you can duplicate the layer as many times as you like and each subsequent copy will follow along, offset in time from the last and wiggling uniquely. In this expression, the wiggle is based on the position of the leader.

Link Expression control sliders to lag (to interactively control how bunched together the layers are), wigfreq (to control the frequency of the wiggle) and wigamp (to control the amplitude of the wiggle). Apply Expression control effects to the leader only.

Change the word “Leader” to match the name of the leading layer.

//USE THIS ONE IF THE LAYERS STACK UP FROM BOTTOM LEADER lagtime = .1; wigfreq = 3; //wiggle frequency wigamt = 30; //wiggle amount adj = (this_comp.num_layers - index) * lagtime; this_comp.layer("Leader").wiggle(wigfreq, wigamt, 2, .5,time - adj) //OR... //USE THIS ONE IF THE LAYERS STACK DOWN FROM TOP LEADER lagtime = .1; wigfreq = 3; //wiggle frequency wigamt = 30; //wiggle amount adj = (index - 1) * lagtime; this_comp.layer("Leader").wiggle(wigfreq, wigamt, 2, .5,time - adj)

W IGGLE FROM LEADERby Michael Natkin & Brian Maffitt

Page 10: A Collection of Expressions for Adobe After Effects

This creates a “ follow the leader” effect that works from the bottom up. A follower will tag along after the previous layer, deviating from the previous path according to the wiggle properties that are specified in the inputs. Once applied to a single follower, you can duplicate the layer as many times as you like and each subsequent copy will follow along, offset from the last in time and wiggling uniquely. In this expression, the wiggle is based on the position of the previous layer.

Link Expression Control sliders to lag (to interactively control how bunched together the layers are), wigfreq (to control the frequency of the wiggle) and wigamp (to control the amplitude of the wiggle). Apply Expression Control effects to the leader only.

Change the word “Leader” to match the name of the leading layer.

//USE THIS ONE IF THE LAYERS STACK UP FROM BOTTOM LEADER lagtime = .1; wigfreq = 3; //wiggle frequency wigamt = 30; //wiggle amount adj = (this_comp.num_layers - index) * lagtime; this_comp.layer(this_layer, 1).wiggle(wigfreq, wigamt, 2, .5,time - adj) //OR... //USE THIS ONE IF THE LAYERS STACK DOWN FROM TOP LEADER lagtime = .1; wigfreq = 3; //wiggle frequency wigamt = 30; //wiggle amount adj = (index - 1) * lagtime; this_comp.layer(this_layer, -1).wiggle(wigfreq, wigamt, 2, .5,time - adj)

W IGGLE FROM PR EV IOUSby Michael Natkin & Brian Maffitt

Page 11: A Collection of Expressions for Adobe After Effects

Apply this Expression to the Rotation channel of any layer you wish to control. Set LookAt, below, to the name of the layer you wish the layer to look at. If the controlled layer is not initially pointing straight up, enter an offset amount in degrees, below, to adjust the direction it is looking.

LookAt = “ball” offset = 0 diffx = position[0] - this_comp.layer(LookAt).position[0]; diffy = position[1] - this_comp.layer(LookAt).position[1]; if (diffx == 0) { diffx = 1 } sign = 1 + (-1 * (diffx / Math.abs(diffx))) * 90; radians_to_degrees(Math.atan(diffy/diffx)) + sign + offset

2D LOOK ATby Fred Lewis

Page 12: A Collection of Expressions for Adobe After Effects

Apply this expression to the orientation channel of the layer you wish to have look at another layer (the layer being controlled). Enter the name of the layer to look at in LookAt below. If the layer being controlled does not correctly look at other layer, adjust the layer offset by changing the X, Y and Z rotation values (not the orientation values) for the layer being controlled.

LookAt = "ball" look = look_at(position, this_comp.layer(LookAt).position); [look[0], look[1], look[2]]

3D LOOK ATby Fred Lewis

Page 13: A Collection of Expressions for Adobe After Effects

This allows you to control the angle of view of a camera interactively, by scaling a null object on screen. To use: Create a null called “angle_zoomer”. Animate the null’s scale to control viewing angle in degrees.

substitute = this_comp.layer("angle_zoomer").scale[1]; this_comp.width / (2 * Math.tan(degrees_to_radians(substitute/2)))

A NGLE OF V I EW ZOOMERby Fred Lewis

Page 14: A Collection of Expressions for Adobe After Effects

This expression will allow you to zoom a camera in After Effects using real-world focal length values. To use this expression:

1. Create a camera. 2. Create a null layer called “ focal_zoomer” and turn off its visibility switch in the timeline. 3. Apply the expression below to the Zoom parameter of the camera. 4. Set the value of hFilmPlane in the expression to the size of your film, in millimeters. 5. Animate the null’s scale to control the focal length of the camera, in millimeters

hFilmPlane = 35; FocalLength = this_comp.layer("focal_zoomer").scale[1]; this_comp.width * (FocalLength/hFilmPlane)

FOCA L LENGTH ZOOMERby Fred Lewis

Page 15: A Collection of Expressions for Adobe After Effects

Apply this expression to the Focus Distance of your camera, then change the name “Focus Layer” below, to the name of the layer you wish to keep in focus.

focuser = "Focus Layer"; cam_to_layer = sub(this_comp.layer(focuser).position, position); length(cam_to_layer)

CA MER A AUTOFOCUSby Fred Lewis

Page 16: A Collection of Expressions for Adobe After Effects

These Expressions can be used to make a connector that stretches like a rubber band between two layers, which by default are named “End 1” and “End 2”. Obviously you can change these names to anything you like. The connector layer wants to be a horizontal rectangle, with the anchor point of the layer moved to the left center edge of the layer.

The connector has 3 separate expressions applied to it: one for position, one for rotation and one for scale. The Expressions are listed separately below.

// apply this Expression to the Connector layer’s Position parameter // set follow1 below to the name of the first layer to follow follow1 = "End 1" this_comp.layer(follow1).position

// apply this Expression to Connector layer’s Rotation parameter // set follow2 below to the name of second layer to follow follow2 = "End 2" diff = sub(position,this_comp.layer(follow2).position); (Math.atan2(diff[1],diff[0]) * 180/Math.PI) + 180

// apply this Expression to Connector layer’s Scale parameter // set follow2 below to the name of second layer to follow follow2 = "End 2" stretch = length(position,this_comp.layer(follow2).position); [stretch,scale[1]];

CON N ECTORby Fred Lewis

Page 17: A Collection of Expressions for Adobe After Effects

This Expression causes one gear to rotate at the proper speed when a second gear next to it is rotated, so that the two gears stay meshed with each other. To use this expression, first create and import two gears that mesh together properly. In order for two gears to mesh properly, the ratio of the difference in size between the two gears must equal the ratio of the difference in the number of teeth between the two gears. Once imported, decide which gear will be the Leader and which will be the Follower. Apply the Expression below to the Rotation parameter of the Follower gear. Then set the LayerToFollow, in the Expression, to the name of the Leader gear. Set the Ratio in the expression to the size of the Leader, relative to the Follower.

LayerToFollow = "Leader"; Ratio = 3/4 mul((this_comp.layer(LayerToFollow).rotation) * Ratio, -1)

GEAR Sby Fred Lewis

Page 18: A Collection of Expressions for Adobe After Effects

This Expression will automatically keep the text in Path Text level within the comp. Useful for when you simply want to make a straight line or paragraph of text in Path Text, without making it follow a path. It allows you to use the extra kerning, spacing and other features of Path Text with ordinary straight text. To use this Expression:

1. Set the Shape Type to “Line” under Path Options in the effects window for Path Text. 2. Past the expression (below) into the “Vertex 2” parameter of Path Text in the Timeline. 3. Use only Vertex 1 of the path to position the text.

radius = 75; // the radius of the circle cycle = 1; // number of seconds to complete a circle; higher value = slower phase = 27; // initial angle in degrees from bottom reverse = 1; // 1 for ccw, -1 for cw

x = Math.sin( reverse * degrees_to_radians(time * 360 / cycle + phase)); y = Math.cos(degrees_to_radians(time * 360 / cycle + phase)); add(mul(radius, [x, y]), position)

PATH TEXT LEV ELERby Fred Lewis

Page 19: A Collection of Expressions for Adobe After Effects

Using the analogy of an eagle picking up a fish and dropping it in a nest, these two expressions can be used to parent one layer to another for only a portion of a longer animation.

1. Apply the first expression below to the position channel for a null. Set “layertofollow” to name of “eagle” layer. Set pickup and dropoff time values to times for pickup and dropoff, in seconds.

2. Apply the second expression to the rotation channel for the null. Set “layertofollow” to name of “eagle” layer. Set pickup and dropoff time values to times for pickup and dropoff, in seconds.

pickuptime = 1.53333; dropofftime = 5.0; layertofollow = "eagle" ticker = Math.min(Math.max(pickuptime, time), dropofftime); this_comp.layer(layertofollow).position.value_at_time(ticker)

pickuptime = 1.53333; dropofftime = 5.0; layertofollow = "eagle" ticker = Math.min(Math.max(pickuptime, time), dropofftime); this_comp.layer(layertofollow).rotation.value_at_time(ticker)

TEMPOR ARY PAR EN TI NGby Fred Lewis

Page 20: A Collection of Expressions for Adobe After Effects

This expression will track any effect point on a layer, regardless of size, position, or scale of the layer, and translate it to positional values that are relative to the comp. For example, For example, you could have a small layer with corner pin applied, and use this expression to track another layer to the lower right corner of the effect, regardless of how the layer is moved. This expression will not take into account the scale or rotation of the source layer.

// Apply this expression to the position parameter of any layer. // Set the LayerToFollow to the layer who’s effect parameter // you want to follow. Set the EffectToFollow to the name of the // effect who’s parameter you want to follow. Set the ParamToFollow // to the name of the parameter within the effect you want to follow // The layer this is applied to will follow the effect parameter.

LayerToFollow = "Corner Pinned Layer"; EffectToFollow = "Corner Pin";

ParamToFollow = “Lower Right”; effectlayer = this_comp.layer(LayerToFollow) effectparam = effectlayer.effect(EffectToFollow).param(ParamToFollow); layposx = effectlayer.position[0]; laywid = effectlayer.width; layheit = effectlayer.height; layposy = effectlayer.position[1]; effectposx = effectparam[0]; effectposy = effectparam[1]; [(layposx + effectposx - (.5 * laywid)), (layposy + effectposy - (.5 * layheit))]

TR ACK EFFECT PAR A METERby Fred Lewis

Page 21: A Collection of Expressions for Adobe After Effects

This expression allows you to “drop” a layer from the top of the screen and have it bounce in the center of the comp as if tied to a string, with a bounce decay control.

First, create a small solid called “Control Layer” and hide it in the timeline. Add 3 Slider Control effects, naming them “velo control”, “amplitude control” and “decay control”. Suggested initial slider values for each are -200, -200 and 4 respectively.

Paste the expression below into the Position property of the layer you wish to bounce, and be sure to set the layer’s anchor point to the correct location, such as the bottom edge if dropping from the top.

veloc = thisComp.layer("Control Layer").effect("velo control")("Slider"); amplitude = thisComp.layer("Control Layer").effect("amplitude control")("Slider"); decay = thisComp.layer("Control Layer").effect("decay control")("Slider"); y = amplitude*Math.cos(veloc*time)/Math.exp(decay*time);value + [0,y]

DECAY I NG BOU NCEby Dan Ebberts & Steve Holmes

Page 22: A Collection of Expressions for Adobe After Effects

This expression allows you to “drop” a layer from any position (defined by your own position keyframes) and have it bounce in the center of the comp as if tied to a string, with a bounce decay control.

First, create a small solid called “squash control” and hide it in the timeline. Add 3 Slider Control effects, naming them “maxDev control”, “spd control” and “decay control”. Suggested initial slider value for decay control is 2.

Paste the expression below into the Position property of the layer you wish to bounce.

Keyframe the position drop of your layer, making sure the anchor point is in the correct location you wish the bounce to occur from. One frame before the final position keyframe, set keyframes for the maxDev control and spd control sliders, both at 0. Then one frame later, adjust the sliders to the level you desire, and adjust the decay to suit.

maxDev = thisComp.layer("squash control").effect("maxDev control")("Slider"); // max deviation in pixelsspd = thisComp.layer("squash control").effect("spd control")("Slider"); //speed of oscillationdecay = thisComp.layer("squash control").effect("decay control")("Slider"); //how fast it slows down

x = scale[0] + maxDev*Math.sin(spd*(time -inPoint))/Math.exp(decay*time);y = scale[0]*scale[1]/x;[x,y]

SQU ISH Y SQUASH Yby Dan Ebberts & Steve Holmes