How to make a more flexible wiggle in After Effects
Written on 30 June 2016, 01:58am under Quick Tips
The typical wiggle expression in After Effects is this:
So if you would like your position to move on a scale of 20 pixels every half second you would use this expression on the position property:
The wiggle function returns an array or numbers. If you are applying it on a 3D layer, it returns an array of three numbers (
[x, y, z]) and if you are applying it on a 2D layer it returns an array of two numbers (
[x, y]). If you want to just wiggle one of the axis of a 2D layer you can simply do this:
var wiggle = wiggle(.5, 20); [wiggle, value];
Here, only our value
x will have the wiggle. The only difference with a 3D layer is that it would need a third value.
If you would like instead to have
x wiggled normally, but
z to have a bigger wiggle you could do:
var low_wiggle = wiggle(.5, 20); var high_wiggle = wiggle(.5, 50); [low_wiggle, high_wiggle, high_wiggle];
You often might want to keyframe a wiggled value. This can easily be resolved by creating a null layer, typically named
Controller, to which you would apply two Slider Control effects. One named
Frequencythe other one
Amplitude. You can name them however you like, but I think these names are the most obvious. Next, on your layer’s position property, you would add this expression:
This way, you would be able to keyframe one or both of those sliders in order to increase or decrease the wiggle effect.
You can sync multiple wiggles by using the
seedRandom() function. By default After Effects attributes a different seed value to each wiggle. The
seedRandom() function forces the wiggle (or any other function using random numbers) to use the seed your are providing.
seedRandom(1, true); wiggle(thisComp.layer("Controller").effect("Frequency")("Slider"), thisComp.layer("Controller").effect("Amplitude")("Slider"));
The first parameter (
1) is the seed number that will be used to generate the random number. It can be whatever you like. The second parameter is the
timeless parameter. If you don’t set it to
true the random number will change on every frame and this will probably result in things you do not want. If you use the expression above on many layers, all of their wiggles will be coordinated.
The good thing about using a controller, is you can apply a wiggle to the amplitude too. To do this, you will need to add another slider to your controller. Name it maybe
Wiggle value and set its base amount to the the number you want to start from, say
50 for example, and then apply the same kind of expression:
Now, you can apply to your layer’s position this expression:
value + thisComp.layer("Controller").effect("Wiggle value")("Slider")
value represents what your property already holds as its base value. It will be supplemented with
Wiggle value is a
Slider Control, it only has one dimension. If you use it with a property that has 2 dimension, say scale for example, both first and second values will be the same. If you want them to be different, instead of using a
Slider Control for your
Wiggle value use a
Point Control for 2 dimensions, and
3D Point Control for 3 dimensions such as position for 3D layers.
And that’s about it. If you want to learn more about the wiggle expression you can read about it here:
Written by Sébastien Lavoie (Published articles: 16)