Shake plug-ins
Here you'll find my custom developed Shake plugins. If you find them useful and do use them in a sharp production environment I would be happy to know. Send me an e-mail!


Fade Transform v1.0.1 and ITransform v1.0.0 (macro)
This is a rather different plugin since it's changing what other nodes upstream have done. Internally it's just a simple Move4x4 matrix transformation, but what makes it special is that it takes no other input than what nodes to get the transformation from and how much you want to change it. Basically it takes the whole concatenated transformation above itself and with the user parameter "value" fades or multiplies it to everything. This can do everything in between zeroing out the transformation altogether (value: 0) to applying all of it which of course doesn't change anything at all (value: 1). The power of it is the ability to animate the value over time, for example to fade in the contribution of a stabilize node or similar. It does concatenate so you never filter more than once for a whole concatenation chain. You can also control how many nodes from the transformation chain above you want to affect (i.e. which of the nodes above does contribute to the Fadetransform's transformation). You have the choice of saying "all nodes above" or specifying a specific number of nodes. What you have to know is that it always terminates when it comes to another Fadetransform node.

This release (v1.0.1) also includes a macro called "ITransform" which basically is built using FadeTransform in an "IBlur-style" manner. The input image is sliced apart and combined together using different amounts of transformations from the concatenated transformation chain upstream. You also have the ability to define the low and high amounts of transformation which is applied in regard to the black, grey and white from the second input image. If you set it to enough slices (maybe even above 100!) it gets quite slow but often yields quite a smooth image.
One possible use of this quite powerful macro is a sort of warp effect. Imagine you want to move a section of an image (maybe stabilize it), but have the falloff of that section gradually transformed less and less until it gets zero a bit further out. All this can be done by just having the correct transformation (could be one single node or a whole concatenated chain) feeding into the first input of a "dw_ITransform" node. The second input takes an image of where to apply the transformation, in this case probably a RotoShape around the section with an easy to control falloff. Chuck in a blur node for some more control of the range of the warp/strechy region.
Personal note: I have thought about implementing this "properly" with a Warp-derived plugin as well to get rid of the steppy artifacts, but should really use the time to finally get into Nuke plugin development instead! ;)

Changes in v1.0.1
Fixing so that the overlays properly get updated even if the image is not evaluated. This makes the plugin work properly if you work in "manual" update mode.

Download:
FadeTransform v1.0.1 and ITransform v1.0.0
- Mac OSX (Universal Binary), Shake 4.1
FadeTransform v1.0.1 and ITransform v1.0.0
- Linux (Compiled on Fedora Core 7), Shake 4.x


Transform Coordinates v1.0.0
This plugin transforms a coordinate pair (x & y) with the matrix retrieved from the concatenation chain directly upstreams. It doesn't do this live because of Shake's internal dependency of the values before and after the current time to correctly calculate motion blur. Because of this the parameter curves needs to be baked much like the PixelAnalyzer only faster because no image data is needed only upstream parameter values.
This could be useful in a variety of situations. A simple example would be that you have tracked and composited together some image material that later gets cornerpined to a TV set in the shot. Suppose you later want to have that tracker-position earlier created but now actually in the shot's position on the TV screen material. Instead of painstakingly painting a dot and temporarily use that to retrack it in the shot's final position, and more importantly therefore loose a lot of accuracy, you use this plugin to transform the tracking data to what it should be exactly! The only thing you have to do is place the node directly under the concatenated transformation chain, give it the coordinates to transform (click "LinkTracker" to easily hook up to a existing tracker in the script), give it a time range and hit the "BakeTransformation" button.

Download:
TransformCoordinates v1.0.0
- Mac OSX (Universal Binary), Shake 4.1
TransformCoordinates v1.0.0
- Linux (Compiled on Fedora Core 7), Shake 4.x


MultiStat v1.0.1
MultiStat is a growing input node which does statistical calculations on the same pixel positions using all the input images. You can do median (per channel), luminance based median, average, minimum and maximum. If you feed the node with time offsets of the same sequence you can therefore do temporal median filtering which is the main purpose of the plugin. You can also set the loCut and hiCut to take away values at the low values (darks) or the high values (whites) and use the rest of the values in between to calculate from. For example you can feed it with 7 images, cut away the darkest and the two brightest and then do an average on the rest of the 4 values (all done per pixel from all the inputs). The last parameter "threshold" is for setting what pixels are changed. If the new calculated pixel value for a certain position differ more than the threshold value from the original pixel value, it's changed otherwise the original pixel value remains (this threshold is working exactly as a normal spatial median filter threshold works). Worth to mention is that the plugin conforms all inputs to the first one's properties, i.e. DOD, bit depth, resolution etc.
Mouse over the example image on the left to see a little example. Below is an example QuickTime of the filter in action using a 7 frame section of a sequence. The original footage is from the Hellboy II trailer, copyright Universal Studios 2007.



Changes in v1.0.1
Fixing so that the plugin works properly and as expected in proxy mode.

Download:
MultiStat v1.0.1 - Mac OSX (Universal Binary), Shake 4.1
MultiStat v1.0.1 - Linux (Compiled on Fedora Core 7), Shake 4.x



Screen Space Ambient Occlusion v1.0.0
This plugin calculates a screen space based 2D ambient occlusion. I been thinking now and again over a couple of years that it should be possible to calculate some kind of faked ambient occlusion from just a depth pass and a normals pass. Then I got this paper from SIGGRAPH 2008 that does nearly that in graphics hardware. Their method is a bit more complex and yields a more accurate result because they still have access to the 3D scene. My method is a rewritten and altered 2D version of the one in the paper, but does have the same basic calculation structure. If you are interested in the maths involved, look at pages 13 to 20 in the PDF above.

This plugin calculates a kind of ambient occlusion using only a depth pass. It does this inside a macro including three plugins. The first one calculates a normals pass from the depth pass, so if you have a correct normals pass render you get better results by feeding that into the node as well. It then does a local neighboring occlusion sampling by comparing the depth of the surrounding samples. The samples are only used if they are on a surface that doesn't differ in normal angle from the pixel currectly being calculated. This is to prevent self occlusion on flat surfaces. The result naturally becomes quite noisy, and is therefore post blurred using a special normals aware guassian blur that doesn't blur over object edges or sharp features.
To sum up this plugin package is a macro that includes three plugins;
depth -> normals
depth&normals -> noisy SSAO
noisy SSAO -> smooth SSAO

The top image on the left shows a final result ambient occlusion. If you put the mouse pointer above it you see the source depth map that was used in the calculation. The bottom image on the left shows the normal map that can be calculated with this plugin package as well. To see a screenshot of the parameters and a description of what they do, click here.

Download:
Occlusion v1.0.0 - Mac OSX (Universal Binary), Shake 4.1
Occlusion v1.0.0 - Linux (Compiled on Fedora Core 7), Shake 4.x

Occlusion Example - Example image sequences and shake script




Wand Keyer v1.1.0
I came up with the idea of some kind of "magic wand" keyer for Shake sometime in late 2006 I believe. I was thinking to myself: "Why isn't there a keyer in Shake that 'grows' out from a picked coordinate in a continuous way like the Magic Wand in Photoshop". This plugin is exactly that, and can be very, very useful in a lot of different situations! I don't like rotoscoping, and I always try to come up with procedural approaches to skip the tedious process. This plugin is definitely a good way in the direction of not doing a lot of garbage rotoscoping. If you, for example, have a video footage of say a guy with five blue dots on a T-shirt and want to make one of them red. You probably then do a key on blue and garbage roto the dot out, do an Inside and you have your matte to color correct with. With my "Wand Keyer" you can now track the dot (using the regular Shake Tracker node), and easily link that to the Wand Keyer. Tweak the tolerance settings and you automatically got your matte!

Look at the examples to the left and put the mouse over the images. The first one is a regular key on white. The second is a continuous key on just the "W" used as a mask for a color warping node. The third is a continuous key on one of the sky stripes (only selecting the area in-between the electrical wires) used as a mask for a color warping node.

The Wand Keyer is a modified 3D-RGB keyer, and thanks goes to Steve Wright for describing how a basic one works in the brilliant book "Digital Compositing for Film and Video".

To see a screenshot of the parameters and a description of what they do, click here.

Changes in v1.1.0
Fixed some key errors that sometimes appeared near the top/bottom edges resulting in the first or the last block of scanlines to be inverted.
Added a feature so that you can bake down curves for the keyed pixel area amount and the picked color used for extracting the key.

Download:
Wand Keyer v1.1.0 - Mac OSX (Universal Binary), Shake 4.1
Wand Keyer v1.1.0 - Linux (Compiled on Fedora Core 7), Shake 4.x
Wand Keyer v1.0.0 - Mac OSX (Power PC only), Shake 4.x

Delete Keyframes v1.0.1
This plugin feature will appear at the bottom of the right click menu in the node tree viewer as "Delete keyframes". It pops up a simple dialog that let you choose if you want to delete "All keyframes" or just a "Specified time range". The latter is defined by a custom text field "Time range" that defaults to the script's global settings. You can also change the input parameter so it just deletes all keyframes without asking anything.

The best usage of this plugin is probably to delete shape keys of RotoShapes, which is the main reason why I wrote it. If you delete all shape keys of a RotoShape it becomes "frozen" and constant on the current active frame.

Changes in v1.0.1
Fixing so that "Delete Keyframes" works properly on Stabilize-nodes.

Download:
Delete Keyframes v1.0.1 - Mac OSX (Universal Binary), Shake 4.1
Delete Keyframes v1.0.1 - Linux (Compiled on FC7), Shake 4.1

Node Cloner v0.9.0
This node is very special and quite different from the rest of Shake's nodes. You define a shake script as the source and also which node you want. It then copy/clone that node live every time you hit the button "Apply", open the script or render it. With this tool you can for example keep a master grade in one script and then reference that node from all other scripts/shots you're working on. The same for RotoShapes that you want to use several times. Maybe someone is still rotoscoping but you need the shape now and do want it to update itself automatically. There is also a "time" parameter for instant retiming so you can timeshift animated curves and also retime them (in a similar way to using a "TimeX" node but built in).
Since I haven't been able to test it heavily enough I decided to leave it at version v0.9.0 for now. If you find any issues with it, please do report it.

Download:
Node Cloner v0.9.0 - Mac OSX (Universal Binary), Shake 4.1
Node Cloner v0.9.0 - Linux (Compiled on Fedora Core 7), Shake 4.1




Fourier & Inverse Fourier v1.0.0
This is a bundle of two plugins for doing Fast Fourier Transforms and Inverse Fast Fourier Transforms. If you're not familiar with FFTs it's probably best to read up a bit on the pages I link to below to better understand it's possible uses before starting to use the plugins. The Fourier plugin will create either a "real" part or an "imaginary" part depending on the "mode" parameter. It will also conform the output to float and resize it to be the nearest power of two square resolution since that is needed by the inverse algorithm. You will need both the real part and the imaginary part of the "fourier domain" to be able to convert back to the "spatial domain" again. The images on the left are from the top a standard color wheel, it's real part in the fourier domain and then it's imaginary part (all of them have been cropped to fit the page nicely though, and are actually in a square aspect ratio in Shake).

Related links:
Descriptive FFT page with lots of image examples
Another good FFT page with different image examples
FFT at Wikipedia
FFT Java Applet and an explanation of it's controls
FFTW have a good link listing

Download:
Fourier & InvFourier v1.0.0 - Mac OSX (Universal Binary), Shake 4.1
Fourier & InvFourier v1.0.0 - Linux (Compiled on FC7), Shake 4.1



Direction Fill v1.0.0
This is a filter plugin that fills each channel with the maximum pixel value it has encountered so far in a specified direction. You also have the option to hold new maximum values for a specified amount if pixels and then fade out according to your needs. The first example (on the left side) is a direction fill not using the "useHoldAndFade" option and thus fills all the way to the edges. The second example uses both "Hold" and "Fade" values and because they are different for each channel (R, G and B) the result is a color image. If you hoover the mouse pointer over one of the images you'll see the original image before the effect was applied.

Download:
Direction Fill v1.0.0 - Mac OSX (Universal Binary), Shake 4.1
Direction Fill v1.0.0 - Linux (Compiled on Fedora Core 7), Shake 4.1

Perlin Noise v1.0.1
I created this "Perlin Noise Generator" during the making of the Norwegian feature film "Free Jimmy" in the winter of 2005. Since then It's been used in a lot of sharp productions, for example "Peter & the Wolf" and also commercials for "The Carphone Warehouse" and "Plantagen" among others.

To see a screenshot of the parameters and a description of what they do, click here.

Examples:

Changes in v1.0.1
Fixed an old issue with the 8bit mode not yielding the same pattern as in 16bit or float. Should all be working as expected now.

Download:
Perlin Noise v1.0.1 - Mac OSX (Universal Binary), Shake 4.1
Perlin Noise v1.0.1 - Linux (Compiled on Fedora Core 7), Shake 4.x

GetFileIn v1.0.0
This plugin creates an entry in the right click menu in the node viewer that enables you to directly create matching FileIns from selected FileOuts. It checks what frames that are already rendered to disk and imports these. You also get them named, positioned and time shifted accordingly. Maybe not super necessary but it soon becomes a good time saving habit! :)

To see a screenshot of the menu, click here.

Download:
GetFileIn v1.0.0 - Mac OSX (Universal Binary), Shake 4.1
GetFileIn v1.0.0 - Linux (Compiled on Fedora Core 7), Shake 4.1

Shake development
Disclaimer: I can not guarantee that my stuff always will work correctly. Since I'm not selling anything I can't support it either. You're using everything here at you're own risk, and I can therefore not be held responsible for any faults or similiar that my plugins/macros might produce.