I’ve been mucking about with others’ Hydra examples since I saw the movies of it at max. Basically its a language based on C designed to perform image processing tasks. Eventually Hydra will be implemented into after effects, photoshop and a subset of the specs into the flash player.
Here are the results of my experiments:
—————————————————————
1. MASK
The following code takes two images, gets the grayscale of the mask and then the alpha of the base image to the grayscale.
kernel mask{void evaluatePixel(in image4 src,in image4 mask, out pixel4 dst)
{
float4 maskImage = sampleNearest(mask, outCoord());
float4 outputImage = sampleNearest(src, outCoord());
float grayscale = (maskImage.r + maskImage.g + maskImage.b) / 3.0;
outputImage.a = grayscale;
dst = outputImage;
}
}
The following two input images (the hello as the mask)
Produce:
Grey is the default background colour so the image is transparent over that.
———————————————————–
2: WIGGLE
I also created a wiggle filter
kernel morph
{parameter float xangle<
minValue: 0.0;
maxValue:10.0;
defaultValue:5.0;
>;
parameter float yangle<
minValue: 0.0;
maxValue:10.0;
defaultValue:0.0;
>;
void evaluatePixel(in image4 src, out pixel4 dst)
{
float2 coord = outCoord();
float xcoord = coord.x - sin(coord.y)*xangle;
float ycoord = coord.y - sin(coord.x)*yangle;
dst = sampleNearest(src,float2(xcoord,ycoord));
}
}
This filter takes inputs of the wiggle size of the x and y and produces the following examples:
Wiggle on both the x and the y
a wiggle just on the x
—————————————————————–
3. FLIP
And an flip filter. In the documentation there is a referenceFrame parameter to get the bounds of the input image. However after experimenting with it I couldn’t get it to work. I posted on the adobe forums and found out that it has not been implemented yet, so having a parameter with the width will have to do for now.
kernel flip
parameter float width< minValue: 100.0;
maxValue: 200.0;
defaultValue:500.0;
description: "Width of image";
>;
void evaluatePixel(in image4 src, out pixel4 dst)
{
float2 coord = outCoord();
float2 newcoord = float2(width-coord.x,coord.y);
dst = sampleNearest(src,newcoord);
}
}