독학.NET

VEX 함수 fit

이전 범위에 있던 특정한 수를 새로운 범위에 기준한 값으로 돌려주는 fit 함수에 대해서 알아보자.

Posted: April 24, 2018
Version: Houdini 16.5

Fit VEX Function

fit() 함수는 어떤 범위에 있는 특정한 수를 새로운 범위의 해당하는 값으로 돌려준다.

fit() 함수의 기본형태는 다음과 같다.

fit(a, b, c, d, e)

 

괄호안에는 다섯 개의 인자(a,b,c,d,e) 가 필요하다.

숫자를 리맵핑하므로 인자 a,b,c,d,e 의 타입 은 다음과 같아야 한다.

  • Float
  • Integer
  • Vector

String(문자열) 타입은 쓸 수 없다.

 

각각의 인자는 다음과 같은 역할을 한다.

a: 리맵핑하고자 하는 특정수

b: 이전(old) 범위의 최소값

c: 이전(old) 범위의 최대값

d: 새로운(new) 범위의 최소값

e: 새로운(new) 범위의 최대값


Fit 함수 예제

fit() 함수를 이용해서 스피어 색을 시간에 따라 변화시켜 보자.

후디니를 열고 /obj 에 스피어 지오메트리를 하나 만든다.

VEX_func_fit_1.jpg

 

만들어진 'sphere1' 노드를 더블클릭하여 Geometry 레벨로 들어간다.

Attribute Wrangle SOP 을 만들고 다음과 같이 연결해 준다.

 연결한 뒤에는 'attribwrangle1' 노드의 Display Flag 를 선택한다.

연결한 뒤에는 'attribwrangle1' 노드의 Display Flag 를 선택한다.

 

'attribwrangle1' 노드의 VEXpression 란에 다음과 같이 VEX 를 입력한다.

 VEXpression 칸에 입력하는 동안은 결과를 볼수 없다. 마우스 커서를 VEXpression 칸 밖으로 이동시켜 클릭해야 입력된 VEX 가 적용된다. 바로 결과를 볼 수 있는 단축키는 Ctrl + Enter 이다.

VEXpression 칸에 입력하는 동안은 결과를 볼수 없다. 마우스 커서를 VEXpression 칸 밖으로 이동시켜 클릭해야 입력된 VEX 가 적용된다. 바로 결과를 볼 수 있는 단축키는 Ctrl + Enter 이다.

 

스피어의 색이 흰색에서 회색으로 어두워지는 것을 볼수 있다.

VEX_func_fit_6.jpg

 

이제 VEX 코드를 한문장씩 차근차근 보도록 하자.

float val = fit(45, 30, 60, 0, 1);

우선, 첫번째 인자 45 를 이전 범위(30-60) 안에서 맵핑(mapping) 을 한다.

맵핑이란 특정 수가 어떤 범위 안에서 어디즘 위치하는지 분석하는 것을 말한다.

이렇게 맵핑된 결과를 또다시 새로운 범위(0-1) 안에서 리맵핑(re-mapping) 한다.

 

인자 45 는 이전 범위 최소값(30) 과 최대값(60) 사이에서 중간이다.

즉, fit() 함수는 새로운 범위 최소값(0) 과 최대값(1) 사이에서 중간인 0.5 를 돌려준다.

이 리턴값을 'val' 라는 float 타입 변수 에 할당하였다.

 

@Cd = val;

'Cd' 어트리뷰트 를 만들고 그 값에 위에서 만든 'val' 변수를 대입했다.

이와 같이, 변수는 VEX 안에서 원할 때마다 불러져 쓰일 수 있다.

 

'attribwrangle1' 노드의 Geometry Spreadsheet 을 열고 만들어진 어트리뷰트를 확인한다.

현재 'val' 변수의 타입이 float 이므로 r,g,b 모두 같은 값이 된다.

VEX_func_fit_7.jpg

 

VEX 코드를 다음과 같이 고친다.

fit() 함수 첫번째 인자에 45 대신 @Frame 을 넣었다.

float val = fit(@Frame, 30, 60, 0, 1);
@Cd = val;

 

@Frame 은 후디니에서 지정된(Reserved) 어트리뷰트들 중 하나이다.

@Frame 은 글로벌 변수 $F 와 똑같이 현재 프레임 번호를 리턴한다.

이처럼 함수 인자에 고정이 아닌 변하는 수(@Frame) 가 쓰이면 그 함수가 리턴하는 값도 변하게 된다.

 

이번에는 프레임 번호(@Frame) 를 이전 범위(30-60) 안에서 맵핑(mapping) 을 한다.

이때 이 범위 밖에 있는 프레임 번호에 대해서는 클램핑(Clamping) 이 일어난다.

프레임 29 까지는 30 로 맵핑 된다.

프레임 61 부터는 60 로 맵핑 된다.

프레임 30 부터 60 까지는 현재 프레임 번호대로 맵핑 된다.

 

이렇게 맵핑된 결과를 또다시 새로운 범위(0-1) 안에서 리맵핑(re-mapping) 한다.

프레임 29 까지는 0 로 리맵핑 된다.

프레임 61 부터는 1 로 리맵핑 된다.

프레임 30 부터 60 까지는 0 부터 1 로 리맵핑 된다.

 

플레이를 해본다.

프레임 30부터 60까지 스피어 색이 검정색에서 흰색으로 변한다.