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:25:22 -0700
I should also mention, that it uses the red channel for x offset and
the green channel for y offset.
Darrin
On Apr 28, 2009, at 12:24 PM, Darrin Cardani wrote:
Here's a simple Core Image kernel that does a displacement. You
could either put this into a QC Composition with a "Core Image
Filter" object, or write an actual ImageUnit which you then load in
your FxPlug:
kernel vec4 Displacement (sampler image, sampler mapImage, float
scale)
{
vec4 offset = sample (mapImage, samplerCoord (mapImage));
offset *= scale;
return sample(image, samplerCoord(image) + offset.xy);
}
Darrin
On Apr 28, 2009, at 12:16 PM, Darrin Cardani wrote:
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
--
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
--
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