VOP 기초

가장 기본적이면서 모든 것이 가능한 Attribute VOP 노드를 통하여 VOP 이 하는 역할을 한 눈에 파악하자.

Posted: March 26, 2021

Version: Houdini 18.0


Attribute VOP 이란?

Attribute VOP 노드는 가장 기본적이면서도 모든 VEX 작업을 할 수 있는 장소이다.

Attribute VOP 노드

Attribute VOP 노드

 

앞서 VEX는 후디니 전반적인 영역에서 쓰이는 언어라고 설명했다.

즉, VOP 노드를 사용할 수 있는 곳은 SOP, POP, SHOP, COP 등 후디니 대부분의 영역이다.

여기서는 SOP(Geometry 레벨) 안에서 쓸수있는 VEX를 공부하도록 한다.

Geometry 레벨 안에서는 다음과 같이 VOP과 관련된 SOP 노드를 볼 수 있다.

노드이름에 VOP 이라고 되어있지만, Geometry 레벨에서 볼 수 있는 노드들이기 때문에 SOP 인 것이다. VOP 노드를 볼 수 있는 곳은  노드 내부에 있는 VEX Builder 레벨이다.

노드이름에 VOP 이라고 되어있지만, Geometry 레벨에서 볼 수 있는 노드들이기 때문에 SOP 인 것이다. VOP 노드를 볼 수 있는 곳은  노드 내부에 있는 VEX Builder 레벨이다.

그 밑에 있는 Point VOP, Primitive VOP, Vertex VOP 은 사실 Attribute VOP 과 동일하다. Volume VOP 은 볼륨과 관련된 VEX 작업을 하는 곳이므로 나중에 다루기로 한다.


Attribute VOP 용도

Attribute VOP 은 그 이름에서 알 수 있듯이 어트리뷰트 와 관련이 있다.

Attribute VOP 의 주된 용도는 다음과 같이 요약할 수 있다.

  • 어트리뷰트 불러오기

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

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

 

밑의 간단한 예제를 통하여 위의 세 가지 과정을 한 눈에 이해하자.

설명에 앞서 어트리뷰트, 어트리뷰트 클래스, 어트리뷰트 타입 강좌를 먼저 확인한다.


Attribute VOP 예제

후디니 네트워크뷰에서 /obj 에 박스 지오메트리를 하나 만든다.

화면 캡처 2021-03-26 111804.png

 

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

박스 오브젝트에 Color SOP 을 이용하여 색상을 부여하자.

 

TAB 메뉴를 이용하여 Color SOP 을 하나 만든다.

화면 캡처 2021-03-26 111901.png

 

만들어진 'color1' 노드를 'box1' 노드에 연결한다.

연결후 'color1' 노드의 Display Flag 를 선택한다.

연결후 'color1' 노드의 Display Flag 를 선택한다.

 

'color1' 노드의 파라미터 창을 다음과 같이 수정한다.

Color 속성은 각각 R, G, B 값을 나타낸다.

vop_basic_img6.png

 

다음과 같이 박스에 빨간색이 적용된다.

화면 캡처 2021-03-26 113643.png

 

마우스 중간 버튼을 이용해 Cd 어트리뷰트가 추가된것을 확인한다.

화면 캡처 2021-03-26 114228.png

 

자, 이제 Attribute VOP 을 사용해서 Cd 어트리뷰트를 수정해 보자.

TAB 메뉴를 이용하여 Attribute VOP 을 하나 만든다.

vop_basic_img2.png

 

만들어진 'attribvop1' 노드를 'color1' 노드에 연결한다.

Attribute VOP 노드의 첫번째 인풋에 주의해서 연결한다.

Attribute VOP 노드의 첫번째 인풋에 주의해서 연결한다.

후디니에서는 Attribute VOP 처럼 인풋이 여러개 있는 노드들이 있는데, 이때 수정하려는 주된 지오메트리를 항상 첫번째 인풋에 연결하도록 한다.

 

박스에는 아직 아무런 변화가 없다.

아직 'attribvop1' 노드 안에서 VEX 작업을 하지 않았기 때문이다.

 

'attribvop1' 을 선택한 상태에서 엔터를 눌러 VEX Builder 레벨로 들어가자.

두 개의 VOP 노드들이 보인다. 'geometryvopglobal1' 과 'geometryvopoutput1' 이다.

vop_basic_img10.png

 

우선 왼쪽에 있는 'geometryvopglobal1' 노드를 보자.

'P', 'Cd' 등의 어트리뷰트는 'attribvop1' 에 연결된 첫번째 인풋(이 경우 'color1') 이 가지고 있는 정보이다.

즉, 여기서 'Cd' 는 박스의 색상 정보인  1 0 0 값을 가진다.

 

이번에는 오른쪽에 있는 'geometryvopoutput1' 노드를 보자.

가공된 어트리뷰트를 결과값으로 내보내는 역할을 한다.

 

여기서 의문점이 생길 수 있다.

왜 두 개의 노드가 서로 다른 어트리뷰트 리스트를 가지는 것일까?

왼쪽에 있는 노드는 지오메트리에서 오는 어트리뷰트 이외에도 다른 유용한 정보들을 포함하고 있다.

예를 들어, Frame 은 현재 프레임 번호를 나타내며 이는 어트리뷰트는 아니다.

이러한 정보들은 어트리뷰트 가공시 참조만 되며 굳이 output 으로 내보낼 필요가 없기 때문이다.

위 노드에서 보이는 어트리뷰트 리스트는 후디니에서 특별히 지정된(Reserved) 이름들이다. 예를 들어, P를 수정하면 지오메트리의 점 위치가 달라지고 Cd를 수정하면 색이 변한다. 그러므로 어떤 커스텀 어트리뷰트를 만들때 그 이름이 Reserved Names 와 겹치지 않도록 주의한다.

 

이제 박스의 Cd 어트리뷰트를 수정해 보자.

VEX Builder 레벨에서 Add VOP 을 하나 만든다.

vop_basic_img11.png

 

Add VOP 은 연결된 인풋들을 더하는 역할을 한다.

'geometryvopglobal1' 노드의 Cd 를 'add1' 노드에 연결한다.

vop_basic_img12.png

 

여기에 임의의 수를 더하기 위해 Constant VOP 을 만든다.

Constant VOP 은 어떤 정해진 숫자라고 이해하면 된다.

vop_basic_img13.png

 

만들어진 'const1' 노드의 파라미터를 다음과 같이 수정한다.

Constant Type 은 어트리뷰트 타입 을 말한다.

Cd 어트리뷰트는 벡터값이기 때문에 더해주는 값도 벡터형인 Color(color) 로 바꿔준 것이다.

Color Default 속성에 0 1 1 값을 각각 입력한다.

vop_basic_img14.png

Constant Type 속성에서 3 Floats 이나 Vector 를 선택해도 같은 결과를 가져오지만, 현재 우리는 색상 정보를 수정하고 있기 때문에 Color 를 선택한 것이다.

 

'const1' 노드의 value 를 'add1' 노드 두 번째 인풋에 연결한다.

Cd 에 임의의 수를 더했는데도 박스에는 어떤 변화도 없다.

그 이유는 수정된 어트리뷰트 결과값을 아직 내보내지 않았기 때문이다.

vop_basic_img15.png

 

'add1' 노드의 결과값을 'geometryvopoutput1' 노드 Cd 에 연결해 준다.

기존의 Cd (왼쪽) 값을 수정해서 새로운 Cd (오른쪽) 로 업데이트 한 것이다.

vop_basic_img16.png

 

결과적으로 Cd 값이 1 1 1 이 되 흰 박스가 되었다.

vop_basic_img17.png

이를 수식으로 표현하면 그 원리는 다음과 같다.

새로운 Cd = 기존의 Cd + Constant 값 = (1, 0, 0) + (0, 1, 1) = (1, 1, 1)