VEX 변수

VEX 코드에서 변수에 관련된 문법에 대해서 살펴보자.

Posted: January 1, 2018

Version: Houdini 16


VEX 변수란?

VEX 변수는 전에 배운 포괄적인 변수 와 그 개념과 용도는 동일하다.

 

포괄적인 변수는 특정 노드의 파라미터 안에서 쓰인다.

VEX 변수는 VEXpression 코드 안에서 쓰인다.

 

포괄적인 변수의 이름과 그 기능은 후디니가 이미 정해놓은 것이다.

예를 들어 변수 $F 는 현재의 프레임 번호를 리턴하는 기능을 한다.

반면, VEX 변수의 이름과 그 기능은 사용자가 원하는데로 정할 수 있다.


VEX 변수 기본형태

VEX 변수의 기본형태는 다음과 같다.

VEX_var_1.jpg

 

맨 먼저 변수가 가진 데이터의 타입 (위 그림 float) 을 정의한다.

데이터의 타입에는 기본적으로 다음 네 가지를 쓸 수 있다.

  • float

  • int

  • vector

  • string

데이터 타입은 위의 네 가지 이외에도 여러개가 더 있는데, 이는 나중에 다루기로 한다.

 

그 다음, 문자열을 이용해 변수의 이름(위 그림 variable) 을 정의한다.

변수 이름은 원하는데로 정하며 그 예는 다음과 같다.

"myname", "MyName", "my_name", "myname2"

변수 이름은 문자와 숫자의 조합을 허락하지만 숫자가 맨 앞이 될 수 없다. 또한 알파벳의 대소문자를 구별해서 인지하고 문자열 중간에 어디든지 공백(스페이스) 이 올 수 없다.

VEX 변수 예제

VEX 변수를 만들고 이를 어트리뷰트 값에 대입시켜 본다.

앞서 VEX 어트리뷰트 강좌를 먼저 확인하도록 한다.

 

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

VEX_attr_2.jpg

 

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

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

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

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

 

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

VEX_var_2.jpg
 
float val = 1;

'val' 라는 Float 타입의 변수를 만들고 그 데이터값에 1 을 부여했다.

 
f@test = val;

'test' 어트리뷰트를 만들고 이번에는 그 값에 'val' 변수를 대입했다.

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

 

'val' 변수의 값은 1 이기 때문에 'test' 어트리뷰트 값도 1 이 된다.

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

현재 test 는 Point 어트리뷰트임을 이해한다.

현재 test 는 Point 어트리뷰트임을 이해한다.

 

주의할 점은, 변수의 타입이 float 이므로 이를 대입한 어트리뷰트 타입도 float 이 되어야 한다.

 

변수의 타입을 int, vector, string 순으로 바꿔가며 Spreadsheet 을 관찰해 보자.

어트리뷰트 타입도 차례대로 i, v, s 순으로 함께 바꿔주도록 한다.

 

'vector'(벡터) 일 경우, 1 값이 자동으로 3 자리의 값 1, 1, 1 이 된다.

만일 벡터 3 자리에 서로 다른 값을 주고자 할때는 VEX 코드를 다음과 같이 고친다.

vector val = {1, 2, 3};
v@test = val;

VEX 에서 중괄호 { } 는 벡터형 데이터에 임의의 값을 지정할 때 쓰인다.

 

'string'(문자열) 일 경우, 에러가 나면 VEX 코드를 다음과 같이 고친다.

string val = "hello";
s@test = val;

String 타입의 데이터는 작은따옴표 ' ' 또는 큰따옴표 " " 안에서 지정되어야 한다.

이는 VEX 뿐 아니라 다른 프로그래밍 언어에서도 공통적으로 지켜지는 원칙이다.


변수 VS  어트리뷰트

VEX 에서 변수와 어트리뷰트는 비슷하다는 느낌을 받았을 것이다.

 

이 둘은 다음과 같은 공통점이 있다.

변수와 어트리뷰트는 그 이름과 부여되는 데이터값을 가진다.

변수와 어트리뷰트는 데이터값에 타입을 가진다.

 

그렇다면 이 둘의 차이점은 무엇일까?

즉, 변수와 어트리뷰트를 각각 어떤 상황에서 써야할까?

 

변수는 지오메트리가 소유하는 요소가 아니다.

어트리뷰트는 지오메트리가 가지는 요소이다.

 

변수는 어트리뷰트 값을 계산(할당) 할때 쓰이는 도구이다.

어트리뷰트는 오브젝트(지오메트리) 를 가공할때 쓰이는 도구이다.

 

변수는 VEXpression 안에서만 임시적으로 쓰인다.

어트리뷰트는 VEXpression 밖에서도 언제든지 불러와져 쓰일 수 있다.

지오메트리가 소유하는 어트리뷰트 개수가 많을수록 메모리 사용량과 컴퓨터 처리시간도 늘어나게 된다. 그러므로 데이터 작업시 변수로 쓸건지 어트리뷰트로 쓸건지 고심할 필요가 있다. 굳이 어트리뷰트로 만들어서 VEXpression 밖에서도 쓸일이 아니라면 변수로 만들어서 메모리 사용량을 줄이는게 좋다.