나의 즐겨찾기 | 블로그홈 | 바로가기 바로가기 | 로그인
블로그  |  사진갤러리  |  동영상갤러리 방명록  |   즐겨찾기 추가
재히 (jaehiekr)
프로필     
전체 글보기(10)
today
mac life
AE Expression
북마크
티카 사진
설문
백만가지 주제
HanRSS 로 구독하기Fish 로 구독하기
최근 댓글 전체보기
정보감사합니다.
다녀간 블로거 더보기
- bluebird
- 조피디
- 67311451
- ~우연아닌만남~
- 아로
개설일 : 2008/07/17
 

야후 블로그가 맥에서 많은 문제점이 발견되어 부득이 블로그를 바꾸기로 했습니다.
http://itutorial.tistory.com/
야후 블로그는 몇일뒤 닫겠습니다.

두 지점(두 레이어)간 거리 구하기 활용

2008.07.24 18:45 | AE Expression | 재히

http://kr.blog.yahoo.com/jaehiekr/11 주소복사

1,2부에서 두 지점간의 거리를 구하는 방법을 공부했습니다.
하긴 했는데 요넘을 어디에 쓸고.....하고 생각하시는 분들도 있겠지만 활용할 곳은 무궁무진 합니다.

1. 가령 두 레이어간 거리가 일정 거리 이상이 되면 레이어를 사라지게 한다든지(조건문 사용)
2. 두 레이어간 거리를 다른 이펙트의 수치로 사용할 수도 있을 것이다.(블러 등)
    다시 말해 두 지점의 거리가 멀어지면 블러값이 증가하고 거리가 가까워지면 블러값이 감소하는
    마치 카메라의 포커스를 조절하는 것 같은 효과를 쉽게 제어 할 수 있습니다.
3. 혹은 두 레이어간 거리의 수치를 스케일에 더하거나 빼줄 수도 있을 것이다.
    다시 말해 두 지점간의 거리가 멀어지면 스케일이 커지고, 가까워지면 스케일이 줄어들게끔...

이처럼 두 지점간 거리의 변화에 따라 다른 무언가의 속성이나 이펙트가 자동으로 반응하게 하고 싶다면
어디서든 적용이 가능하다.

자 그럼 하나씩 적용해 보겠습니다.
먼저 두 레이어간 거리가 일정 거리 이상이 되면 레이어를 사라지게 해보겠습니다.

먼저 작업환경을 구성하겠습니다.
1. 600*400 사이즈의 콤프를 만듭니다.
2. 100*100 사이즈의 솔리드 2개를 만듭니다.(색상을 다르게)
3. 두 솔리드의 이름을 각각 “layer A” “layer B” 로 수정합니다.(대소문자 구분)
4. layer A의 위치를 (50.200), layer B의 위치를 (550.200) 으로 이동합니다.



자 이제 두 레이어의 거리가 300 이하가 되면 “layer A” 레이어가 사라지도록 하겠습니다.
아래 식을 layer A 의 Opacity 속성에 추가합니다.

point1=transform.position;
point2=thisComp.layer("layer B").transform.position;
n=length(point1, point2);
if ( n <=300) 0 else transform.opacity

원본 크기의 사진을 보려면 클릭하세요

이제 두 레이어 중 아무거나 스테이지 상에서 움직여 보십시오
두 레이어의 거리가 300 이하가 되는 순간 layer A 는 사라지게 될 것입니다.

이쯤에서 혹자는 이런 생각을 할 수 있습니다.
저정도야 그냥 키를 잡아도 되지 않을까? ... 음 그렇죠 저정도라면 그냥 키를 잡는 것이 편하고 빠를 것입니다.
하지만 다음과 같은 경우를 생각해 보겠습니다.

layer B의 위치가 불규칙하게 움직이고 있다고 가정해 보겠습니다.
이때도 키를 잡을 수 있을까요
다시 말해 매 프레임마다 거리를 확인해서 300 이하면 투명도를 0으로 300 이상이면 투명도를 100으로...
이론상 가능하기는 하지만 매우 불필요한 전투력 소비일 것입니다.

직접 확인해 보겠습니다.
layer A 의 Opacity 속성의 익스프레션을 삭제합니다.
이어서 layer B의 Position 속성에 wiggle(8,500) 란 익스프레션을 추가합니다.



콤프를 플레이 해보면 layer B가 불규칙하게 움직이는 것을 확인할 수 있습니다.

자 이제 여러분이 직접 두 레이어의 거리가 300 이하인지 이상인지 확인해 가면서
layer A의 Opacity 속성에 키를 잡아 보십시오(아마 콤프가 30초 이상이라면 미칠지경일 겁니다.)

이때 layer A의 Opacity 속성에 위에서 배운 식을 추가한다면 자동으로 알아서 보였다 안보였다 하게 됩니다.

원본 크기의 사진을 보려면 클릭하세요
------------------------------------------------------------------------------------

혹은 두 레이어간 거리를 다른 이펙트의 수치로 사용할 수도 있을 것이다.(블러 등)
다시 말해 두 지점의 거리가 멀어지면 블러값이 증가하고 거리가 가까워지면 블러값이 감소하는
마치 카메라의 포커스를 조절하는 것 같은 효과를 쉽게 제어 할 수 있습니다.

layer A 의 익스프레션을 삭제합니다.
그림과 같이 어저스트먼트 레이어를 추가하고 Fast Blur 이펙트를 추가합니다.



이어서 Fast Blur의 Blurriness 항목에 다음과 같은 익스프레션을 추가합니다.

point1=thisComp.layer("layer A").transform.position;
point2=thisComp.layer("layer B").transform.position;
length(point1, point2)

혹시라도 화면에 아무것도 안보이게 되더라고 걱정하지 않아도 됩니다.
블러값이 너무 크게 적용되어 있어서 입니다.
이제 두 레이어중 아무 것이나 움직여 보세요 두 레이어의 거리가 줄어들면
자연스럽게 블러값이 감소하고, 거리가 멀어지면 블러값이 증가합니다.

적용되는 블러값이 너무 크다면 적당한 수치로 나누어 주면 된다.
length(point1, point2)/10

원본 크기의 사진을 보려면 클릭하세요
------------------------------------------------------------------------------------

이번에는 두 레이어의 거리가 멀어지면 스케일이 커지고, 가까워지면 작아지게 만들어 보겠습니다.

바로 위의 작업 환경에서 어저스트먼트 레이어는 삭제 합니다.



layer A의 Scale 속성에 아래 익스프레션을 추가합니다.

point1=transform.position;
point2=thisComp.layer("layer B").transform.position;
n=length(point1, point2);
add(value,[n,n])

원본 크기의 사진을 보려면 클릭하세요

두 레이중 아무 것이나 움직여보면 거리에 따라 스케일이 달라지는 것을 확인 할 수 있습니다.
만약 스케일이 너무 크게 적용된다면 아래처럼 적당히 나누어 주면 됩니다.
add(value,[n,n])/2

원본 크기의 사진을 보려면 클릭하세요

하지만 위처럼 그냥 실수로 나누어 주면 약간의 문제가 발생합니다.
두 레이어가 정확히 겹쳤을때 사이즈가 1:1 로 맞지 않게 됩니다.

원본 크기의 사진을 보려면 클릭하세요

물론 이 문제를 해결하는 방법에도 여러 가지가 있을 수 있지만,
그중 가장 고급적인 방법을 하나 배워보겠습니다.

linear(t, tMin, tMax, value1, value2) 표현식을 사용하는 방식입니다.
위 함수는 인터폴레이션 함수중 하나 입니다.(인터폴레이션 함수는 나중에 자세히 다룰 겁니다.)

아래처럼 익스프레션을 수정합니다.

point1=transform.position;
point2=thisComp.layer("layer B").transform.position;
n=length(point1, point2);
linear(n, 0, 500, [100,100], [300,300])

간단히 설명하자면 n값(거리)가 0 부터 500까지 변하는 동안 스케일은
100% 부터 300%까지 변하게끔 대응시켜 준 겁니다.

원본 크기의 사진을 보려면 클릭하세요

원본 크기의 사진을 보려면 클릭하세요
두 레이어를 정확히 겹쳐보시면 사이즈가 1:1로 딱 맞게 되는 것을 확인 하실 수 있습니다.
linear함수의 수치를 조절하면 원하는 대로 거리나 사이즈를 조절할 수 있습니다.

신형 맥북 프로 오른쪽 옵션키 활용도 높이기

2008.07.24 17:40 | mac life | 재히

http://kr.blog.yahoo.com/jaehiekr/10 주소복사

신형 맥북 프로 오른쪽 옵션키 활용도 높이기

신형 맥북 프로의 키보드에는 넘버키가 없어지고, 스페이스바를 기준으로 오른쪽에
추가적인 Command 키와 Option 키가 위치해 있다.
물론 필요성이 있어서 만들어 둔 키이지만 필자의 경우 전혀 사용하지 않고 있다.
정작 필자에게 필요한 키는 넘버키와 넘버키에 있는 엔터키이다.
이유인즉 에펙에서 사용되는 단축키가 넘버키패드에도 할당되어 있기때문이다.
얼마전까지도 USB 넘버키패드를 별도로 구입할 생각이었으나 역시나 맥을 온전히 지원하는
USB 넘버키패드를 찾을 수가 없었다.(적어도 국내에서는)
결국 포기하고 말았다.

그나마 이번에 소개하는 툴을 설치해 아쉽게나마 우측 Option 키를 넘버키패드의 엔터키처럼
리맵해서 사용하는 것으로 위안을 삼고 있다.

http://doublecommand.sourceforge.net/files/DoubleCommand-1.6.6b4.dmg
프리웨어, UB 이다.
간단한 원문 설명이다. 영어 잘하는 분은 한번 읽어보면 금방 뭐하는 툴인지 알것이다.

DoubleCommand is software for Mac OS X (a kernel extension) that lets you remap keys, in other words change the way your keyboard works. Often used to make a PC keyboard more comfortable with a Mac, swapping the Alt (Option) and Windows (Command or Apple) keys, since they are in swapped positions on Mac and PC keyboards. DoubleCommand is a quick and easy way to fix this if you use a PC keyboard with your Mac. Called DoubleCommand because originally it was used to give the old PowerBooks a second Command key, where there was an enter key

위의 툴을 다운받아 설치한다.
설치가 끝나면 시스템 환경설정 패널에 DoubleCommand 항목이 추가된다.



클릭해서 설정창을 연다.

원본 크기의 사진을 보려면 클릭하세요


보시는 것 처럼 다양한 키 리맵이 가능하다.
모든 옵션을 설명하지는 않겠다. 간단한 영어이니 대충 알 것이다.

<<엔터키를 커맨드키로 리맵한다거나, 커맨드키를 옵션키로 리맵한다거나,
옵션키와 컨트롤 키를 바꿔준다거나, backward Delete를 forward Delete로 리맵한다거나 등등>>

그림처럼 우축 하단의 Right Option acts as Enter Key를 선택한다.
위쪽에 있는 버튼 중 system 혹은 User 중 하나를 클릭한다.
system은 모든 사용자에 적용되고
User는 현제 사용자만 적용된다.
끝으로 바로 위에 Activate 버튼을 클릭해 활성화한다.

이제 우측 Option 키는 넘버키패드의 Enter 키로 작동하게 된다.

두 지점(두 레이어)간 거리 구하기 2부

2008.07.24 02:37 | AE Expression | 재히

http://kr.blog.yahoo.com/jaehiekr/9 주소복사

이번 강좌에서는 length(point1, point2) 함수를 직접 사용해 보겠습니다.

먼저 1부에서 만들었던 두 솔리드 레이어의 이름을 짧게 변경하겠습니다.
각각 “a” 와 “b” 로 수정해 주세요(계산식이 길어서 좀 줄이는 것입니다.)


아래의 식을 텍스트 레이어의 속성 중에 Source Text에 추가입니다.

length(thisComp.layer("a").transform.position[0],thisComp.layer("b").transform.position[0])

원본 크기의 사진을 보려면 클릭하세요


레이어 a 의 X축에서 레이어 b 의 X축까지의 거리를 구할 수 있습니다.
표시되는 수치는 오직 X축의 거리만을 표시합니다. Y축은 전혀 영향을 주지 않습니다.


이번에는 아래와 같이 수정합니다.

length(thisComp.layer("a").transform.position[1],thisComp.layer("b").transform.position[1])

레이어 a 의 Y축에서 레이어 b 의 Y축까지의 거리를 구할 수 있습니다.
표시되는 수치는 오직  Y축의 거리만을 표시합니다. X축은 전혀 영향을 주지 않습니다.


끝으로 아래와 같이 다시 수정합니다.

length(thisComp.layer("a").transform.position,thisComp.layer("b").transform.position)

원본 크기의 사진을 보려면 클릭하세요


레이어 a에서 레이어 b까지의 대각선의 길이(실제 두 지점간의 거리)를 구할 수 있습니다.
소수점을 없애고 싶다면 Math.round(value) 함수를 사용합니다.
Math.round(length(thisComp.layer("a").transform.position,thisComp.layer("b").transform.position))


위의 나열한 식은 1부에서 사용한 식과 같은 결과 입니다.
다만 변수를 사용하지 않고 직접 표현식에 추가한 것 뿐입니다.

length(point1, point2)의 장점은 순수한 두 지점간의 거리를 구하는 함수 이므로
음수값이나 add(vec), sub(vec) 등 전혀 신경쓸 필요가 없다는데 있습니다.


혹시라도 위 식이 복잡해 보이는 분들은 변수를 사용해 아래 처럼 보기좋게 정리하실 수 있습니다.

X축만 구할 경우
point1=thisComp.layer("a").transform.position[0];
point2=thisComp.layer("b").transform.position[0];
length(point1, point2)


Y축만 구할 경우
point1=thisComp.layer("a").transform.position[1];
point2=thisComp.layer("b").transform.position[1];
length(point1, point2)


대각선을 구할 경우
point1=thisComp.layer("a").transform.position;
point2=thisComp.layer("b").transform.position;
Math.round(length(point1, point2))

3부에서는 두 지점간 거리값을 활용하는 방법을 배우겠습니다.
음...3부가 아마 진정한 백미가 아닐까 생각합니다.

두 지점(두 레이어)간 거리 구하기 1부

2008.07.24 02:01 | AE Expression | 재히

http://kr.blog.yahoo.com/jaehiekr/8 주소복사

두 지점(두 레이어)간의 거리를 구하는 식

두 지점의 거리를 구하는 방법에는 여러 가지가 있을 수 있습니다.
a지점의 좌표에서 b지점의 좌표를 빼는 방법
거리를 직접 구할 수 있는 함수를 사용하는 방법
삼각함수를 이용해 빗변의 길이를 구할수도 있을 것입니다.

작업 용도에따라 적당한 방식을 사용하면 됩니다.
굳이 어려운 방식을 사용해야만 좋은 것이 아닙니다.
필요한 만큼의 값을 구할 수 있는 식을 쉽고 빠르게 사용하는 것이 더욱 중요합니다.

자 그럼 시작해 보겠습니다.
먼저 400*400 사이즈의 콤프를 만들고, 100*100사이즈의 솔리드를 2개 만듭니다.
(색상을 다르게 하시면 더욱 좋습니다.)
두 개의 솔리드의 이름을 layer A, layer B 로 각각 수정합니다. (대소문자 구분합니다.)
layer A 의 위치(포지션)를 (0.0)으로 이동합니다.
layer B는 (400.400)으로 이동합니다.
끝으로 텍스트 툴을 사용해 콤프의 중앙에 “temp” 라고 입력합니다.

원본 크기의 사진을 보려면 클릭하세요

텍스트 레이어의 속성 중에 Source Text 에 아래의 익스프레션을 추가합니다.

point1=thisComp.layer("layer A").transform.position;
point2=thisComp.layer("layer B").transform.position;
add(point1, point2)

입력이 끝나면 숫자 키패드의 엔터키를 눌러 빠져나옵니다.
텍스트에 표시되는 수치를 보면 400,400 을 표시합니다.
다시 말해 X축 거리가 400,  Y축 거리또한 400 입니다.



이제 layer B를 화면에서 이리저리 움직이면 두 레이어간 거리가 자동으로 계산되어 표시됩니다.
layer A보다 왼쪽으로 이동하면 X축이 음수로 표시되며, layer A보다 위쪽으로 이동하면 Y축이 음수로 표시됩니다.

문제는 이제 부터입니다.
layer B를 다시 400,400 위치에 가져다 놓습니다.
이번에는 layer A를 이동해보면 수치가 정확하지 않다는 것을 알수 있을 것입니다.

이유인즉 위의 식에서 add 함수를 사용했기 때문입니다.
add는 두 지점의 좌표를 더하는 함수입나다. 다시 말해 layer A의 좌표에 layer B의 좌표를 더한결과를 출력합나다.
따라서 layer A의 위치가 (0,0) 일 경우는 문제가 없지만 임의의 위치에 있다면 두 좌표를 합한 결과를 출력하기 때문에
두 지점간의 거리를 구하는데는 사용 할 수 없습니다.
그럼 이번에는 sub 함수(빼기 함수)를 사용해 보도록 하겠습니다.

두 레이어를 다시 초기 위치로 가져다 놓습니다.
위의 식에서 마지막 줄을 다음과 같이 수정합니다.
sub(point1, point2)



결과는 두 축이 모두 음수로 표시됩니다.
이제 두 레이어 중 아무 레이어나 마구 마구 움직여도 두 지점간 거리를 정확이 표시합니다.
음수라는 점만 배제하면 두 지점간의 거리를 정확히 구할 수 있게 되었습니다.

두 지점간 좌표를 빼는 것이므로 a-b 혹은 b-a에 따라 양수/음수가 결정되는 것입니다.
sub(point1, point2)
sub(point2, point1)
두 식의 결과를 직접 확인해 보시면 아실 겁니다.(레이어를 마구 마구 이리저리 움직여 보세요)
------------------------------------------------------------------------------------

이번에는 두 지점의 대각선의 길이를 구해보도록 하겠습니다.(요넘이 우리가 필요한 것이죠)

위 방법은 X,Y축을 구분해서 결과가 나옵니다.
경우에따라 축 구분없이 대각선의 길이(실제 두 지점간의 거리가 되겠죠!)를 직접 구하고자 할 경우가 있습니다.
이 경우는 length(vec) 함수를 사용하면 됩니다.

텍스트 레어의 익스프레션을 아래와 같이 수정합니다.

point1=thisComp.layer("layer A").transform.position;
point2=thisComp.layer("layer B").transform.position;
delta=sub(point1, point2);
length(delta)


표시되는 결과는 너무도 정확한 대각선의 길이가 표시됩니다.(소숫점까지)
또한 length 함수는 실제 거리를 구하는 함수이므로 음수 값이 없습니다.(편하죠^^)

만약 소수점을 없애고 싶다면 Math.round(value) 함수를 사용하면 됩니다.
위 식에서 마지막 줄을 아래와 같이 수정합니다.
Math.round(length(delta))



스테이지에서 두 레이중 아무것이나 마구 마구 이리저리 움직여 보세요
정확히 두지점의 거리(대각선의 길이)값을 얻을 수 있습니다.

[ 1 | 2 ] 다음 페이지
 
 즐겨찾기
 즐겨찾기 글모음
최근 글
블로그 이동합니다...
두 지점(두 레이어)간..
신형 맥북 프로 오른쪽..
두 지점(두 레이어)간..
두 지점(두 레이어)간..
지난 글
2009년 1월
2009년 2월
2009년 3월
2009년 4월
2009년 5월
2009년 6월
2009년 7월
2009년 8월
2009년 9월
2009년 10월
2009년 11월
2009 11월
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
오늘 전체
방문자 22 5907
구독자 0 3
댓글 0 2
참조글 0 0
 인기도 :
 이 블로그 점수주기
333,123