독학.NET

VOP 기초

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

Posted: February 2, 2017
Version: Houdini 15

Attribute VOP 이란?

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

Attribute VOP 노드

Attribute VOP 노드

 

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

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

그 중에, 우선 SOP 영역에서 VOP 에 연관된 노드들을 살펴보자.

 

/obj 에 지오메트리를 한 개 만들고 안으로 들어가서 네트워크뷰에 Tab키를 친다.

탭 메뉴에서 '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 에 박스 지오메트리를 하나 만든다.

 

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

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

 

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

 

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

 

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

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

 

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

 

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

 

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

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

 

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

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

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

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

 

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

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

 

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

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

 

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

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

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

 

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

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

 

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

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

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

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

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

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

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

 

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

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

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

 

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

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

 

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

그 원리는 다음과 같다.

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