VEX 함수 detail

지오메트리 detail 어트리뷰트의 데이터값을 리턴하는 detail 함수에 대해서 알아보자.

Posted: March 29, 2021

Version: Houdini 18.0


detail VEX Function

detail() 함수는 지오메트리의 디테일 어트리뷰트 값을 돌려준다.

detail() 함수의 기본형태는 다음과 같다.

detail(a, b)

 

각각의 인자는 다음과 같은 역할을 한다.

a: 어트리뷰트를 얻으려는 대상 지오메트리

b: 얻으려는 어트리뷰트 이름

괄호안에 각 인자들의 타입 은 다음과 같다.

인자 a 는 Wrangle 노드의 인풋번호이므로 Integer 타입을 기대한다.

인자 b 는 어트리뷰트 이름이므로 String 타입을 기대한다.


detail 함수 예제

detail() 함수를 이용해서 박스의 색깔을 바꿔보자.

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

vex-detail-img2.png

 

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

Null SOP, Attribute Create SOP, Attribute Wrangle SOP 노드를 만들고 다음과 같이 연결해 준다.

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

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

 

Wrangle 노드와 같이 여러개의 인풋을 연결할 때는 그 순서에 주의한다.

박스의 색깔을 변화시키는게 목적이므로 'box1' 노드를 첫번째 인풋에 연결한다.

어트리뷰트 참조만 하기때문에 'attribcreate1' 노드는 두번째 인풋에 연결한다.

 

아직 VEX 를 입력하지 않았기 때문에 박스는 어떤 변화도 없다.

vex-detail-img0.png

 

Null 노드는 점, 선, 면, 버택스 개수가 모두 0인 빈 껍데기이다.

그럼에도, Null 지오메트리는 detail 클래스 의 어트리뷰트를 가질 수 있다.

‘attribcreate1’ 노드의 파라미터를 다음과 같이 수정한다.

‘null1’ 노드에 ‘color’ 라는 이름의 detail 어트리뷰트가 할당된다.

그리고 rgb 각각 0.1/0.2/0.3 인 vector 타입의 데이터값을 갖는다.

vex-detail-img10.png

‘attribcreate1’ 노드위 마우스 중간버튼으로 color 어트리뷰트가 추가되었음을 확인한다.

vex-detail-img5.png

이 color 어트리뷰트의 데이터값을 알고싶으면 spreadsheet 을 열어서 확인한다.

위의 아이콘중 마지막에 있는 detail 버튼을 눌러서 확인한다.

위의 아이콘중 마지막에 있는 detail 버튼을 눌러서 확인한다.

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

VEXpression 칸에 입력하는 동안은 결과를 볼수 없다. 마우스 커서를 VEXpression 칸 밖으로 이동시켜 클릭해야 입력된 VEX 가 적용된다. 바로 결과를 볼 수 있는 단축키는 Ctrl + Enter 이다.

VEXpression 칸에 입력하는 동안은 결과를 볼수 없다. 마우스 커서를 VEXpression 칸 밖으로 이동시켜 클릭해야 입력된 VEX 가 적용된다. 바로 결과를 볼 수 있는 단축키는 Ctrl + Enter 이다.

 

그 결과, 박스의 색깔이 군청색이 되었다.

이제 VEX 코드를 한문장씩 차근차근 보도록 하자.

vex-detail-img9.png
 
vector read_color = detail(1, "color");

detail() 함수 첫번째 인자로 쓰인 1은 'attribwrangle1' 노드의 인풋번호를 뜻한다.

인풋번호는 0부터 시작하므로 1은 두번째 인풋인 'attribcreate1' 노드를 말한다.

즉, 어트리뷰트를 참조할 대상이 null 오브젝트인 것이다.

 

두번째 인자 “color" 는 null이 가진 어트리뷰트들 중, color 데이터를 참조한다는 뜻이다.

참고로, null은 현재 P, color 이외에는 어떤 어트리뷰트도 갖고 있지 않다.

그리고 이 리턴값을 'read_color' 라는 vector 타입 변수 에 할당하였다.

참조하려는 어트리뷰트(color) 가 벡터이므로 변수 'read_color' 의 타입도 vector 로 정해준 것이다.

 

@Cd = read_color;

박스의 색깔 'Cd' 어트리뷰트 값에 위에서 만든 'read_color' 변수를 대입했다.

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

결과적으로 박스는 null에 할당된 color 어트리뷰트를 참조하여 군청색으로 바뀌는 것이다.