Menu

Tutorial 129: 8-bit Glitches

Joe Clay | Jun 22, 2018

This started out with working on some visualizer techniques, and ended up being 8-bit glitches. Which you would know if you watched my live stream. And I know you didn't. Don't lie to me!

In this After Effects tutorial, we build an 8-bit look and we show a technique for making glitchy mattes that can be used for all sorts of useful things. I've used similar mattes for displacement, and techy animations, but here we put them into our 8-bit look to make a sort of generative art that can be used for backgrounds, textures, mattes, etc.

For information on how to make the Digital Grain check out Tutorial 120: One Comp to Rule Them All. And be sure to go check out JSplacement! And for more info on Text Generator, check out Tutorial 37: Glitch Text 02.

Get the project file through our Gumroad Store. This After Effects project file has a legacy version that should open all the way back to CC 2014. It contains everything shown in the tutorial including a few elements used to make some of the precomps as well as the textures shown. The audio file is not included because the license isn't transferrable. The audio comp will be left in though, so you can just drop a track in there, and the visualizer portions should work.

If you'd like to help support Workbench, check out our Patreon page. Thank you for even considering clicking this link to support what we're doing. We appreciate it.

Tutorial 128: I Like Turtles (Spline Animation)

Severo Ojea | Jun 15, 2018

This week we explore how you can make interesting folding meshes with MoSpline using a very simple L-System. You might have seen L-systems, or Logo programming language in school as it's often used to teach programming concepts to young children. The cursor in the UI for these graphic programs is called Turtle—which is where the name for this tutorial came from.

For additional information on L-Systems check this out. And for additional information on L-Systems in C4D read this.

Get the project file through our Gumroad Store. This project file contains the three Cinema setups that were demoed, as well as the After Effects project that the gif above was made in. The C4D file should work back to at least R16. The AE file was built in 2018 but there's a legacy version back to CC v13.

If you'd like to help support Workbench, check out our Patreon page. Thank you for even considering clicking this link to support what we're doing. We appreciate it.

Tutorial 127: Tank-Style Wireframes

Joe Clay | Jun 8, 2018

This might be our longest tutorial ever. It was a difficult edit because I swapped some things around for some clarity, but it's a complicated tutorial involving using some sliders in ways they were never intended. So hopefully it's clear.

Anyway, this week we're taking a look at making a variant of the effect that Stu Maschwitz used on his short film Tank. Make sure to watch that and the BTS. This is not a copy. His work was far more intensive, and far more custom. This is a cheap imitation compared to Tank. That said, you can take this technique further and get nearer the beautiful subtle glitches and things that are present in Tank, but it will take you some time. If you use the Saber version we show, you can change Saber's flicker settings to get an approximation at least.

Here are the expressions we're using. Remember to set up a slider on each layer as the first effect, and name it with the nulls you're making a polygon out of in clockwise order. This first expression goes in a path property on your shape/solid—either in a mask or in a shape path. Shapes seem to be faster after my testing. Make sure you watch the video to see how you need to set up the shapes if you're using Saber instead of a stroked shape.

pts = effect(1).name.split(',');
offset = 1 + effect(1)("Slider");
p = new Array();
for(i = 0; i < pts.length; i++ ) {
    j = parseInt(pts[i])+offset;
    p.push(fromCompToSurface(thisComp.layer(j).toComp([0,0,0])));
}
if(effect("Open?")("Checkbox").value == 1 ) { createPath(p,[],[],false) } else { createPath(p) }

This expression gets applied to opacity.

pts = effect(1).name.split(',');
offset = 1 + effect(1)("Slider");
p1 = thisComp.layer(parseInt(pts[0])+offset).toComp([0,0,0]);
p2 = thisComp.layer(parseInt(pts[1])+offset).toComp([0,0,0]);
p3 = thisComp.layer(parseInt(pts[2])+offset).toComp([0,0,0]);

n = calculateNormal(p1,p2,p3);

function calculateNormal(p1,p2,p3){
    //Nz = UxVy - UyVx
    //cross p1p2 and p1p3
    u = [p2[0]-p1[0], p2[1]-p1[1], p2[2]-p1[2]];
    v = [p3[0]-p1[0], p3[1]-p1[1], p3[2]-p1[2]];
    return cross(u, v);
}

f = linear(effect("Flip Normals")("Checkbox"),0,1,1,-1);
if(n[2] * f > 0) { 100 } else { value };

We also used Cyclops to show the nulls in the tutorial. Grab it if you need to show controls like that!

Get the project file through our Gumroad Store. This project file can only be opened in versions of AE that support Path Expressions (2018+). This contains the C4D models shown, as well as the After Effects setups for all of the comps shown. There are also two experimental comps that weren't shown. One uses AE Pixel Sorter, so if you open this and you get a warning for that effect, don't worry because everything in the tutorial will still work.

If you'd like to help support Workbench, check out our Patreon page. Thank you for even considering clicking this link to support what we're doing. We appreciate it.

Tutorial 126: Number Crawl

Joe Clay | Jun 1, 2018

This week, we're going to check out an interesting way to make a number crawl using expressions and master properties. I wanted to avoid using time remapping because it can change the speed of our animations. I also wanted our digits to finish animating when our number stops animating. And above all else, I didn't want this expression to be slow so we needed to keep any lookback loops to a minimum.

While this is mostly an academic exploration, in the end we have a flexible but useful number crawl that has almost no limit to how large the number can be while allowing for animation from number to number.

Here's the expression we applied to our Number master property:

num = thisComp.layer("Controller").effect("Number")("Point");
str = '000000000000' + Math.floor(num[0]);
c = str.length-effect("Index")("Slider");
d = parseInt(str.charAt(c));

i = thisComp.layer("Controller").effect("Duration")("Slider");
while(i > 1) {
    j = '000000000000' + Math.floor(num.valueAtTime(time-(i*thisComp.frameDuration))[0]);
    if (d == j.charAt(c)) {
        k = '000000000000' + Math.floor(num.valueAtTime(time-((i+1)*thisComp.frameDuration))[0]);
        if(j.charAt(c) == k.charAt(c)) {
            break;
        }
    }
    i--;
}

d + i/100;

So I hope you guys learned something from this and we'll see you next week!

Get the project file through our Gumroad Store. This project file can only be opened in versions of AE that support Master Properties (2018+).

If you'd like to help support Workbench, check out our Patreon page. Thank you for even considering clicking this link to support what we're doing. We appreciate it.

Tutorial 125: Secondary Motion

Severo Ojea | May 25, 2018

This week, we're going to explore adding secondary motion to your animations in Cinema 4D. We take a look at how to do it with clones as well as splines but the technique can be applied to any keyframed animation.

Get the project file through our Gumroad Store. This project file contains projects for C4D. You should be able to use this in pretty much any modern version of Cinema. The example gif above is actually from 2014.

If you'd like to help support Workbench, check out our Patreon page. Thank you for even considering clicking this link to support what we're doing. We appreciate it.

Tutorial 124: Linked Paths

Joe Clay | May 18, 2018

This week, we're going to link paths on different layers using a slider so that we can animate them as if they're a single stroke. This lets us easily pass lines around objects in 3D space without actually having to deal with 3D space and figuring out occlusion.

To start with this effect, you need to have a Controller null that has sliders for Start and End. Then you need a slider for either Elements or Bias depending upon which version of this technique you're using. If you have multiple strokes, bias won't work.

For multiple strokes this is the expression for start and end parameters in whatever stroke effect you're using. Just change the parts that say start to end for the end parameter.

start = thisComp.layer("Controller").effect("Start")("Slider"); //0
block = 100/thisComp.layer("Controller").effect("Elements")("Slider");
thisNum = thisLayer.name.substr(1,2);
rStart = (thisNum-1)*block;
rEnd = thisNum*block;
linear(start,rStart,rEnd,0,100);

For two strokes where you need to control the bias, this will work for start/end parameters. Again, be sure to replace start with end for the end parameter.

bias = thisComp.layer("Controller").effect("Bias")("Slider");
start = thisComp.layer("Controller").effect("Start")("Slider");
linear(start,0,bias,0,100);

Get the project file through our Gumroad Store. This project file contains projects for AE CC 2013+. You might get a notice if you don't have Optical Flares, but it's not required for the technique. Everything else in the tutorial is included.

If you'd like to help support Workbench, check out our Patreon page. Thank you for even considering clicking this link to support what we're doing. We appreciate it.

Tutorial 123: Object Blending

Severo Ojea | May 17, 2018

This week we're going to blend without an Osterizer. By using the same object in a few different states, we'll use the blend function in a Mograph Cloner to animate clones without keyframing. This is a powerful way to animate your clones.

Get the project file through our Gumroad Store. This project file contains the two examples from the tutorial, and alternate example, and a bonus project from the thumbnail. This was built in R19, but it works in R18 and should work back to about R16.

If you'd like to help support Workbench, check out our Patreon page. Thank you for even considering clicking this link to support what we're doing. We appreciate it.

Tutorial 122: After Effects Multi-shader

Joe Clay | May 4, 2018

This week we take another look at master properties inside of After Effects to build a sort of multi-shader. This allows us to use different mattes to apply textures to an image. If you use the angle control, which is tied to a Colorama effect on each matte, you can rotate the angle so that each copy of your multi-shader comp shows a different portion of the matte that can be textured differently. In this way, each copy of the multi-shader comp becomes a puzzle piece that locks in with the other layers.

An easy way to use this is to set the same matte layer in the master properties for the multi-shader comp, and set a different texture and angle. 360/0° is the base matte, 1° is the opposite of the matte and 180° is halfway between those (middle grey).

But of course, that's not the only way to use this. It can be taken much further than this concept, especially if you animate the various layers. Our project file includes the ability to have the textures animate, to have the mattes animate, or to have both animate. This is accomplished with a simple Checkbox Expression Control. Then on Time Remap for each of those layers we have a variant of this expression:

time*thisComp.layer("Controller").effect("Animate Mattes?")("Checkbox");

Since checkboxes return 0 or 1, we either have Time Remap set to 0 or set to time. I hope you guys enjoy this one and we'll see you next week.

Get the project file through our Gumroad Store. This project file only works in the versions of AE CC 2018 that support master properties. It includes all of the textures and mattes, and the ones in the project file are also animated to show how to set that up.

If you'd like to help support Workbench, check out our Patreon page. Thank you for even considering clicking this link to support what we're doing. We appreciate it.

Tutorial 121: Quick Tips 07

Joe Clay | Apr 27, 2018

Here's another collection of Quick Tips for you guys. The time for each tip is as follows:

And that's it. I hope these help you guys to work faster. That math tip alone could have probably added years to my life at this point. Also, for info on vector math, check out AE Enhancers Expression Reference.

If you'd like to help support Workbench, check out our Patreon page. Thank you for even considering clicking this link to support what we're doing. We appreciate it.

Tutorial 120: One Comp to Rule Them All

Joe Clay | Apr 20, 2018

This week, we take a look at Master Properties using the Essential Graphics Panel. While you can use them to make things like lower thirds comps with replaceable text, we're going to use them in a different way—using single comps of elements to generate more complex imagery.

We'll do that in a few different ways in this tutorial. This tutorial only scratches the surface of what is possible with this new After Effects feature.

Get the project file through our Gumroad Store. Because the feature that allows this is only in the latest version of After Effects, only CC 2018 files are provided in the download. The transition matte used for the logo, and the parking garage footage that is used to generate the background in the logo comp are included in the download.

For further information, please consult the following:

Expressions

Here are the expressions used throughout the tutorial. First we'll start with the expressions used in the two element precomps. These expressions control the visibility of layers in the precomp with a controller that has a slider on it. The slider is exposed to the main comp as a master property. Note: these might scroll in your browser.

Index Selection

if (thisComp.layer("Controller").effect("Layer Index")("Slider") == index) { 100 } else { 0 };

This version of the selection expression checks the index number of the layer. If it matches the slider value, the layer is visible.

Layer Name Selection

if(this.name == thisComp.layer("Controller").effect("Index")("Slider")) { 100 } else { 0 };

This version of the expression above checks the name of the layer instead of the index, so there can be more than one layer visible in the main comp.

Improved Layer Name Selection

if(this.name.substr(0,2) == thisComp.layer("Controller").effect("Index")("Slider")) { value } else { 0 };

This version of the expression allows for more detailed names in layers that are to be show, so you can name something like 07 - box and it will show up if the slider is set to 7.

The remaining expressions are used to control the precomp elements within the main comps, especially with selecting what elements to show.

Radial Grid Selection

pos = transform.position;
num = thisComp.layer("Controller").effect("Slider Control")("Slider");
x = Math.pow(pos[0]-(thisComp.width/2),2);
y = Math.pow(pos[1]-(thisComp.height/2),2);
d = Math.sqrt(x+y);
Math.round(linear(d,0,1102,1,num));

This expression is applied to the master property slider, generally named Layer Index in the tutorial. The element chosen is based on the layer's proximity to the center of the composition.

Sample Image Selection

Math.round(thisComp.layer("Map").sampleImage(position)[0]*thisComp.layer("Controller").effect("Max")("Slider"));

This expression is also applied to the Layer Index slider. The element chosen is based on the red values found on the Map layer. For the most predictable results, keep the image greyscale.

Digital Grain Selection

s = effect("Speed")("Slider");
max = thisComp.layer("Controller").effect("Items")("Slider");
seed = thisComp.layer("Controller").effect("Random Seed")("Slider");
seedRandom(Math.floor(time*s)+seed, true);
Math.floor(random(0,max));

This expression, also applied to the Layer Index slider, determines which element is chosen randomly in the precomp.

Digital Grain Opacity

if(index < thisComp.layer("Controller").effect("Selection")("Slider") + 1) {
    v = effect("Visibility")("Slider");
    if (random(0,1) < v) { value } else { 0 };
} else {
    0;
}

This expression controls the visibility of the chosen elements.

Digital Grain Position

s = effect("Speed")("Slider");
seed = thisComp.layer("Controller").effect("Random Seed")("Slider");
seedRandom(Math.floor(time*s)+seed, true);
if(thisComp.layer("Controller").effect("Quantize")("Checkbox") == 1) {
    mul([Math.round(random(0,63))+.5, Math.round(random(0,35))+.5],30);
} else {
    [random(0,1920),random(0,1080)];
}

This expression controls the position of the chosen elements.

And that's it. It's a lot to figure out, but when you do it's going to open up a new world—especially if you're like me and you version small elements. Now you can just comp them all together in the same comp, and use sliders to pick out what you need.

If you'd like to help support Workbench, check out our Patreon page. Thank you for even considering clicking this link to support what we're doing. We appreciate it.

12345678910111213