Posted: December 22, 2017
Version: Houdini 16
VEX 어트리뷰트
어트리뷰트와 관련된 작업을 할때 쓰이는 VEX 문법에 대해서 알아보자.
어트리뷰트와 관련된 작업이란 다음과 같다.
어트리뷰트 불러오기
불러온 어트리뷰트 가공하기
가공된 어트리뷰트 내보내기
VEX 에서 어트리뷰트를 나타내는 기본형태는 다음과 같다.
'@' 뒤에 있는 문자열(위 그림 'attribute') 은 어트리뷰트의 이름이 된다.
어트리뷰트 이름은 원하는데로 정하며 그 예는 다음과 같다.
"Cd", "P", "myattr", "MyAttr", "my_attr", "myattr2"
VEX 어트리뷰트 만들기
우리는 Attribute Create 노드로 어트리뷰트 만드는 법에 대해서 배웠다.
여기서는 VEX 를 이용해서 어트리뷰트를 만들어 본다.
후디니를 열고 /obj 에 박스 지오메트리를 하나 만든다.
만들어진 'box1' 노드를 더블클릭하여 Geometry 레벨로 들어간다.
TAB 메뉴로 Attribute Wrangle SOP 을 만들고 다음과 같이 연결해 준다.
'attribwrangle1' 노드의 VEXpression 란에 다음과 같이 VEX 를 입력한다.
'test' 라는 Float 타입의 어트리뷰트를 만들고 그 값에 1 을 부여한 것이다.
여기서 "=" 표시는 후디니 변수 처럼 어떤 값을 할당할 때 쓰인다.
VEX 에서는 문장이 끝날때마다 뒤에 ';' 표시를 붙인다.
놀랍지 않은가? 아주 쉽고 간단하다.
'attribwrangle1' 노드의 Geometry Spreadsheet 을 열고 만들어진 어트리뷰트를 확인한다.
VEX 코드의 '@' 앞에 있는 알파벳을 i, v, s 순으로 바꿔가며 Spreadsheet 을 관찰해 보자.
'v'(벡터) 일 경우, 1 값이 자동으로 3 자리의 값 1, 1, 1 으로 된다.
만일 벡터 3 자리에 서로 다른 값을 주고자 할때는 VEX 코드를 다음과 같이 고친다.
v@test = {19.2, -2, 341};
VEX 에서 중괄호 { } 는 벡터형 데이터에 임의의 값을 지정할 때 쓰인다.
's'(문자열) 일 경우, 에러가 나면 VEX 코드를 다음과 같이 고친다.
s@test = "hello";
String 타입의 데이터는 작은따옴표 ' ' 또는 큰따옴표 " " 안에서 지정되어야 한다.
이는 VEX 뿐 아니라 다른 프로그래밍 언어에서도 공통적으로 지켜지는 원칙이다.
VEX 어트리뷰트 클래스
위에서는 VEX 에서 어트리뷰트 타입을 정의해 보았다.
그렇다면 VEX 에서 어트리뷰트 클래스 는 어떻게 바꾸는 것일까?
어트리뷰트 클래스는 Attribute Wrangle SOP 의 Run Over 속성에서 결정한다.
위에서는 이 속성의 기본값이 Points 이기 때문에 점 어트리뷰트이었던 것이다.
Run Over 속성값을 바꿔가며 'attribwrangle1' 노드의 요약 정보를 확인한다.