Kevin Goldsmith

June 25, 2008

MAX NA Experience launched, cool Pixel Bender sessions!

The MAX Experience website has launched, you can now get the list of sessions and schedule.

I was really excited to see a couple of Pixel Bender sessions being hosted by folks in the community...

More…

June 01, 2008

Talking to the Seattle Flash User's Group this month

On Tuesday, June 17th at 7pm, I'll be talking to the Flash User's Group in Seattle about Pixel Bender. The details are on their site.

May 23, 2008

Using Pixel Bender in Flash Player 10

Lee Brimelow has posted a code snippet to show you how to load Pixel Bender filters in your Flash projects at runtime. I expect a zillion fun Flash-based image and video processing apps to spring from this...

Tinic Uro has posted a really nice backgrounder on how Pixel Bender works in the Flash Player and how it is different from running in the Pixel Bender Toolkit. A must read if you want to understand the nitty gritty.

If you've got the Astro beta, you should check out the new version of the TubeView filter that Petri Leskinen wrote. This has been one of my favorite filters to demo with because of all the fun James Bond-ish possibilities...

May 21, 2008

the formatter in action!

I forgot to post the example! Here is the Fade To History kernel I posted yesterday, run through the formatter:

<languageVersion1.0;>

kernel FadeToHistory
<   namespace : "Kevin's Tutorial Filters";
    vendor : "Kevin's Filters, Inc";
    version : 1;
    description : "Fade from color to B&W to sepia";
>
{
    parameter float crossfade
    < minValue0.0;
      maxValue2.0;
      defaultValue0.0;
    >;
    const float3 lumMult = float3(0.30.590.11);
    
    input image4 src;
    output pixel4 dst;
    
    void
    evaluatePixel()
    {
        dst = sampleNearest(src,outCoord());
        float luminance = dot(dst.rgb, lumMult);
        float3 sepia = float3( dst.r * 0.4 +
                               dst.g * 0.769 +
                               dst.b * 0.189,
                               dst.r * 0.349 +
                               dst.g * 0.686 +
                               dst.b * 0.168,
                               dst.r * 0.272 +
                               dst.g * 0.534 +
                               dst.b * 0.131 );
        
        float3 startMix = dst.rgb;
        float3 endMix = float3(luminance);
        float mixValue = crossfade;
        if ( crossfade > 1.0 )
        {
            // normalize mix value to the range of 0-1
            mixValue -= 1.0;
            startMix = float3(luminance);
            endMix = sepia;
        }
        dst.rgb = mix(startMix, endMix, mixValue);
    }
}

Pixel Bender HTML formatter

While the PRE tag is ok for displaying code, it always bores me. I like my code to look more interesting. When I was posting the code yesterday, I was asking around the company for formatting tips and I realized that it might be fun to do my own formatter, so I fired up Flex, read up on the String class and created the tool below. Usage is pretty simple, paste your code into the upper text box, hit the "Convert To HTML" button, see the text appear in the second text box and then hit the "Copy HTML to clipboard" button and paste into your blog or web page as raw (and very ugly) HTML code.

(sorry for the size, narrow blog templates)


May 20, 2008

the return of the Fade into history

I was prepping the Fade Into History filter that I had written as a tutorial here for the Pixel Bender Exchange. I realized how much the language had changed since I first wrote it. So in addition to having it on the exchange, I thought I'd post the updated source here, so that you could have it. Also, I'm including the .pbj version (Pixel Bender Bytecode for Flash) in case you are looking for something to play with in the Pixel Bender Demo for Astro. Here's the source:
<languageVersion: 1.0;>

kernel FadeToHistory
< namespace : "Kevin's Tutorial Filters"; vendor : "Kevin's Filters, Inc"; version : 1; description : "Fade from color to B&W to sepia"; > { parameter float crossfade < minValue: 0.0; maxValue: 2.0; defaultValue: 0.0; >; const float3 lumMult = float3(0.3, 0.59, 0.11); input image4 src; output pixel4 dst; void evaluatePixel() { dst = sampleNearest(src,outCoord()); float luminance = dot(dst.rgb, lumMult); float3 sepia = float3( dst.r * 0.4 + dst.g * 0.769 + dst.b * 0.189, dst.r * 0.349 + dst.g * 0.686 + dst.b * 0.168, dst.r * 0.272 + dst.g * 0.534 + dst.b * 0.131 ); float3 startMix = dst.rgb; float3 endMix = float3(luminance); float mixValue = crossfade; if ( crossfade > 1.0 ) { // normalize mix value to the range of 0-1 mixValue -= 1.0; startMix = float3(luminance); endMix = sepia; } dst.rgb = mix(startMix, endMix, mixValue); } }
Download the pbj file

May 16, 2008

The Pixel Bender Exchange is now live!

Waay easier to post on than the Pixel Bender gallery wiki page...

We've primed the pump with some of the filters from the install of the toolkit and we'll add some more from the team soon.

http://www.adobe.com/cfusion/exchange/index.cfm?event=productHome&exc=26

or

http://www.adobe.com/go/pixelbender/

May 14, 2008

Astro Beta and new Pixel Bender Toolkit now available!

Big news tonight!

Finally, you don't have to just hear about Pixel Bender Filters and play with them in the toolkit, now you can actually try some of them out! The beta of Astro is now available. Check out the demos to see Pixel Bender Shaders running on images, vectors and video in real time!

Also, today we released a new Pixel Bender Toolkit on our new Pixel Bender wiki pages. What is new in this release? The new name, obviously, but also some bug fixes and some new features (check out the preferences dialog box!)

More info soon!

May 05, 2008

Hydra is now Pixel Bender!

Hydra is an awesome name for a language like the one we created. At the very beginning, Jonathan Shekter came up with it as a code name for this cool language that could run on different kinds of hardware efficiently. The problem is that it's a great name for any kind of technology that does multiple things, so it is pretty popular. We didn't want to confuse folks, so we worked with the Adobe branding team to come up with a new name that we could use moving forward. That name is Pixel Bender (tm).

So from now on, if you hear me say "hydra" in a 1:1 conversation (sorry, conference talks are out), you can call me on it and I'll give you a cool limited-edition hydra pin (while supplies last).

Along with the name change of the language, we're also changing the name of the "AIF Toolkit" to be the "Pixel Bender Toolkit." The file extensions will also change. We should be posting a new version of the toolkit soon with these changes.

very obscure reference/fact
It is only partially true that the name Pixel Bender won out over another internal favorite "Shektran" because I was hoping to finagle a visit to Rough Draft Studios or The Curiosity Company (joke).

April 11, 2008

AIF Toolkit Preview Release #2 available now!

I've been promising it for a while, but it is finally available for download. The second release of the AIF Toolkit with a lot of changes under the hood (many requested by you!)

A partial list:


  • Supports both GPU and CPU execution of Hydra filters. A filter will automatically run on the CPU if your graphics card is not supported by the application.

  • Supports user preferences and their persistence across application launches.

    • Flash Warnings and Errors - with this preference checked, Hydra code will be checked for validity against the subset of Hydra that Flash Player supports.

    • Render on Idle - this setting determines if the toolkit should try to render as often as possible. You may choose to turn off this setting to conserve power when running using battery power on a laptop.


  • Supports exporting a Hydra filter as Hydra Byte Code for future use with Astro.

  • There have been some changes and additions to the Hydra language.

    • Conditionals are supported in Flash-compatible Hydra - you are now able to use 'if' statements in your Hydra for Flash programs.

    • A languageVersion statement is now compulsory in Hydra files

    • Images are now parameters - images are now available by name in the kernel scope instead of the evaluatePixel scope. That means that they can be used more easily in the per-frame functions like evaluateDependents and the region reasoning functions. In addition, the function signatures for the needed and changed functions have been simplified. The input_index has been replaced by an imageRef and the domain of definition array is no longer passed in. There is a new built-in function – "dod" – that returns the domain of definition of an image.

    • There are two new built-in functions in Hydra to support pixel aspect ratio (PAR): float2 pixelSize(image) float pixelAspectRatio(image) You can use these functions anywhere inside the kernel, as long as the image parameters to both functions are the declared global input or output image variables.

    There are a ton more changes big and small. This is still a preview release. There are more changes to come will be in a following preview release. Please try it out and let us know if you find any problems or have more suggestions.

February 22, 2008

New Adobe Hydra Blog and update

Brian Ronan, a developer on the AIF team has just started a new blog specifically on developing Hydra kernels. Hopefully, he'll make up some of my ample posting slack...

Some news, the long-promised technology preview 2 of the AIF Toolkit is nearing completion. Just ironing out the last few minor bugs and testing the installer now. This release will feature the final syntax of the Hydra 1.0 kernel language. Since my last post we've added a couple things to the language to make it more capable for advanced video and image application usage. I'll post more details and some tips and tricks when the new version is posted.

Stay tuned because we still have some really large surprises around Hydra to announce between now and the official release...

January 15, 2008

What if...

Conditionals were back in for Hydra in Astro?

Well... They Are!

You'll now be able to use if statements in your Hydra for Flash programs. The new toolkit will have that removed as an error. Thank Tinic and Bob Archer for stepping up to get this done for CS4.

This is one of the reasons why I've delayed releasing the Toolkit... I may have another surprise before the second preview release appears on labs.

Watch this space for more details...

January 10, 2008

Hey, where is the new AIF Toolkit?

So, I was hoping to get out a new version of the toolkit before the end of last year. One that would support all platforms. The good news is that it is pretty much done. I decided to wait on a couple features that the team was finishing up and that pushed it out a bit. I'm doing the final cleanup and the team is fixing a couple bugs that we found and then I'll get it out ASAP. So not too much longer now... Sorry for the delay.

December 11, 2007

Hydra course at FITC Amsterdam

I thought I'd give a quick plug to Joa Ebert who is teaching a course entitled Chop The Hydra at FITC Amsterdam in February. If you're attending FITC, you should definitely check it out.

November 15, 2007

Some hydra changes for the next AIF Toolkit release

I've been working on the next version of the toolkit and I'm hoping it will make a bunch of you hydra developers happy. I've rolled in a lot of feature requests from the forums and the big news is that it should work on ALL supported platforms (OS 10.4.10+, XP, Vista) REGARDLESS OF YOUR VIDEO CARD. We're still tuning CPU performance, so if you don't have a supported graphics card, the performance won't be stellar, but it will let you start playing with Hydra. I'm hoping to have it out to you all some time next month.

We have made a language change to Hydra that will be in this next release. It is small, but it will break any existing filters. Sorry about that, but at the moment, this is a technology preview after all. I'll include a script we wrote that will fix up your hydra files automagically. The change is that images are now parameters. This is a small change, but it has a big effect. Images will now be available by name in kernel scope instead of EvaluatePixel scope and that means that they can be used in per-frame functions like EvaluateDependents and the region reasoning functions more simply.

Here's an example of the old and new syntax:


kernel OldSyntax
{
parameter float k;

void evaluatePixel(
in image4 foreground,
in image4 background,
out pixel4 result)
{
pixel4 fp = sample( foreground, outCoord() );
pixel4 bp = sample( background, outCoord() );

result = mix( fp, bp, k );
}

region needed(
region output_region,
int input_index,
region input_DOD[])
{
if (input_index == imageIndex( background ))
return input_DOD[ imageIndex( background ) ];
else
return output_region;
}
}

kernel NewSyntax
{
parameter float k;
input image4 foreground;
input image4 background;
output pixel4 result;

void evaluatePixel()
{
pixel4 fp = sample( foreground, tCoord() );
pixel4 bp = sample( background, tCoord() );

result = mix( fp, bp, k );
}

region needed(
region output_region,
imageRef input_image)
{
if( input_image == background ) )
return dod( background );
else
return output_region;
}
}

As always, we always want to hear what you think. Either reply here or on the forum.

[Updated 11/19/07 to fix a typo made under the influence of too much caffeine]

09:38 AM | Permalink | Comments [1] | No Trackbacks

October 31, 2007

Cool hydra filters

So, I've been meaning to post about some of the cool hydra filters that folks have been posting to their blogs and the Hydra Filter Gallery. I've been pretty busy working on the next release of the AIF Toolkit, but the whole team has been really digging some of the cool filters that everyone has been posting. Here are some of my favorites so far (in no particular order)... This is just a subset of what has been posted to the gallery...

Double Plasma by Martin 'Cifko' Stefcek - This is just so wonderfully trippy.
Fuzz by Tyler Glaiel - This would be the start of a cool cross-disolve filter.
Colored Spotlight by Andy Zupko - I like this one because it is simple, but very effective.
Spherize by Joa Ebert - The first non-Adobe hydra developer contribution is something pretty cool: a simple, yet powerful spherize filter. Joa has posted a ton of filters, I just had to pick one to be fair.
AIF's own Mangler mashed up two of Joa's filters: Technodots and Twirl and came up with this beauty: TechoTwirl
http://www.quasimondo.com/hydra/sineNoise1.jpg SineNoise: The lack of a built-in noise or random function (currently) in Hydra prompted Mario Klingerman to see what he could do to create noise. Very cool. He's also posted some great gradient generators in the gallery.
Polar Coordinates: This is another fun kernel to play with. by wf
Zeh has created an adjustable threshhold filter that is pretty cool and yet pretty simple and easy to understand.
The Vortex filter by Jan is also amazingly trippy, this thing looks awesome animated.

 

In a future post, I'll link to some of the stuff that the hydra developers have been posting on their blogs.

 

What are your favorite filters? Also, what kinds of things would you like me to cover in future posts? Let me know in the comments or on the forum.