Затухающие "Bounce" expressions в AE

Автор: Никита Шилов Дата . Написано Учебные материалы - Adobe After Effect

Разнообразные "bounce" выражения в After Effects.

Золотое правило: "Чем анимация "натуральней", тем она лучше выглядит в целом." Добится этой "натуральности" (то есть создать условия, для имитации законов физики - отскоков, инцерции и пр.), можно разными путями. Но создавать все это с помощью ключей очень утомительно. В этом нам помогут выражения, и в данной статье рассмотрим выражения "bounce" типа.

Inertial Bounce.

Очень распространенный эффект "отскока", который можно записать в виде выражения:

 

n = 0;
 
if (numKeys > 0){
 
n = nearestKey(time).index;
 
if (key(n).time > time){
 
n--;
 
}
 
}
 
if (n == 0){
 
t = 0;
 
}else{
 
t = time - key(n).time;
 
}
 
if (n > 0){
 
v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
 
amp = 1;
 
freq = 2;
 
decay = 8;
 
M=Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t); 
value + v*amp*M;
 
}else{
 
value;
 
}

Где, amp - амплитуда отскока, freq - частота, decay - затухание

Элемент к которому необходимо привязать данный экспрешн,переводим в 3д слой. Затем перемещаем его anchor point в то место, где будет его "центр тяжести", то есть откуда будет идти вращение. В моем случае это самый верх слоя (текст). Также создаем ключи вращения (в моем случае X rotation от 90 до 0) и в этот X rotation дописываем выражение Inertial Bounce. Также можете создать свет (Light) в композиции для еще более натурального вида анимации.

Decay Bounce.

Еще один вид отскока, на этот раз "от земли". Со следующим выражением:

veloc = thisComp.layer("Control Layer").effect("velo control")("Slider");

amplitude = thisComp.layer("Control Layer").effect("amplitude control")("Slider");

decay = thisComp.layer("Control Layer").effect("decay control")("Slider");

y = amplitude*Math.cos(veloc*time)/Math.exp(decay*time);

value + [0,y]

Проблема в том, чтобы использовать данное выражение необходимо создать дополнительный Null Object (или solid слой), назвать его как "Control Layer". Затем применить к ниму 3 фильтра Slider control, и назвать каждый как "velo control", "amplitude control", "decay control". Поставить у них значения -200,-200 и 4, соответственно. Кстати эти значения регулируют скорость (velo), амплитуду (amp) и затухание (decay) отскока. Затем на объект к которому необходимо сделать данный отскок, применяем выражение на параметр Position. 

 

Better Bounce. 

Очень простое выражение, которое можно записать в виде:

try {

        freq = effect("bounce - frequency")("Slider"); //oscillations per second 

        amplitude =  effect("bounce - amplitude")("Slider"); 

        decay =  effect("bounce - decay")("Slider");

    } catch(e) {

        freq = 1;

        amplitude = 200;

        decay = 3;

    }

    posCos = Math.abs(Math.cos(freq*time*2*Math.PI));

    y = amplitude*posCos/Math.exp(decay*time);

    value - y

Это выражение можно добавить к любому из параметру transform, главное аккуратнее подбирайте частоту отскока (freq) так как оно основано на fps проекта.

Баскетбольный мяч.

Еще одно популярное выражение имитирующее отскок баскетбольного мяча. Выражение к позиции следующее:

Vy0 = 500; //initial y velocity (pixels/second)

Vx0 = 100; // initial x velocity (pixels/second)

g = 2500; // gravity (pixels/second/second)

floor = 400;

e = .85; //elasticity

b = floor - position[1];

h = b + Vy0*Vy0/(2*g);

T = Vy0/g + Math.sqrt(2*h/g);

if ((time-inPoint) < T){

 y = Vy0*(time-inPoint) - g*(time-inPoint)*(time-inPoint)/2 + b;

}else{

 Vy = -(Vy0 - g*T);

 while (true){

   Vy *= e;

   t = T;

   T += 2*Vy/g;

   if ((time-inPoint) < T){

     t = (time-inPoint) - t;

     y = Vy*t - g*t*t/2;

     break;

   }else if (T - t < thisComp.frameDuration){

     y = 0;

     break;

   }

 }

}

[position[0] + Vx0*(time-inPoint), floor - y]

Единственное предупреждение - не ставить начальное значении объекта отскока ниже окна композиции.

 


Смотрите также:
Похожие статьи:
Не пропустите:


У Вас недостаточно прав для добавления комментариев.
Регистрируемся,а потом можно будет писать.

Популярное в АЕ: