Tutorial 179: Flowering MoSpline

Severo Ojea | Jun 7, 2019

In this week's tutorial, we create a flower structure in Cinema 4D. Using MoSpline's settings in conjuction with a Cloner, we'll create and animate a flower structure.

Grab the Project Files

Get the project file through our Gumroad Store. This project file contains all of the setups shown in the tutorial. It includes the C4D file setups which will work in R20+.

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.

Get the project on Gumroad

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 additional files to early product releases depending upon the tier.

Check out our Patreon Today

Tutorial 178: Biometric Scanner

Joe Clay | May 31, 2019

In this week's tutorial, we grab a character from Mixamo, bring it into Cinema 4D, and then bring that into After Effects to treat it with a scanner look. We're using the Grid effect combined with Card Dance to make boxes that outline the character's features.

You can find the M1911A1 model we used at GrabCad. To make the moving background, check out Tutorial 148: Tech Backgrounds. For the circle nodes, Tutorial 167: Intro to Nodebox will get you to where you need to be. And Tutorial 175: Looping Noise shows you how you can make the x-grid background. The technique is similar, but the expression on SourceText is different because we know the exact amount of characters we need.

line = text.sourceText.repeat(96);
txt = '';
for(i = 0; i < 54; i++) {
    txt += line + '\n';
}

txt;

And that's it. I hope you guys have fun with this one. There's a lot of possibilities for using this technique, and there's a lot of character rigs on Mixamo to experiment with!

Grab the Project Files

Get the project file through our Gumroad Store. This project file contains all of the setups shown in the tutorial, the LUT that we use for the final look, the graphic elements, and the C4D file. The C4D file should open in any modern C4D version. The After Effects project was built in AE CC 2019 but there's a version included for v14 (2017). I've baked the expression that builds the x-grid for previous versions as I don't believe it works in older versions. The original layer is still in the file, but it might throw an error.

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.

Get the project on Gumroad

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 additional files to early product releases depending upon the tier.

Check out our Patreon Today

Tutorial 177: Futuristic Circuitry Look

Joe Clay | May 24, 2019

In this week's After Effects tutorial, we make a tree map based on a gradient—in this case from Fractal Noise—and we turn it into a futuristic circuitry look. The end result uses our American Standard LUT from LUTs Vol 1 to tie the whole thing together. LUTs can be a great way to unify colors in an animation and give everything a final look.

Also, if you'd like to know how to build an Isometric camera, check out Tutorial 103: Isometric Projection. This month, our complex elements for $20+ patrons will include a preset of that camera. I got tired of having to go back and reference my own tutorial so frequently!

Grab the Project Files

Get the project file through our Gumroad Store. This project file contains all of the setups shown in the tutorial, the LUT that we use for the final look, the overlay footage, and all of the graphics shown. This version was built in AE CC 2019 but there's a version included for v14 (2017).

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.

Get the project on Gumroad

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 additional files to early product releases depending upon the tier.

Check out our Patreon Today

Tutorial 176: Stacking Paper

Severo Ojea | May 17, 2019

In this week's Cinema 4D tutorial, we're working with stacks of paper. It's a common visual representation that you'll probably come across if you make explainers. Using C4D, we can make pretty dynamic stacks of paper using cloners. Combined with the blend function and mograph effectors, we can stack papers and organize them.

Grab the Project Files

Get the project file through our Gumroad Store. This project file contains all of the setups shown in the tutorial. It includes the C4D files as well as the After Effects setup used to build the thumbnail. The C4D files will work in R20+ because we're using fields and the AE files will work in CC v14+.

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.

Get the project on Gumroad

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 additional files to early product releases depending upon the tier.

Check out our Patreon Today

Tutorial 175: Looping Noise()

Joe Clay | May 10, 2019

In this week's After Effects tutorial, we take a look at looping elements. This was inspired by Daniel Shiffman's Coding Challenge #136.1 on his excellent YouTube channel Coding Train. Coding Train is an excellent resource for coding visual art. A lot of the topics he covers can be repurposed in After Effects. Since he tackles algorithms frequently, it's also a good way to learn more deeply about the tools we use every day. For example, he has a few videos on Perlin noise, which underpins a lot of the plugins you probably use every day, like Fractal Noise.

For more information on sorting, check out JavaScript Array sort() Method.

Expression Code

Note that all of these require slider controls. You can see which ones you need to make assigned to variables in the following expressions.

This goes in a path property so you can draw a polygon.

seed = effect("Seed")("Slider");
s = effect("Noise Scale")("Slider");
v = effect("Variance")("Slider")/100;
a = degreesToRadians(effect("Evolution")("Angle"));
x = Math.cos(a) * s + seed;
y = Math.sin(a) * s + seed;
angles = new Array();
pts = new Array();
for(i = 0; i < 4; i++)
{
    n = noise([x + (i*v),y + (i*v)]);
    a = linear(n, -1.25,1.25,-1,1) * 360;
    if (a < 0) {
        a = 360 + a;
    }
    angles.push(a);
}

angles.sort(function(a, b){ return a - b });

for(i = 0; i < angles.length; i++)
{
    a = degreesToRadians(angles[i]);
    ptX = Math.cos(a) * 300;
    ptY = Math.sin(a) * 300;
    pts.push([ptX, ptY]);
}
createPath(pts);

All of the text layers have something like this to repeat characters. If you put a few characters in and add a carriage return, it'll duplicate lines and the carriage returns.

text.sourceText.repeat(23);

This is the expression used on text where we don't care if the first and last characters loop together. Apply this to an expression selector in a text animator.

v = effect("Variance")("Slider")/100;
a = degreesToRadians(effect("Evolution")("Angle") + (textIndex * v));
s = effect("Noise Scale")("Slider");
x = Math.cos(a) * s;
y = Math.sin(a) * s;
noise([x, y]) * 100;

This is the expression used on characters that need to loop first and last characters—around a circular path for example. Apply this to an expression selector in a text animator.

seed = effect("Seed")("Slider");
a = degreesToRadians(textIndex/textTotal * 360 + effect("Evolution")("Angle"));
s = effect("Noise Scale")("Slider");
x = Math.cos(a) * s + seed;
y = Math.sin(a) * s + seed;
noise([x, y]) * 100;

Grab the Project Files

Get the project file through our Gumroad Store. This project file contains all of the setups shown in the tutorial, the Workbench Dots font, as well as some other graphic elements used in the final designs. It also includes all of the expressions code shown. This hasn't been fully tested in the Legacy ExtendScript engine, but from switching back and forth a couple of times, it didn't seem to throw any errors. Most of it is pretty standard with maybe the exception of the repeat function in the sourceText. To get around that you'd just need to enter text to fill out the text layers. Because of that this includes a version built in CC 2019 and a version that should open back to CC v14.

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.

Get the project on Gumroad

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 additional files to early product releases depending upon the tier.

Check out our Patreon Today

Tutorial 174: Fracture Mattes

Severo Ojea | May 3, 2019

In this week's tutorial we use the fracture object in Cinema 4D to create interesting mattes. We explain how the animation is set up in C4D. Then in After Effects we take the mattes and create a killer glitch effect. It might also be interesting to use this effect like we did last week with Cineware.

We used HB Group from HB Modeling Bundle 2.3 so grab it if that interests you! It's definitely worth the cost. There's a lot of super useful stuff in there for modeling.

Grab the Project Files

Get the project file through our Gumroad Store. This project file contains all of the setups shown in the tutorial. It includes the C4D files as well as the After Effects setups. The C4D files will work in R20+ and the AE files will work in CC v14+.

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.

Get the project on Gumroad

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 additional files to early product releases depending upon the tier.

Check out our Patreon Today

Tutorial 173: AE + C4D Forever

Severo Ojea | Apr 26, 2019

In this week's tutorial we fracture an object in Cinema 4D, but instead of rendering it, we use Cineware to use After Effects as a sort of renderer for Cinema. Because we can combine various types of shading through the Cineware effect, we can build some interesting things directly in AE. Also, we forgot to mention, you can add your own camera in After Effects—if you're brave—and change up the angles directly in AE.

Grab the Project Files

Get the project file through our Gumroad Store. This project file contains all of the setups shown in the tutorial as well as another, less broken, piece of text. It includes the C4D files as well as the After Effects setups. The C4D files will work in R20+ and the AE files will work in CC 2019+.

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.

Get the project on Gumroad

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 additional files to early product releases depending upon the tier.

Check out our Patreon Today

Tutorial 172: Easy & Powerful Graphs

Joe Clay | Apr 19, 2019

In this week's After Effects tutorial, we're making bar graphs. This time, we're going to use text animators to make them, which means we have access to text animators, so instead of being limited by shape layers, we have full access to animate each element with ranges. See Kyle Hamrick's #textperiments if you're unsure of how limitless text animators are.

This can be taken a lot further. You could even tie it to CSV data if you want to. But even as-is, this is a way to get accurate graphs using real data if you so choose. And to add a new data point, all you need to do is add a new number to the layer's name—which is pretty sweet.

I also forgot to mention one of the coolest aspects of this. It all lives on one layer so you can make it a preset! And don't forget to check out info on the spread operator from JS Tips. That totally beats what I was going to do—sorting a copy of the array and checking the first element.

Expression Code

Note that all of these require slider controls. You can see which ones you need to make assigned to variables in the following expressions.

This goes on the Source Text property.

var string = '.';
string.repeat(name.split(',').length);

This goes in text animator set to modify scale.

var x = effect("Bar Width")("Slider")/.195; //the height and width of this period is about 19.5px
var y = effect("Max Height")("Slider")/.195;
[x, y];

I think maybe my explanation for why I'm dividing the height and width sliders by the pixel size of the period may be weak. I want those sliders to work as pixel values but I need to use scale to accomplish that. So I divide the pixel value I want by the original pixel value. This gives me a ratio. It's going into scale, so I need percent. If something gets 2x larger, it needs to be 200% the size. So we multiply by 100. Make sense? I hope so.

I'm not sure exactly how to explain the .195 part mathematically. I guess it's sort of like we're in the middle of dividing by 19.5 so to multiply by 100, without actually doing it to the slider portion, we divide the part we're dividing by by 100. That multiplies the final value because we're dividing by a smaller number. Make sense? It's going to have to.

Apply the next expression to tracking in a text animator. I put this one in the same animator as the scale since they won't affect each other.

effect("Bar Width")("Slider")-19.5;

And finally, add another text animator with scale. Set scale to 100%, 0% and add this expression to an expression selector.

var values = name.split(',');
var maxValue = Math.max(...values);
(1-(values[textIndex-1]/maxValue))*100;

Recall that this runs for each character in the text and textIndex is the index of the character the expression is currently evaluating. That's it!

Grab the Project Files

Get the project file through our Gumroad Store. This project file contains all of the setups shown in the tutorial as well as some other graphic elements used in the final design. It also includes all of the expressions code shown. Unfortunately, some of the code we used is only available in the new JavaScript engine, so the project files are limited to AE CC 2019+ only.

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.

Get the project on Gumroad

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 additional files to early product releases depending upon the tier.

Check out our Patreon Today

Tutorial 171: Glitch Paths

Joe Clay | Apr 12, 2019

In this week's After Effects tutorial, we're actually back in After Effects. I was talking to Mikey Borup about messing with paths using expressions, and while he was working on something, I had an idea for something else. So we're going to explore glitching paths. The basic idea is to take paths and screw them up with code.

Mikey had done something cool with messing with path resolution, using pointOnPath(). So I built glitchy text by rebuilding paths with different points. Then I started to move those points around, and ultimately I started adding in my own blocky glitches.

Since we're just using paths, we can actually use any shape, so this isn't just limited to text. So experiment with different things. You can even add in path operations like the ones I mentioned from the Mo Better Blobs tutorial—and make sure to read the text for an update.

Now, here's some code for you to examine.

Expression Code

Note that all of these require slider controls. You can see which ones you need to make assigned to variables in the following expressions.

All of these are set to glitch randomly, so sometimes the original paths are shown. In the first one, we build an array of points at a specified resolution, and then we randomly select points from that array and move them before passing them back into createPath().

var origPath = thisProperty;
var freq = effect("Glitch Frequency")("Slider")/100;

if(random() < freq){
    var res = effect("Resolution")("Slider");
    var amp = effect("Amplitude")("Slider");
    var amt = effect("Glitch Amount")("Slider");
    var seed = effect("Seed")("Slider");
    var pts = new Array;
    var skip = 1/res;
    seedRandom(seed);

    for(var i = 0; i < res; i++){
        pts.push(origPath.pointOnPath(i*skip));

    }

    for(var i = 0; i < amt; i++){
        var j = Math.floor(random(res));
        var offset = [random(-amp,amp),random(-amp,amp)];
        pts[j] += offset;
        if(j < res - 1) {
            j++;
            pts[j] += offset;
        }
    }
    createPath(pts);
} else {
    origPath;
}

In this version, we've changed out glitches to happen randomly, and we're also using the timeless argument to seedRandom() so that our random numbers will only change every 2-3 frames. This allows out glitches to hold for a frame or two longer so it's less crazy but more distinctive—like animating on twos. We've also change our random movements to push out in x only, effectively pushing out boxes from our paths. Even though I pressed on, I think I actually prefer this one.

var origPath = thisProperty;
var freq = effect("Glitch Frequency")("Slider")/100;
var seed = effect("Seed")("Slider");
seed = seed + Math.floor(time*15);
seedRandom(seed, true);

if(random() < freq){
    var res = effect("Resolution")("Slider");
    var amp = effect("Amplitude")("Slider");
    var amt = effect("Glitch Amount")("Slider");
    var pts = new Array;
    var skip = 1/res;

    for(var i = 0; i < res; i++){
        pts.push(origPath.pointOnPath(i*skip));=
    }

    for(var i = 0; i < amt; i++){
        var j = Math.floor(random(1,res-2));
        var x = random(-amp,amp);
        pts[j] = [pts[j][0] + x, pts[j-1][1]];
        pts[j+1] = [pts[j+1][0] + x, pts[j+2][1]];
    }
    createPath(pts);
} else {
    origPath;
}

In this one, we've added in a function called buildBlock() so that we can bump out a block whenever we want. So we grab all of our points, and when we're done with that, we add in boxes up to the number specified in the amount slider. Those are concatenated to the end of the original points. So they're drawn in order after the original points, so that they'll intersect the existing geometry.

function buildBlock(a, b) {
    var x = random(-amp, amp);
    var block = new Array;
    block.push(a);
    block.push([a[0] + x, a[1]]);
    block.push([b[0] + x, b[1]]);
    block.push(b);
    return block;
}

var origPath = thisProperty;
var freq = effect("Glitch Frequency")("Slider")/100;
var seed = effect("Seed")("Slider");
seedRandom(seed);

if(random() < freq){
    var res = effect("Resolution")("Slider");
    var amp = effect("Amplitude")("Slider");
    var amt = effect("Glitch Amount")("Slider");
    var pts = origPath.points();
    var inTangents = origPath.inTangents();
    var outTangents = origPath.outTangents();
    var skip = 1/res;

    for(var i = 0; i < amt; i++) {
        var pt = random();
        var a = origPath.pointOnPath(pt - .01);
        var b = origPath.pointOnPath(pt + .01);
        pts = pts.concat(buildBlock(a, b));
        for(var j = 0; j < 4; j++) {
            inTangents.push([0,0]);
            outTangents.push([0,0]);
        }
    }
    createPath(pts, inTangents, outTangents);
} else {
    origPath;
}

This is the final expression. To save time and also make cleaner paths, we test to see if we should add a glitch and then we add it instead of the point we were going to add so that it occurs where it should along the path. This makes it less crazy. Earlier versions didn't have a the Glitch Spread slider and the spread variable. This allows you to force the glitches to occur less frequently, so that instead of showing up all at the top of the paths, they spread out. This is because if they will glitch points 80% of the time, most of the glitches will be used earlier in the process of building the paths leaving none for the rest. So adding in that slider allows you to fine tune it.

function buildBlock(a, b, glitches) {
    var x = random(-amp, amp);
    var block = new Array;
    block.push(a);
    block.push([a[0] + x, a[1]]);
    block.push([b[0] + x, b[1]]);
    block.push(b);
    return block;
}

var origPath = thisProperty;
var freq = effect("Glitch Frequency")("Slider")/100;
var seed = effect("Seed")("Slider");

seed += Math.floor(time*15);
seedRandom(seed, true);

if(random() < freq){
    var res = effect("Resolution")("Slider");
    var amp = effect("Amplitude")("Slider");
    var amt = effect("Glitch Amount")("Slider");
    var size = effect("Glitch Size")("Slider") * .01;
    var pts = new Array;
    var inTangents = new Array;
    var outTangents = new Array;
    var skip = 1/res;
    var glitches = 0;

    for(var i = 0; i < res; i++) {
        if(random() > .5 && glitches < amt) {
            var a = origPath.pointOnPath(i * skip - size);
            var b = origPath.pointOnPath(i * skip + size);
            pts = pts.concat(buildBlock(a, b));
            for(var j = 0; j < 4; j++) {
                inTangents.push([0,0]);
                outTangents.push([0,0]);
            }
            glitches ++;
        } else {
            pts.push(origPath.pointOnPath(i * skip));
            tangent = origPath.tangentOnPath(i * skip)*10;
            inTangents.push(mul(tangent, -1));
            outTangents.push(tangent);
        }
    }
    createPath(pts, inTangents, outTangents);
} else {
    origPath;
}

And that's it. I hope this helps you, or at least gets you thinking of the power that we finally have to control the destiny of our paths.

Grab the Project Files

Get the project file through our Gumroad Store. This project file contains all of the setups shown in the tutorial as well as some other graphic elements used in the final design. It also includes all of the expressions used during the research and development of this tutorial. I've also included an older version that should open in AE CC 2018+. Versions prior to 2018 cannot access path points.

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.

Get the project on Gumroad

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 additional files to early product releases depending upon the tier.

Check out our Patreon Today

Tutorial 170: Fields Reveal

Severo Ojea | Apr 5, 2019

In this week's Cinema 4D tutorial, we explore making a liquid effect from 3D noise. We'll make a mesh using Volume Builder and noise that will animate to fill an object.

Grab the Project Files

Get the project file through our Gumroad Store. This project file includes the setup shown in the tutorial. It's R20+ because we're using fields.

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.

Get the project on Gumroad

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 additional files to early product releases depending upon the tier.

Check out our Patreon Today

 1234567891011121314151617181920