Posted: January 1, 2018
Version: Houdini 16
VEX 변수란?
VEX 변수는 전에 배운 포괄적인 변수 와 그 개념과 용도는 동일하다.
포괄적인 변수는 특정 노드의 파라미터 안에서 쓰인다.
VEX 변수는 VEXpression 코드 안에서 쓰인다.
포괄적인 변수의 이름과 그 기능은 후디니가 이미 정해놓은 것이다.
예를 들어 변수 $F 는 현재의 프레임 번호를 리턴하는 기능을 한다.
반면, VEX 변수의 이름과 그 기능은 사용자가 원하는데로 정할 수 있다.
VEX 변수 기본형태
VEX 변수의 기본형태는 다음과 같다.
그 다음, 문자열을 이용해 변수의 이름(위 그림 variable) 을 정의한다.
변수 이름은 원하는데로 정하며 그 예는 다음과 같다.
"myname", "MyName", "my_name", "myname2"
VEX 변수 예제
VEX 변수를 만들고 이를 어트리뷰트 값에 대입시켜 본다.
앞서 VEX 어트리뷰트 강좌를 먼저 확인하도록 한다.
후디니를 열고 /obj 에 박스 지오메트리를 하나 만든다.
만들어진 'box1' 노드를 더블클릭하여 Geometry 레벨로 들어간다.
TAB 메뉴로 Attribute Wrangle SOP 을 만들고 다음과 같이 연결해 준다.
연결한 뒤에는 'attribwrangle1' 노드의 Display Flag 를 선택한다.
'attribwrangle1' 노드의 VEXpression 란에 다음과 같이 VEX 를 입력한다.
'val' 라는 Float 타입의 변수를 만들고 그 데이터값에 1 을 부여했다.
'test' 어트리뷰트를 만들고 이번에는 그 값에 'val' 변수를 대입했다.
이와 같이, 변수는 VEX 안에서 원할 때마다 불러져 쓰일 수 있다.
'val' 변수의 값은 1 이기 때문에 'test' 어트리뷰트 값도 1 이 된다.
'attribwrangle1' 노드의 Geometry Spreadsheet 을 열고 만들어진 어트리뷰트를 확인한다.
현재 test 는 Point 어트리뷰트임을 이해한다.
주의할 점은, 변수의 타입이 float 이므로 이를 대입한 어트리뷰트 타입도 float 이 되어야 한다.
변수의 타입을 int, vector, string 순으로 바꿔가며 Spreadsheet 을 관찰해 보자.
어트리뷰트 타입도 차례대로 i, v, s 순으로 함께 바꿔주도록 한다.
'vector'(벡터) 일 경우, 1 값이 자동으로 3 자리의 값 1, 1, 1 이 된다.
만일 벡터 3 자리에 서로 다른 값을 주고자 할때는 VEX 코드를 다음과 같이 고친다.
v@test = val;
VEX 에서 중괄호 { } 는 벡터형 데이터에 임의의 값을 지정할 때 쓰인다.
'string'(문자열) 일 경우, 에러가 나면 VEX 코드를 다음과 같이 고친다.
s@test = val;
String 타입의 데이터는 작은따옴표 ' ' 또는 큰따옴표 " " 안에서 지정되어야 한다.
이는 VEX 뿐 아니라 다른 프로그래밍 언어에서도 공통적으로 지켜지는 원칙이다.
변수 VS 어트리뷰트
VEX 에서 변수와 어트리뷰트는 비슷하다는 느낌을 받았을 것이다.
이 둘은 다음과 같은 공통점이 있다.
변수와 어트리뷰트는 그 이름과 부여되는 데이터값을 가진다.
변수와 어트리뷰트는 데이터값에 타입을 가진다.
그렇다면 이 둘의 차이점은 무엇일까?
즉, 변수와 어트리뷰트를 각각 어떤 상황에서 써야할까?
변수는 지오메트리가 소유하는 요소가 아니다.
어트리뷰트는 지오메트리가 가지는 요소이다.
변수는 어트리뷰트 값을 계산(할당) 할때 쓰이는 도구이다.
어트리뷰트는 오브젝트(지오메트리) 를 가공할때 쓰이는 도구이다.
변수는 VEXpression 안에서만 임시적으로 쓰인다.
어트리뷰트는 VEXpression 밖에서도 언제든지 불러와져 쓰일 수 있다.