TheVisualMD.com Research Blog
Lately we’ve been working with Unity to produce interactive visualizations of 3D voxel data. We’re developing a pipeline that can quickly render a dataset as a rotational image stack and a front-end application that displays it as an interactive turntable. Unity’s ability to compile for smartphones, websites and standalone platforms has us dreaming up all kinds of uses for this technology.
Very simple fuse, this one just fills the canvas with a color.
New shaders include ColorMatrixTransform, Unit Vector, Dot Product, Half Lambert, Parallax, and NPR Prepass which returns various lighting dot products for use in making NPR effects like the Gooch shader above.
Smoothing an image without losing all the edges, that’s what the Bilateral Filter is made for. It basically performs a Gaussian blur not only in the image dimensions, but also on the color intensities. Therefore it will smooth homogeneous areas while at the same time respecting the image’s edges. The following example shows the effect very well.
The current version is for Fusion 6.1 in 64 bit only. It provides the standard bilateral filter as well as the cross bilateral filter for grayscale and color images. DoD and RoI can be used to limit processing to a desired section of the image. Since the exact filter is very slow when applying large filter kernels, calculation in OpenCL with an optional approximation method is implemented as well. First tests on supported graphic cards show a speed up by a factor of 3-5 for OpenCL with default parameters. On gray scale images with large filter sizes, the approximation method can be more than a hundred times faster.
Here’s is a plugin to tile multiple frames into a single output image. We’re calling it “Quilt”. The plugin should be downloaded and copied into one of the fusion plugin directories. We’ve uploaded both the 32 and 64 bit versions for windows.
The plugin provides options to change the start/end frame, the size of the output image and filter to use when the input is re-sized. Also available are provisions to pad the output, trim it and an option to preserve/alter the input’s aspect.
The tool should tile all the input frames into the output in an “optimal” layout. It should be useful when you want a overall view of all the frames you’re interested in.
Strange one, this… I wrote a Fuse earlier this year that did nothing but “else”. If the FG is there, use it, else use the BG. So it’s a bit like using a DX for a "graceful failure", but there’s no UI to mess up, and most importantly, it preserves DoD, something DX doesn’t do.
So what’s odd? It didn’t work. There was some sort of problem with it that I couldn’t fix. The code was really simple, but for some reason, it didn’t work. But now, four builds of Fusion later, it seems to work just fine. So I’m going to post it, and if you happen to find out that it still fails for some reason, go ahead and let me know.
Finally took the plunge and converted one of our icky Lua Fuses into shiny OpenCL.
It’s a very simple function, normalizing a vector and returning that in the RGB while putting the original length into the A. In the case of the 4D normalize, you don’t get the length. I have no idea what took me so long to get around to this, it only took an hour or two to flesh out, but I got hung up by the fact that my video card, a Quadro 5000, does not, at this time, have OpenCL drivers that support float3. Float4? Fine. Float2? No problem. Float3? Fail. So I went ahead and implemented the 3D normalize manually, and used the fast_normalize OpenCL function to make a 4D normalize.
Stefan Ihringer pointed out something on the VFXPedia that finally got me to put together a Fuse I’ve been putting off. Since Joe Laffey never got around to updating his plugins, it makes sense to go ahead and toss this up.
Just a simple RGB/A or RGB*A, plus a “Solid” and “Clear” so you don’t have to use the annoying Bol or Mat as much. Nothing groundbreaking, but it should save a few clicks per day.
Not multum in parvo, but Maximum (or Minimum) Intensity Projection.
This simple Fuse just takes a range over time and generates an image with the highest or lowest pixels. Great for normalizing. It does so for each channel, so it can be useful for color normalization too, or for finding the bounding box of a position pass. It can also be useful for making “summary” thumbnails of footage.
A variation on the ColorToMono fuse, ColorSplitter outputs multiple scalars from an image. Can trivially be modified to output vectors too. Mostly designed to reduce clutter in a flow, so you don’t have a bunch of needless Bol’s and fMon's. Useful when you are loading an image with many packed data channels.