picture home | art | events | music | rack extensions | downloads | pixel blog

omino pixel blog

pixels, motion, and scripting
entries for 2009 March
david van brink // Tue 2009.03.17 00:27 // {after effects}

AE: A Stupid Text-Control Trick

Here’s a little movie that demonstrates a text track being used to “trigger” the opacity of another track.

Controlling Pip Opacity From Text

I needed a blinking pip. (It’s actually for an interesting optical effect… but for now, we’ll just talk about the pip.) Rather than keyframing each blink, I used a Text track where A is a very dim blink, and Z is a very bright blink. The blinks all have the same luminous decay. Every keyframe on the Text track triggers a new blink.

The expression to do this is actually a little program. (Exactly what some artists hate…)

Here’s the expression for controlling the Pip’s opacity. It’s in 3 parts: 1) Find the most recent Text track keyframe, 2) See what letter it was, from A to Z, and 3) Set the opacity, taking into account the brightness and how long it’s been decaying.

// find most recent key
var s = thisComp.layer("controlTrack").text.sourceText; // score layer
var n = s.numKeys;
var kValue = "A"; // default value
var kTime = 0;
for(var i = 1; i <= n; i++)
{
	var k = s.key(i);
	if(k.time <= time)
	{
		// only care if there's a char in our position.
		var a = k.value.charAt(0).toUpperCase();
		if(a >= "A" && a <= "Z")
		{
			kValue = a;
			kTime = k.time;
		}
	}
}

// now, how long ago was that?
var age = time - kTime;

// map character a-z to 0.0-1.0
kValue = kValue.charCodeAt(0);
kValue -= 65;
kValue = kValue / 25.0;

// decay appropriately
var result = kValue * Math.pow(0.3, age) * transform.opacity;

// done.
result

Why do this tricky control business with a text track, instead of just keyframing the flashes more directly? This way, the behavior is very well specified... and even more so for the next movie.

Controlling Five Pips With a Text Track

You can easily see what's going on here. Five characters control five pip's blinks.

The clever bit was to avoid pasting that monster expression from above into five different tracks. Instead, a single slider control track is driven from the text, and shows the first pip's blinking at time=0, the second pip's at time=300, the third's at time=600, and so on. The whole animation is 20 seconds, so there's plenty of room on the timeline for this.

Each pip's opacity is driven from the appropriate section of this slider channel:

pip0 opacity: transform.opacity * thisComp.layer("controlTrack").effect("scoreReader")("Slider").valueAtTime(time + 0*300)

pip1 opacity: transform.opacity * thisComp.layer("controlTrack").effect("scoreReader")("Slider").valueAtTime(time + 1*300)

pip2 opacity: transform.opacity * thisComp.layer("controlTrack").effect("scoreReader")("Slider").valueAtTime(time + 2*300)

... and so on.

So, why pile this cleverness atop an already tricky expression? Because with an expression that tricky, anything is better than duplicating five times across different tracks!

Here's the expression, which extracts brightness from the text track, for each position, at times separated by 300 seconds.

// Allow different sections of this track to extract the brightness for each pip.
// we divide it up into 5 minute segments (300 seconds). To find out your brightness
// at a particular time, examine *this* track at time + 300 * pipNumber.
//
// This is an alternative to duplicating the rather ornate expression into each pip, at
// the expense, of course, of complexity.
//

var segmentDuration = 300;
var segmentIndex = Math.floor(time / segmentDuration);
var segmentTime = time - segmentIndex * segmentDuration + .01; // local time... plus 1/100 for roundoff

// find most recent key
var s = thisComp.layer("controlTrack").text.sourceText; // score layer
var n = s.numKeys;
var kValue = "A"; // default value
var kTime = 0;
for(var i = 1; i <= n; i++)
{
	var k = s.key(i);
	if(k.time <= segmentTime)
	{
		// only care if there's a char in our position.
		var a = k.value.charAt(segmentIndex).toUpperCase();
		if(a >= "A" && a <= "Z")
		{
			kValue = a;
			kTime = k.time;
		}
	}
}

// now, how long ago was that?
var age = segmentTime - kTime;

// map score character a-z to 0.0-1.0
kValue = kValue.charCodeAt(0);
kValue -= 65;
kValue = kValue / 25.0;

// decay appropriately
var result = kValue * Math.pow(0.3, age);

result

And lastly, here's the self-contained After Effects project.

1 comments
Henry James // Wed 2010.01.13 08:298:29 am

enjoy

oh, i dont know. what do you think?


david van brink // Sat 2009.03.14 14:20 // {after effects pixel bender}

AE CS4: Pixel Bender Quick Notes

Here are some super short notes about using Pixel Bender inside of After Effects CS4. This post is just another dicing of the available info culled from the After Effects help, and the Pixel Bender Developer Guide.

But it’s the stuff that I most needed to get started, as well as a handy copy-and-paste source for the parameter control types.

This is about Pixel Bender in After Effects specifically.

Installing

Let’s start at the end. To use a Pixel Bender kernel in After Effects, just drop it in the Plug-Ins folder.

  • By default, it shows up in the Pixel Bender effects category.
  • It won’t show up until the next time you start After Effects
  • If it has any syntax errors, AE will warn you as it starts up, and reject the kernel.
  • Any changes to the kernel won’t show up until you quit and re-run After Effects. (Purge-all doesn’t seem to reload it…)
  • (And you can put it in a subfolder of Plug-Ins, of course, to keep things organized.)

Authoring

Source Image To work with After Effects, near as I can tell, it must take at least one image4 source. Even if the kernel is a pure generator, it needs to take an image input.

Multiple Source Images If the kernel takes more than one source image, the additional sources can be chosen in AE by a layer control. (Grand!)

Control Types By default, all parameters show up as sliders. But you can request a different control in the parameter description.

Example

Here’s an example of a Pixel Bender kernel that just generates a solid color. It has several parameter controls on it of the different supported types, and accepts a second layer as input. These are all ignored! But we can see how the controls are displayed, which is handy.

Here’s a screen capture, with the About box. (Trivial bug, the display name isn’t used in the About box…)

pbSolidColor.png

And here’s the code for the kernel, showing the various descriptors.

<languageVersion : 1.0;>

kernel solid_color
<namespace : "omino"; 
 vendor : "Omino PixelBlog 2009"; 
 version : 2; 
 description : "Generates a solid color.";
 displayname: "Solid Color";
 category: "omino"; >
{
 input image4 src;
 input image4 src2;
 output pixel4 dst;

 parameter float4 color 
  <defaultValue: float4(1,0,0,1); 
   aeDisplayName: "Color"; 
   aeUIControl: "aeColor";>;

 parameter float angle 
  <defaultValue: 45.0; 
   aeDisplayName: "Angle"; 
   aeUIControl: "aeAngle";>;

 parameter float2 point 
  <aePointRelativeDefaultValue: float2(0.5,0.5);
   aeDisplayName: "Point";
   aeUIControl: "aePoint";>;

 parameter int popup 
  <defaultValue: 3; 
   aePopupString:"Zero|One|Two|Three|Four"; 
   aeDisplayName: "Popup"; 
   aeUIControl: "aePopup";>;

    void evaluatePixel()
    {
        dst = color;
    }
}

Onward

With this amount of flexibility, and the instant cross-platform nature of Pixel Bender kernels, the barriers to entry for effects development have been dropped to almost nothing. Great stuff!

oh, i dont know. what do you think?


david van brink // Fri 2009.03.13 22:15 // {after effects}

After Effects CS4: Ultrabrief First Impressions

Joy!

I finally have returned from several months away, back into the usual routine. My fresh copy of After Effects CS4 was waiting! (Thanks so much, you know who you are!)

Verrrry brief first impressions.

Darker, Darker

I love how each successive version is a bit darker, more mysterious looking. It’s just like Luke Skywalker, remember how in the first movie he’s wearing something like a beige judo gi, and by Jedi he’s all in black and getting rather professional? AE is following the same sequence here.

But seriously, I like it.

(How long til UI-fashion flips back around to rose-petal-white and no visible edges? Maybe when e-paper starts to be the dominant output format. Bring on the new colors for 2020. Tufte said it would be like this.)

Pixel Bender

It’s so simple, just drop your .pbk files into the Plug-Ins folder and they show up in the Effects & Presets list, in the Pixel Bender category. Love it. More to come on this topic.

Still, first impressions: need a way to influence the parameter control rendering in the UI, to get grouping, and point and color controls.

UPDATE Jeff at Redefinery corrects me again. Pixel Bender filters can define the control type for each parameter, like this (excerpted from the latest pixel bender online help):

parameter float blend_with_original
<
  minValue: 0.0;
  maxValue: 100.0;
  defaultValue: 0.0;
  description: "Amount to blend with original input"; //comment only, ignored in AE
  aeDisplayName: "Blend Factor"; //AE-specific metadata
  aeUIControl: "aePercentSlider"; //AE-specific metadata
>;

Legal values for aeUIControl include aeAngle, aePercentSlider, aePoint, aeColor, and a couple others.

Online Help

Hate it. I do know After Effects pretty well… but also, I do flip to the manual not infrequently. I don’t miss the paper manual, not one bit. But I don’t much care for where CS4’s “After Effects Help…” takes you, some catch-all page of community goodies. The community pages are great, and I’m happy when Google lands me up there.

I just want the table of contents. And CS3’s help viewer seemed tighter and snappier.

UPDATE I see this has been fixed in 9.0.1! Help takes you to the contents page.

A Mysterious ASIO Driver

I never saw this before… but Cubase is offering After Effects 9.0 as an available ASIO driver. I have no idea what this means… More research is needed! Possibly a side effect of being able to preview AE out to an ASIO sound card.

Some Tiny Stuff

Todd K at Adobe posted a pretty comprehensive list of CS3->CS4 changes at http://blogs.adobe.com/toddkopriva/2008/09/an_unordered_approximately_com.html. Many of them are small… but cumulatively it’s good stuff.

Here’s one that really, well, really does make a difference. If your view is scaled to 25%, then the resolution is automatically dropped by the same amount.

(You can imagine the deep philosophical discussions on whether that’s the right thing to do… “But when you scale back up, your cache is gone!” But, praise Darwin, these things have to be tried, and by God, we all of us irrevocably ascend towards perfection.)

Overall

So, overall, After Effects 9.0 aka CS4 seems to be an evolutionary step.

As a relatively light recreational user, many of the subtler workflow changes are outside my domain. I don’t have a render farm, nor major pipeline and multi-tool integration issues.

But on the Eye Candy side… I dare say we can still anticipate some startling Pixel Bender innovations over time, enabled by AE9.

5 comments
Todd Kopriva // Sat 2009.03.14 00:1312:13 am

We’re glad that you like it so far.

In case you missed it, I posted on my blog a nearly complete list of all of the new and changed features from After Effects CS3 to After Effects CS4:

http://blogs.adobe.com/toddkopriva/2008/09/an_unordered_approximately_com.html

david van brink // Sat 2009.03.14 07:357:35 am

Thanks Todd! I’ve updated the post a little (and rereading The List reminded me of one more tiny, but quite useful, CS4 feature).

Jeff Almasol // Sat 2009.03.14 10:5310:53 am

Pixel Bender parameters can be represented as point, color, angle, popup, and percent slider controls in AE using AE-specific parameter metadata; sorry, no grouping control at this time. You can also specify a custom effect name and effect category for your kernel or graph.

The expanded documentation available with the latest Adobe Labs release of the Pixel Bender Toolkit (at http://labs.adobe.com/downloads/pixelbender.html) has the details. Choose Help > Pixel Bender Developer Guide from within the toolkit, and check out the “Developing for After Effects” section.

david van brink // Sat 2009.03.14 12:4812:48 pm

Davros say: EXCelllennt. Thanks for the pointer. Rolled in a note to the entry about it. This is grand.

stefanobeck // Fri 2009.07.24 13:411:41 pm

Hi, i have my blog for aE tutorial in italian language and you blog is very interesting! Thx

oh, i dont know. what do you think?



Deprecated: Function the_block_template_skip_link is deprecated since version 6.4.0! Use wp_enqueue_block_template_skip_link() instead. in /home/polyomino/omino.com/pixelblog/wp-includes/functions.php on line 6114

0.0308s
(c) 2003-2023 omino.com / contact poly@omino.com