// v3.5 // // wvwwvwvww // \ / // \______/ // // Joe's Filters // for Final Cut Pro // (C) 2002 Joe Maller // http://www.joesfilters.com // http://www.fxscriptreference.org filter "Joe's Soft Gradients"; group "Joe's Soft Stuff"; input BlurAmount, "Blur Radius", Slider, 10, 0, 250 ramp 85; input GradAngle, "Direction", angle, 0, -360, 360 detent -360, -270, -180, -90, 0, 90, 180, 270, 360; input GradWidth, "Width", slider, 100, 0, 200; input FadeLength, "Fade Length", slider, 100, 0, 500; input GradOffset, "Offset", slider, 0, -100, 100 label "%"; input GaussianCheck, "Gaussian", checkbox, 0; input SpotInvert, "Invert", checkbox, 0; input ApplyAs, "Mode", Popup, 1, "Normal", "Fade Only", "Multiply", "Screen", "Overlay", "Lighten", "Darken", "Add", "Subtract", "Difference"; input Opacity, "Opacity", slider, 100, 0, 100; input title, "Joe's Filters", Label,""; input title1, "www.joesfilters.com", Label,""; ProducesAlpha code exposedbackground=1 float ramplength; point pointer, pointer2, aspectpointer; float zoomfactor, w, h; dimensionsOf(Dest, w, h); image xbuffer[w][h]; zoomfactor = w/720 GradAngle = (GradAngle + 360 + 180) mod 360; pointer.x = w/2 * sin(360 - GradAngle); pointer.y = h/2 * cos(360 - GradAngle); aspectpointer = {pointer.x, pointer.y * aspectOf(dest)} pointer2.x = aspectpointer.x * -1; pointer2.y = aspectpointer.y * -1; ramplength = DistTo(aspectpointer, pointer2) if GradOffset != 0 pointer.x += GradOffset/100 * sin(360 - GradAngle) * Ramplength; pointer.y += GradOffset/100 * cos(360 - GradAngle) * Ramplength / aspectOf(dest)); end if pointer.x += GradWidth * sin(360 - GradAngle) * zoomfactor * 1.2; pointer.y += GradWidth * cos(360 - GradAngle) * zoomfactor * 1.2 / aspectOf(dest); Blur(src1, xbuffer, BlurAmount * zoomfactor, aspectOf(dest)); highLight(dest, pointer, (GradAngle +90), GradWidth * zoomfactor, FadeLength/100 * ramplength, 1, GaussianCheck, kBlack, kWhite, aspectof(dest)); ChannelCopy(dest, xbuffer, kred, knone, knone, knone) if SpotInvert == 0; InvertChannel(xbuffer, xbuffer, 1, 0, 0, 0); end if if ApplyAs == 1; Matte(xbuffer, src1, dest, opacity/100, kalpha); end if if ApplyAs == 2; ChannelFill(dest, 0, 0, 0, 0); ChannelMultiply(xbuffer, dest, opacity/100, 1, 1, 1); end if if ApplyAs == 3; Multiply(src1, xbuffer, dest, opacity/100, kalpha); end if if ApplyAs == 4; Screen(src1, xbuffer, dest, opacity/100, kalpha); end if if ApplyAs == 5; Overlay(src1, xbuffer, dest, opacity/100, kalpha); end if if ApplyAs == 6; Lighten(src1, xbuffer, dest, opacity/100, kalpha); end if if ApplyAs == 7; Darken(src1, xbuffer, dest, opacity/100, kalpha); end if if ApplyAs == 8; add(src1, xbuffer, dest, opacity/100, kalpha); end if if ApplyAs == 9; subtract(src1, xbuffer, dest, opacity/100, kalpha); end if if ApplyAs == 10; Difference(src1, xbuffer, dest, kalpha); ChannelCopy(src1, dest, kalpha, knone, knone, knone); Matte(dest, src1, dest, opacity/100, knone); end if