I’m often trying to find the magnitude of something, regardless of sign. Commonly done for things like normals or velocity or distance. You would expect there to be a built in tool for that sort of thing, but there isn’t.
Previously, I did it with a CT or a Fuse operating on a per-pixel basis. An f.Color.rgb = abs(f.Color.rgb) sort of thing, which is pretty slow in Fusion as a CT or Fuse, but is plenty fast in Cg. More on that later.
Today I had an idea on how to do it with a matrix. The basic idea is to scale the the image by .5, and by -.5 and find the difference of the two. So |x| = (.5*x)-(-.5*x)
This method is much faster. The resulting Fuse runs about 40% faster than a CT, and several times faster than the old Fuse I had made which operated pixel by pixel. Unfortunately, ROI isn’t supported yet for Fuses, so if you have a tiny ROI, the CT or the CMx’s will both run faster. EDIT: ROIDS can be supported in Fuses… I’ll need to add it to the Fuses I’ve posted so far. Stay tuned…
So here’s the Fuse, a Cg ViewShader that lets you view the absolute value in a Viewer, and an example comp showing the CT, Fuse, and CMx methods, as well as the ViewShader.
Download Absolute Value Viewshader 1.01![]()
Download Example Comp (Absolute Fuse) A01![]()
It would be interesting to see if the disparity between the speeds of processing the matrix vs per-pixel goes away when you compile a c++ plugin…
2 Comments »





