After Effect Expression 공부 노트
linear(value,0,100,0,500)
시네마 포디의 range mapper 와 같은 것이다.
value는 리맵을 하게될 대상 값을 의미한다.
풀이하자면
value의 0~100의 값을 0~500의 값으로 리니어 하게 리맵핑 한다. 라는 뜻이다.
타임리맵퍼와 비슷하다고 보면 된다.
http://www.videocopilot.net/tutorials/audio_to_animation/
이 구문이 나오는 원문링크이다.
sampleImage(point, radius = [.5, .5], postEffect = true, t = time)
* layer. 의 다음에 들어가는 구문으로써 layer > general 에 속해있다.
이것은 point를 기준으로 그 포인트가 위치해있는 곳 radius영역의 RGBA 샘플값을 가져올수있다. 샘플값은 색상값이라으로 보면 된다.
샘플값은 0~255 의 색값을 0~1로 리맵해서 보여주므로
RGBA 값 모두 1을 넘는 숫자로 표시되지는 않는다.
radius 영역안에 RGB 값이 얼마나 섞여있는가를 표현해 주기때문에 radius 영역이
좁으면 좁을수록 포인트가 움직일때 변동되는 값이 적다.
아래와 같은 구문이 있다고 치자.
AAA = thisComp.layer("A").sampleImage(thisComp.layer("B").transform.position,[1,1])[3];
on = thisComp.layer("B").effect("slidercontrol")("slider");
off = 0;
if (AAA < 1){
off
}else{
on
}
구문을 풀어보자.
AAA는
이 컴포지션의 "A"레이어의 샘플 이미지 값이다.
샘플이미지값을 추출할 포인트는 "B"의 포지션위치이며,
포인트로부터의 반경은 X로 1 pixel, Y로 1 pixel 이다.
RGBA 값 중 A(alpha) 값을 추출한다.
*[0],[1],[2],[3] 은 각각 R,G,B,A 로 볼 수 있다.
on 은 이 컴퍼지션의 "B"레이어의 "slidercontrol"이라는 이름을 가진 이펙트의 "slider" 항목의 값이다.
off 는 0 이다.
만약 AAA의 값이 1 보다 작을 경우 off 의 값을 가져오고
그렇지 않을경우는 on의 값을 가져온다.
http://www.videocopilot.net/tutorial/dynamic_machine_gun/
이 구문을 이용해 사용하는 원문링크이다.
(toCompVec([0,0,1])[2]>0)*100 // 이것은 카메라가 바라보는 방향에만 적용받는다.***(중요)
이 구문을 Opacity 에 적용하면 벡터의 방향성에 따라서 Visible, invisible을 표현할 수 있다.
풀이하자면
현재 선택된 솔리드의 벡터(노멀) 방향이 [X,Y,Z] 각각 [0,0,양수] 인 상태에서
Z에 해당하는[2] 의 값을 지정하고 이 값이 0 보다 크다면 (양수라면) 이 값에 * 100 을 해준다.
양수라면이 참이 되기때문에 거짓은 자동으로 0 으로 처리된다.(정확하지 않음;;)
위 구문에서 1 이라 칭한것 방향성 즉 양수쪽 방향이냐 음수쪽 방향이냐를 결정짓는 기준이며
1이든 100 이든 1000 이든 모두 양수 이기 때문에 양수가 되는 어떤 숫자를 넣어도 상관이 없다.
그러나 정확한 의미는 Z 축의 1 의 지점의 숫자와 0 을 비교하는것이기 때문에
100이라면 100의 위치와 0을 비교하고 1000이라면 1000의 위치와 0을 비교하게 되는 것이다.
혹 Opacity가 아닌 역삼각함수같은 구문에 toCompVec 을 사용할때는 정확한 이해 안에서 사용해야 한다.
이 값을 자신의 벡터값이 아닌 다른 레이어의 벡터값으로 불러와 자신에게 사용할 경우 다음과 같이 구문을 적용한다.
n = thisComp.layer("Orange Solid 1");
(n.toCompVec([0,0,1])[2]>0)*100
괄호가 생기는 이유는 True와 false 는 각각 1 과 0 이기 때문에
Opacity와 같은 곳에 적용하기위해서 * 100을 해주는데
괄호가 없으면 곱셈을 먼저 계산하기때문에 1 혹은 0으로 밖에 표시되지 않기 때문이다.
thisComp.layer("Orange Solid 1").transform.position.velocity.
벨로시티값을 가져온다.
벨로시티와 speed 와의 가장 큰 차이는 벨로시티는 X,Y의 값을 가져오고 스피드는 하나의 값만 가져온다.
또 벨로시티는 음수까지 표현하지만 스피드는 양수만 표현한다.
예를들면
v = thisComp.layer("Orange Solid 1").transform.position.velocity;
(v[1] < 0) *100
위의 식은 3D 레이어가 아닌 2D 레이어의 Velocity 값이다. 벨로시티의 y 값을 가져오고 이 값이 0 보다 작은 음수라면
오파시티에 100을 곱해준다 라는 식이다.
clamp(변수,min,max)
제한을 거는 구문이다.
어떠한 변수의 수치를 min 과 max 로 이루어진 구간에만 적용하고
min > n 때는 min 값을 max < n 때는 max 값을 표시한다.
예를 들어 0~100 까지 이동하는 솔리드에서 min을 30 max 를 70 이라고 지정했으면
0~30 까지는 30이 되며 70~100은 70이 된다.
linear 와는 다르게 작동되므로 구분하는 것이 좋다.
오버슛 관련 댄 에버트 의 익스프레션
freq = 3;
decay = 5;
n = 0;
if (numKeys > 0){
n = nearestKey(time).index;
if (key(n).time > time) n--;
}
if (n > 0){
t = time - key(n).time;
amp = velocityAtTime(key(n).time - .001);
w = freq*Math.PI*2;
value + amp*(Math.sin(t*w)/Math.exp(decay*t)/w);
}else
value