애펙에서 오브젝트를 중력에 의해 떨어지게하거나
바운스 주는 모션을 줄 때
진동을 주면서 더 사실감 있게 표현할 수 있다.
간단한 진동이라도 여러번의 키프레임을 주게되면 상당한 작업 소요시간이 들때가 있는데
이를 간편하게 작업하는 익스프레션이 있다
만들어주신분 감사합니다^^,
[드롭다운 바운스]
1.드롭다운 바운스 (e=바운스 정도 크기값 / g=중력값 / nMax=잔여 진동수)
e = .7;
g = 5000;
nMax = 9;
n = 0;
if (numKeys > 0){
n = nearestKey(time).index;
if (key(n).time > time) n--;
}
if (n > 0){
t = time - key(n).time;
v = -velocityAtTime(key(n).time - .001)*e;
vl = length(v);
if (value instanceof Array){
vu = (vl > 0) ? normalize(v) : [0,0,0];
}else{
vu = (v < 0) ? -1 : 1;
}
tCur = 0;
segDur = 2*vl/g;
tNext = segDur;
nb = 1; // number of bounces
while (tNext < t && nb <= nMax){
vl *= e;
segDur *= e;
tCur = tNext;
tNext += segDur;
nb++
}
if(nb <= nMax){
delta = t - tCur;
value + vu*delta*(vl - g*delta/2);
}else{
value
}
}else
value
익스프레션을 사용해 드롭다운 바운스를 적용할 경우
주의할 점이 있다.
바로 easy 값을 줄때는 앞 부분만 줘야한다.
뒤에 있는 키프레임까지 이지값을 주게되면 익스프레션이 적용이 안된다.
[바운스]
2. 바운스 (amp = 바운스 크기 / freq = 바운스 양 / decay = 억제력)
amp = .05;
freq = 4.0;
decay = 8.0;
n = 0;
time_max = 4;
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 && t < time_max){
v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}else{value}
바운스도 드롭다운 바운수와 동일하게
앞 키프레임만 이지값을 준다.
이렇게 익스프레션 표현식을 통해서
간단하게 바운스, 진동값을 조정하면
실무에서의 작업시간을 줄일 수 있다.
*출처 https://motionscript.com/articles/bounce-and-overshoot.html
'애프터이펙트|모션' 카테고리의 다른 글
애펙 create nulls from paths / 패스를 자유자재로 사용하는 방법 (0) | 2025.02.07 |
---|---|
애펙 morphing 모양이 변하는 모핑 애니매이션 (0) | 2025.02.06 |
애펙 텍스트에 맞춰 자동으로 박스 조절하는 법 sourceRectAtTime() / Slider Control (0) | 2025.01.31 |
애펙 valueAtTime / 시간차 두고 앞 물체 따라가게 하는 방법 (0) | 2025.01.31 |
애펙 경로를 따라 자동으로 각도 변경하는 방법 꿀팁! (0) | 2025.01.20 |