FORUMS: list search recent posts

function curve drives interpolation

COW Forums : Adobe After Effects Expressions

<< PREVIOUS   •   FAQ   •   VIEW ALL   •   PRINT   •   NEXT >>
Aaron Kent
function curve drives interpolation
on Feb 25, 2013 at 9:32:00 pm

Hello all. I am wondering if it is possible to use a function curve keyed on another parameter to act as a replacement of "linear" or "ease" interpolation expression? I searched around here and found only one relevant atempt to make this work. Is it even possible, given the AE scripting language?

Cheers

AK


Return to posts index

Dan Ebberts
Re: function curve drives interpolation
on Feb 25, 2013 at 11:08:38 pm

Interesting question...

Suppose you set up a template null and you keyframe the rotation property going from 0 to 1 degree as the time goes from 0 to 1 second. Use that keyframed segment to set up the ease curve you want.

Then on another layer you could use linear keyframes and apply an expression like this to generate a similar curve:


template = thisComp.layer("template").transform.rotation;
n = 0;
if (numKeys > 0){
n = nearestKey(time).index;
if (key(n).time > time) n--;
}
if (n == 0 || n == numKeys){
value
}else{
v1 = key(n).value;
v2 = key(n+1).value;
t1 = key(n).time;
t2 = key(n+1).time;
v1 + (v2-v1)*template.valueAtTime((time-t1)/(t2-t1));
}


I hope that helps.

Dan



Return to posts index

Aaron Kent
Re: function curve drives interpolation
on Feb 26, 2013 at 4:32:07 pm

Hello Dan. Apologies, I believe I didn't phrase this question well enough. Save I am setting an expression on scale like so (see below)


so that the layer's width scales between 100% and 10% depending on its position between the two shape layers in the expression below. "Linear" will of course yield a linear result. If the layer was half way between the 2 layers it's width would be 50%, 3/4 of the way there 75%, etc etc.

But is there a way to replace "linear" with a curve with multiple key frames between 0 and 1, so you could kind of art direct the range of scale values as the layer travels between the two points....

Cheers

AK

a = linear(transform.position[0], thisComp.layer("Shape Layer 1").transform.position[0], thisComp.layer("Shape Layer 2").transform.position[0], 100, 10);
b = transform.position[1];
[a,b]



Return to posts index


Dan Ebberts
Re: function curve drives interpolation
on Feb 26, 2013 at 9:32:41 pm

I'm not sure if this is what you're looking for, but if you wanted to scale a layer from 10% to 100% as its x postion moves between the x positions of Shape Layer 1 and Shape Layer 2, and you wanted to apply a cubic ease-in to the scaling, you could do it like this:


function myEase(t){
return t*t*t; // cubic ease in
}

minVal = [10,10];
maxVal = [100,100];
x1 = thisComp.layer("Shape Layer 1").transform.position[0];
x2 = thisComp.layer("Shape Layer 2").transform.position[0];
x = transform.position[0];
myT = linear(x,x1,x2,0,1);
linear(myEase(myT),minVal,maxVal)



To apply a different ease, you would just need to change the function. The key to the function is that it expects values between 0 and 1, and returns values between 0 and 1.

Dan



Return to posts index

Aaron Kent
Re: function curve drives interpolation
on Feb 26, 2013 at 9:39:53 pm

Thanks Dan. These are two great lessons / exercises in and of themselves.
I'm going to try to actually combine these two things into what I think I'm trying to achieve. I will post back my results.

Cheers

AK


Return to posts index

Gabriel Ferrão
Re: function curve drives interpolation
on Jun 24, 2015 at 1:37:08 am

Hey, I have the exact same question as you (different application, however).

The suggestions here are helpful, but not quite what you were talking about....

I'd love to know what you ended up doing.

Thanks!


Return to posts index

<< PREVIOUS   •   VIEW ALL   •   PRINT   •   NEXT >>
© 2018 CreativeCOW.net All Rights Reserved
[TOP]