Tutorial

After Effect Expression 공부 노트

ovcos 2014. 1. 15. 18:07

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