독학.NET

VEX 어트리뷰트

VEX 코드에서 어트리뷰트에 관련된 문법에 대해서 살펴보자.

Posted: December 22, 2017
Version: Houdini 16

VEX 어트리뷰트

어트리뷰트와 관련된 작업을 할때 쓰이는 VEX 문법에 대해서 알아보자.

 

어트리뷰트와 관련된 작업이란 다음과 같다.

  • 어트리뷰트 불러오기

  • 불러온 어트리뷰트 가공하기

  • 가공된 어트리뷰트 내보내기

 

VEX 에서 어트리뷰트를 나타내는 기본형태는 다음과 같다.

 어트리뷰트에는 항상 '@' 표시가 따라다닌다.

어트리뷰트에는 항상 '@' 표시가 따라다닌다.

 

'@' 앞에 있는 알파벳 문자(위 그림 'f') 는 어트리뷰트 타입 으로 다음 네 가지를 쓸 수 있다.

  • f: Float

  • i: Integer

  • v: Vector

  • s: String

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

 

'@' 뒤에 있는 문자열(위 그림 'attribute') 은 어트리뷰트의 이름이 된다.

어트리뷰트 이름은 원하는데로 정하며 그 예는 다음과 같다.

"Cd", "P", "myattr", "MyAttr", "my_attr", "myattr2"

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

VEX 어트리뷰트 만들기

우리는 Attribute Create 노드로 어트리뷰트 만드는 법에 대해서 배웠다.

여기서는 VEX 를 이용해서 어트리뷰트를 만들어 본다.

 

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

VEX_attr_2.jpg

 

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

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

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

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

 

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

'test' 라는 Float 타입의 어트리뷰트를 만들고 그 값에 1 을 부여한 것이다.

VEX_attr_4.jpg

 

여기서 "=" 표시는 후디니 변수 처럼 어떤 값을 할당할 때 쓰인다.

VEX 에서는 문장이 끝날때마다 뒤에 ';' 표시를 붙인다.

놀랍지 않은가? 아주 쉽고 간단하다.

 

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

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

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

 

VEX 코드의 '@' 앞에 있는 알파벳을 i, v, s 순으로 바꿔가며 Spreadsheet 을 관찰해 보자.

 

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

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

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

v@test = {19.2, -2, 341};

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

 

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

s@test = "1";

s@test = "hello";

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

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


VEX 어트리뷰트 클래스

위에서는 VEX 에서 어트리뷰트 타입을 정의해 보았다.

그렇다면 VEX 에서 어트리뷰트 클래스 는 어떻게 바꾸는 것일까?

 

어트리뷰트 클래스는 Attribute Wrangle SOP 의 Run Over 속성에서 결정한다.

위에서는 이 속성의 기본값이 Points 이기 때문에 점 어트리뷰트이었던 것이다.

VEX_attr_6.jpg

 

Run Over 속성값을 바꿔가며 'attribwrangle1' 노드의 요약 정보를 확인한다.

 Run Over: Detail

Run Over: Detail

 Run Over: Points

Run Over: Points

 Run Over: Primitives

Run Over: Primitives

 Run Over: Vertices

Run Over: Vertices

Numbers 는 어떤 일을 반복수행 하는 기능으로 여기서는 다루지 않기로 한다.