Tutorial 158: Noise Fields and Text

Joe Clay | Jan 11, 2019

This week, inspired by Kyle Hamrick's #textperiments on twitter, we explore using noise() for randomization within text animators. Unlike traditional randomization like the Wiggly Selector, using noise() allows us to keep the randomization of nearby elements similar—sort of like the Noise effect versus the Fractal Noise effect.

With this technique, we can get really interesting movement and reveals—especially when combined with the range selector. You can expand on this technique by using more graphical characters, custom fonts, and even icon fonts so, as always, I encourage you to experiment. We've only scratched the surface in this tutorial.

Make sure to check out Tutorial 34, 35, and 36 for more information on the Expression Selector.

Expression Code

Here's an expression for 1D noise.

x = textIndex + time/thisComp.frameDuration;
x *= effect("Noise Scale")("Slider");
noise(x) * 100;

Here's an expression for 2D noise linked to three sliders named Noise Scale, Speed, and Scale. I added in the variable n so that you can quickly modify the number of characters in a row.

n = 3; //change to number of characters per row
y = Math.floor(textIndex/n);
x = textIndex % n;
if(x == 0) {
    x = n;
    y -= 1;
}
speed = time/thisComp.frameDuration * effect("Speed")("Slider");
x += speed;
y += speed;
x *= effect("Noise Scale")("Slider");
y *= effect("Noise Scale")("Slider");
noise([x,y]) * effect("Scale")("Slider");

To incorporate another range, or possibly even another expression selector, modify the final line to look like this. It is important to divide the selectorValue by 100 because we want to use it as a percentage to scale the final result.

noise([x,y]) * effect("Scale")("Slider") * (selectorValue/100);

To reverse the noise direction, before doing anything else subtract like this. We'll set that to a variable i just in case we need to use it in more than one place.

i = textTotal - textIndex;

That way you can use i like so:

//2D noise
x = i % n;
y = Math.floor(i/n);
// 1D noise
x = i + time/thisComp.frameDuration;

Then you can get fancy and make a checkbox to reverse the direction by changing the value of i. There's a lot that can be done. Experiment! This technique goes way deeper than I've explored in this video, so I hope you can take these examples and build on them!

Grab the Project Files

The best way to get our project files is to become a patron on Patreon. For $5 a month, you get access to all of the tutorial project files we've made available as well as other monthly projects, rigs, R&D, elements, early product previews, and BTS content not available anywhere else! You can also purchase just this project file on our Gumroad Store if you would rather do that.

Get access to all of our project files on Patreon or Get this single project file on Gumroad