noise()
noise() After Effects hidden gem of the week
| CreativeCOW.net Adobe After Effects Tutorial |
 |
Dan Ebberts
Sacramento, California, USA
©2004 by Dan Ebberts and CreativeCow.net. All rights are reserved.
|
Article Focus:
The After Effects expression language has a seldom-used random number generator that is really quite a gem. Dan Ebberts says seldom-used because he doesn't believe he's ever seen it used in a single expression he's seen posted on the internet. Its not the easiest command to understand and the documentation is pretty sparse but once you get past that its very cool.
|
Before we get into how to use it, lets set up a scenario where we might want to use it (if we only knew that it existed). Suppose you had a grid of dots and you wanted to generate an undualting 3D motion like the dots were attached to a flag waving in the wind or were floating on water. One way to do this would be to set up a grid of dots and then have a comp-sized layer of Fractal Noise below and have each dots z position related to the luminace of the Fractal Noise patten directly below the dot. Lets say we want brighter areas of the noise to move the dots closer to the camera and the darker areas to move the corresponding dots away from the camera. As we animate the Evolution parameter of the Fractal Noise we would expect the dots to undulate as the underlying luminance vlaues change. Note that what were looking for is not independent random motion for each dot. We want it to appear as if the dots are connected to an undulating surface. That means that the position of each dot is related to that of its neighbor.
OK this sounds like a cool project lets get started. Theres just one problem. As you may have discovered, theres no way (without the help of a plugin) to access pixel luminance values from an expression. There are some nifty plugins that will let you do this Anarchy Toolbox from Digital Anarchy has Color Sampler, Expression Effects from Bresnev Shu has Color Analysis Node, and Useful Things from Profound Effects also gives you access to the pixel color and luminance values. Each of these wonderful plugins provides you a way to solve our design problem (and much, much more). But in this very specialized, particular case (where we want to use fractal noise to generate an undulating motion) were going to be able to pull this off with the tools provided within AEs expression language.
The trick to all this is the noise() function. What this lets us do is create our own Perlin noise space (if youre interested in the math, use Google to look up Perlin noise which is the basis of many fractal noise patterns). It gives us access to a 3D noise structure that extends in all directions. We can simulate moving through it in any direction. We wont be able to see it like you can with Fractal Noise, but well be able to see the affect it has on our dots. Picture it as a gigantic wispy fog bank that you can wander around in and take sample fog density readings wherever you are.
The noise() function accepts a single parameter that can have one, two, or three dimensions. Its useful to visualize these as offsets in x, y, and z directions. If you supply a one-dimensional parameter the results of varying that parameter would be like moving along a straight line in our fractal noise environment. A two-dimensional parameter would be like moving around in a single plane of the noise space, and a three-dimensional parameter gives you access to the whole 3D space. The output is a number between 0 and 1 that is somewhat random, but has correlation to nearby points.
OK so heres the plan. Well set our dots up in a grid (actually, well apply an expression that will allow our dots to position themselves in a grid - much less work). Well use each dots x and y position as the first two inputs to the noise() function. Well use the result of the noise() functin to calculate each dots z displacement based on the value of the noise field at that x/y location. Well use time as the third dimension of the input to noise() that will effectively move our plane throught the 3D fractal noise space. The result should be undulating dots.
So our position expression for each dot will be a combination of grid-positioning for x and y and a noise() component for z. Lets tackle the grid part first. Were going to set up a 10 x 10 grid of dots.

Start by creating a 640 x 480 comp several seconds in length. Then add a 30x30 solid layer. Make it 3D and set the quality to best. Make it a circle/dot by double clicking on the circular mask tool. Add this expression to the Position Property:
numRows = 10;
numCols = 10;
row = Math.floor((index - 1)/numCols);
col = (index - 1)%numCols;
x = col*width + width/2;
y = row*height + height/2;
xOffset = (this_comp.width - numCols*width)/2;
yOffset = (this_comp.height - numRows*height)/2;
[x,y,position[2]] + [xOffset,yOffset,0]
Now duplicate the dot layer 99 times. I do this by selecting the layer, hitting Ctrl+d 9 times, select all the dots and hit Ctrl+d nine more times. The dots should spread themselves out to fill in a 10x10 grid. Note that you can create any grid size you want by changing the numRows and numCols parameters and making the appropriate number of duplicates. If you want smaller dots, just start with a smaller solid the expression will adjust.
At this point you might want to create a camera and position it so that you can see the grid on an angle so youll be able to clearly see motion in the z direction. I added a light for dramatic effect. Note put the camera and light on the bottom of the layer stack, otherwise it will mess up the grid calculation, which relies on the layer index and expects layer 1 to be the first dot.

Now that weve demonstrated that we can, in fact, generate a self-populating 10x10 grid of dots without too much trouble, were ready to add in the undulating part of the expression. Delete 99 of the dot layers so well only have to modify one expression then well recreate the duplicates.
Here the modified expression:
numRows = 10;
numCols = 10;
xyCompress = 200;
speedCompress = 1;
amplitude = 100;
row = Math.floor((index - 1)/numCols);
col = (index - 1)%numCols;
x = col*width + width/2;
y = row*height + height/2;
xOffset = (this_comp.width - numCols*width)/2;
yOffset = (this_comp.height - numRows*height)/2;
z = amplitude*noise([x/xyCompress,y/xyCompress,time/speedCompress]);
[x,y,z] + [xOffset,yOffset,0]
Lets take a look at whats different. Youll notice that weve added three new parameters at the top of the expression. The first one, xyCompress that will define how closely correlated the z position of adjacent dots will be. The larger this number is, the more related adjacent positons will be. In other words, larger values of xyCompress will give you a smoother undulation, smaller values will give you more chaotic undulation. The next new parameter is speedCompress. This will determine how fast we move through our fractal noise field. In practical terms, the larger the value of speedCompress the slower the undulation. The last new parameter is amplitude. This simply scales the output of the noise() function (which is normally between 0 and 1) to the range of z movement (in pixels) that we want in our undulation. In this case, well get values between 0 and 100 pixels.
Finally, the lst new line of code where all the action takes place is the call to noise(). We feed it the x and y position of our dot (scaled by xyCompress) and the current comp time (scaled by speedCompress) and get a z offset that we multiply by amplitude. Then all we have to do is replace position[2] from our first expression with z and were done.
Create the 99 duplicates again and preview. If you did everything correctly, you should be rewarded with a nice 10x10 grid of undulating dots.
Once you get your brain wrapped around noise(), you start to see where it can come in handy to have access to a 3D noise field within the environment of After Effects expressions. Think about it. Natural effects like wind flowing through a field of grass or lilypads on a pond. The possibilities are endless. Thats my hidden gem of the week. 8^>
|
##Dan Ebberts
Feel Free to discuss this technique in the After Effects forum here at CreativeCOW.
Please visit our forums and view other articles at CreativeCOW.net if you found this page from a direct link.
|
| Related Articles / Tutorials: |
| | | |
Adobe After Effects
AE Basics 44: Shaping Text And Advanced Options Play Video AE Basics - A Creative COW series for new users of Adobe After Effects. Lesson 44: In this (more advanced) tutorial, Andrew Devis shows the options to change the way text moves through its range and explains how to change this from the default smooth animation to a much more 'digital' or abrupt instant change. Andrew then goes on to demonstrate more of the advanced options in the timeline to 'shape' your text so that it can have a more interesting or dramatic look allowing for the type of animation that would be very difficult to achieve otherwise.
Tutorial, Video Tutorial
|
| | | | |
| | | |
Adobe After Effects
Create a Rotating Counter TWO: Adding & Adjusting a Bounce Play Video In the second part of this 2 part tutorial, Andrew Devis shows how to animate the rotation of this group of layers as well as how use and adjust an expression that ships with After Effects to have the layers bounce in place as they stop which can give the sense of the counter having some real mechanical properties rather than just a linear of easy-ease keyframe approach.
Tutorial, Video Tutorial
|
| | | | |
| | | |
Adobe After Effects
Create a Rotating Counter ONE: Positioning 3D Layers Play Video In the first part of this 2 part tutorial, Andrew Devis shows how to create and place layers in 3d space such that they can be rotated as a single group to be used for a rotating counter. Andrew shows how to create and place the layers using both the math function of AE as well as a handy and simple expression that places layers a fixed distance or rotation from the previous layer. He then goes on the show how to create and use a controller for the multiple layers so that they act as a single group.
In the next tutorial, Andrew will show how to animate the rotation of this group of layers as well as how use and adjust an expression that ships with After Effects to have the layers bounce in place as they stop which can give the sense of the counter having some real mechanical properties rather than just a linear of easy-ease keyframe approach.
Tutorial, Video Tutorial
|
| | | | |
| | | |
Adobe After Effects
Confessions of a Creative Maniac: Keys to Getting It In
In the history of computing, including the extension to the notion of what actually falls under the guise of history - let's face it, smartphones are really just diminutive computers in a somewhat flimsy disguise - an often overlooked aspect of the entire discussion is something absolutely core to the idea of how these communications devices interface with us - the venerable keyboard.
Editorial
|
| | | | |
| | | |
Adobe After Effects
Introducing After Effects CS6 - Extruded Text and Shapes Play Video In this introductory tutorial to the new 3D capabilities of After Effects CS6, Kevin P McAuliffe shows the basics of how to extrude text and shapes inside of After Effects CS6, and also shows how tight integration with Adobe's Illustrator will have you creating powerful client logos in minutes, instead of in separate 3D applications.
Tutorial, Video Tutorial
|
| | | | |
| | | |
Adobe After Effects
Adobe After Effects: Compositing Actors in Virtual 3D Sets Play Video Rob Mize follows up his Creating Virtual 3D Sets tutorial with this demonstration of how to composite real-life actors into these 3 dimensional environments. Learn how to create an effective sense of interaction between your actors and their virtual environment using only your green screened footage and AE's 3D capabilities.
Tutorial, Video Tutorial
|
| | | | |
| | | |
Adobe After Effects
Panning Large Scenes Using Target Layers in 3D Play Video In this follow-on tutorial to his short series on working in 3D space, Andrew Devis shows how to use this simple technique to quickly and accurately pan around large layers/compositions to zoom in to the exact point required each time. You'll use target layers to get the exact coordinates needed for accurate panning - simple but effective!
Tutorial, Video Tutorial
|
| | | | |
| | MORE |
| |
|