Re: Core Image in FxPlug example
Re: Core Image in FxPlug example
- Subject: Re: Core Image in FxPlug example
- From: Darrin Cardani <email@hidden>
- Date: Tue, 28 Apr 2009 12:16:30 -0700
It's not too inefficient. It reads the current pixel, the next pixel
to the right, and the next pixel below. It's 3 samples, which should
work relatively efficiently going all the way back to the ATI 9600.
Many of the filters we ship with Motion and FCP do similar things.
Check out Glass Distortion, Displace, Bump Map, etc. for example.
In any event, it's probably not possible to make it work the way you
want as it is. It would probably be easier to write a little CoreImage
filter right in Quartz Composer, and then use the QC example that was
posted earlier today. I'll see if I can come up with a very simple
example to help you out.
Darrin
On Apr 28, 2009, at 9:53 AM, Patrick Sheffield wrote:
So - it requires 4 pixels to determine which direction to shift each
pixel? How can that work? Does it scan starting at the upper left
and take the pixel and its right most and then the two pixels below
it to determine where to move the first pixel? and how could I even
build such a buffer, since the value that was subtracted to
determine the first pixel's displacement is being subtracted FROM to
determine the second pixel. And what happens at the right/bottom
edges?
Seems FRIGHTFULLY inefficient... why not use the RGBA values for this?
I am confused,
Patrick
On Apr 28, 2009, at 9:01 AM, Darrin Cardani wrote:
Glad it helps! It looks to me like Displacement Distortion is using
the magnitude and direction of edges in the map image to offset
pixels in the source image. I believe it first converts the map
image to grayscale, then finds the difference of each pixel with
its neighbors in the x and y directions. It multiplies the x and y
differences by the scale parameter and uses the resulting vector as
an offset from the current pixel in the source image.
So let's say the grayscale version of your map image looked like
this:
0.75 0.89
0.23 0.52
It takes (0.75 - 0.89) = -0.14 as the x offset
It takes (0.75 - 0.23) = .52 as the y offset
It then multiplies those values by the scale parameter. Let's say
it's set to 25, so it comes up with an offset of (-3.5, 13). It
adds that to the current (x,y) coordinate and samples the input
image at (x - 3.5, y + 13).
Does that make sense?
Darrin
On Apr 27, 2009, at 5:53 PM, Patrick Sheffield wrote:
Thank you Darrin - this helps a lot.
I wonder if you could shed some light on a specific CoreImage
filter - specifically DisplacementDistortion...
In Shake and in FxScript, the X-Displacement is governed by one
channel in the displace image and the Y-Displacement by another. I
can't find any documentation on the CI filter as to how it handles
this.
Thanks,
Patrick
--
Darrin Cardani
email@hidden
--
Darrin Cardani
email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Pro-apps-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden