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!

Grab the Project Files

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 shown in the tutorial will still work.

If you're buying project files, consider becoming a Patron. At the \$5/mo. tier, you get access to project files as they come out and some tutorials also come with additional BTS content showing more of the builds.

Become a Patron

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. Patrons get all sorts of benefits, from R&D files, setups, and elements to early product releases.

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!

Grab the Project Files

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're buying project files, consider becoming a Patron. At the \$5/mo. tier, you get access to project files as they come out and some tutorials also come with additional BTS content showing more of the builds.

Become a Patron

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. Patrons get all sorts of benefits, from R&D files, setups, and elements to early product releases.

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.

Grab the Project Files

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're buying project files, consider becoming a Patron. At the \$5/mo. tier, you get access to project files as they come out and some tutorials also come with additional BTS content showing more of the builds.

Become a Patron

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. Patrons get all sorts of benefits, from R&D files, setups, and elements to early product releases.

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);

Grab the Project Files

Get the project file through our Gumroad Store. This project file contains projects for AE CC 2014+. 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're buying project files, consider becoming a Patron. At the \$5/mo. tier, you get access to project files as they come out and some tutorials also come with additional BTS content showing more of the builds.

Become a Patron

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. Patrons get all sorts of benefits, from R&D files, setups, and elements to early product releases.

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.

Grab the Project Files

Get the project file through our Gumroad Store. This project file contains the two examples from the tutorial, an 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're buying project files, consider becoming a Patron. At the \$5/mo. tier, you get access to project files as they come out and some tutorials also come with additional BTS content showing more of the builds.

Become a Patron

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. Patrons get all sorts of benefits, from R&D files, setups, and elements to early product releases.

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.

Grab the Project Files

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're buying project files, consider becoming a Patron. At the \$5/mo. tier, you get access to project files as they come out and some tutorials also come with additional BTS content showing more of the builds.

Become a Patron

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. Patrons get all sorts of benefits, from R&D files, setups, and elements to early product releases.

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:

• 0:12 - Center Anchor Point
• 0:55 - Math (Keyframes)
• 1:57 - Laptop Shortcuts
• 2:38 - Kill Keyframes (Temporarily)
• 3:07 - Stroke/Fills Options
• 3:45 - Reveal Timeline/Effects
• 4:12 - Vector Math
• 5:06 - Folder with Contents
• 5:38 - Quick Color
• 6:16 - Preservation

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.

Become a Patron

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. Patrons get all sorts of benefits, from R&D files, setups, and elements to early product releases.

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.

Grab the Project Files

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.

If you're buying project files, consider becoming a Patron. At the \$5/mo. tier, you get access to project files as they come out and some tutorials also come with additional BTS content showing more of the builds.

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.

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.

Become a Patron

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. Patrons get all sorts of benefits, from R&D files, setups, and elements to early product releases.

Tutorial 119: Filling Volumes

Severo Ojea | Apr 13, 2018

This week we explore building a volume of clones, texturing the clones, and animating them.

This seems like an easy and straightforward task but there are certain pitfalls that we address in this tutorial that will make the entire process a lot less frustrating.

Become a Patron

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. Patrons get all sorts of benefits, from R&D files, setups, and elements to early product releases.

Grab the Project Files

Get the project file through our Gumroad Store. The project file includes one C4D file and textures.

If you're buying project files, consider becoming a Patron. At the \$5/mo. tier, you get access to project files as they come out and some tutorials also come with additional BTS content showing more of the builds.

Tutorial 118: Text Breakup

Joe Clay | Apr 6, 2018

You know those cool text animations where letters slide in from all sorts of places? They often look hand-animated rather than text animator driven. Well, I set out about finding a way to make them with text animators.

There's probably a way to do this with Expression Selectors, and I'm going to look into that. But for now, this is a neat way to make a repeatable text animation with individual moves for each character.

And if you happen to want a shirt, check out our product page! We got merch like a god church. I can't believe I quoted that, but it's just too good to pass on.

UPDATE: We figured out a version using a single Expression Selector per move here. The project files now include this version as another AEP.

Become a Patron

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. Patrons get all sorts of benefits, from R&D files, setups, and elements to early product releases.

Grab the Project Files

Get the project file through our Gumroad Store. The project file includes everything in the After Effects file aside from the music file that can be seen in the project panel. I can't distribute that. There are Legacy versions back to AE CC14.

If you're buying project files, consider becoming a Patron. At the \$5/mo. tier, you get access to project files as they come out and some tutorials also come with additional BTS content showing more of the builds.