독학.NET

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 밖에서도 언제든지 불러와져 쓰일 수 있다.

지오메트리가 소유하는 어트리뷰트 개수가 많을수록 메모리 사용량과 컴퓨터 처리시간도 늘어나게 된다.