VOL VOLUME VOP

Voxel 마다 가지는 데이터값을 자유자재로 컨트롤하는 Volume VOP 노드에 대해서 알아보자.

Posted: April 12, 2021

Version: Houdini 18.0


Volume VOP 이란?

볼륨의 Voxel 에 부여된 데이터를 수정하거나 새로운 데이터를 만들어주는 역할을 한다.

Volume VOP 노드의 종류는 엄밀히 따지면 SOP 노드이다. 왜냐하면 이 노드는 Geometry 레벨에서 만들수 있기 때문이다.

Volume VOP 노드의 종류는 엄밀히 따지면 SOP 노드이다. 왜냐하면 이 노드는 Geometry 레벨에서 만들수 있기 때문이다.

Volume VOP 노드는 Attribute VOP 노드와 그 기능과 작업 방식이 비슷하다.

두 노드 모두 각각의 안쪽 VEX Builder 레벨에서 VOP노드 를 연결하면서 프로그래밍하는 방식이다.

두 노드 모두 어떤 데이터를 수정하거나 새로운 데이터를 만드는 용도이다.

Volume VOP 노드와 Attribute VOP 노드의 차이는 다음과 같다.

Attribute VOP 은 지오메트리의 기본요소 를 기반으로 연산된다.

Volume VOP 은 볼륨의 Voxel 을 기반으로 연산된다.

Attribute VOP 에서는 지오메트리 어트리뷰트를 데이터로서 이용한다.

Volume VOP 에서는 볼륨 이름을 데이터로서 이용한다.


Volume VOP 용도

Volume VOP 은 그 이름에서 알 수 있듯이 볼륨 데이터와 관련이 있다.

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

  • 기존의 볼륨 데이터 불러오기

  • 불러온 볼륨 데이터 가공하기

  • 가공된 볼륨 데이터 내보내기

 

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


Volume VOP 예제

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

vol-vop-img1.png

 

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

이제 토러스 오브젝트를 볼륨으로 변환시켜 보자.

IsoOffset 노드를 한개 만들고 다음과 같이 연결한다.

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

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

다음과 같이 토러스가 바로 볼륨으로 변환된다.

vol-vop-img3.png

'isooffset1' 노드의 파라미터를 다음과 같이 수정한다.

name 속성에서 변환된 볼륨의 이름을 정해준다.

uniform sampling divs 값을 높혀서 voxel 양을 늘려준다.

vol-vop-img4.png

표현할 voxel 개수가 늘면서 토러스 모양에 가까운 볼륨이 된다.

vol-vop-img5.png

 

마우스 중간 버튼을 이용해 ‘isooffset1’ 노드정보를 확인한다.

density 라는 이름의 scalar 타입의 볼륨을 볼 수 있다.

vol-vop-img6.png

이제 Volume VOP 노드를 이용해서 density 볼륨을 수정해 보자.

Volume VOP 노드를 만들어 다음과 같이 연결해 준다.

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

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

볼륨에는 아직 아무런 변화가 없다.

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

'volumevop1' 노드를 더블클릭해서 VEX Builder 레벨로 들어간다.

안쪽에는 두개의 VOP 노드가 있다. 'volumevopglobal1' 과 'volumevopoutput1' 이다.

vol-vop-img8.png

왼쪽에 있는 'volumevopglobal1' 노드를 보자.

‘density’ 는 위의 ‘volumevop1’ 노드의 첫번째 인풋인 ‘isooffset1’ 노드에서 오는 density 값이다.

이 density는 ‘isooffset1’ 노드에서 각각의 voxel 마다 가지고있는 데이터이다.

씬뷰에서 흰색부분의 voxel들은 density 1 값을 가진다.

씬뷰에서 검정부분의 voxel들은 density 0 값을 가진다.

 

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

가공된 볼륨데이터를 결과값으로 내보내는 역할을 한다.

‘volumevopglobal1’ 노드의 리스트에는 볼륨데이터 이외에도 다른 유용한 정보들을 포함하고 있다.

예를 들어, Frame 은 현재 프레임 번호를 나타내며 이는 볼륨데이터는 아니다.

이러한 정보들은 볼륨데이터 가공시 참조만 되며 굳이 output 으로 내보낼 필요가 없기 때문이다.

 

이제 density 볼륨의 데이터를 수정해 보자.

VEX Builder 레벨에서 Anti-Aliased Noise VOP, Multiply VOP 을 한개씩 만들고 다음과 같이 연결한다.

vol-vop-img9.png

‘aanoise1’ 노드는 ‘volumevopglobal1’ 노드의 P를 기반으로 노이즈를 만들어 낸다.

이때 P는 볼륨이기 때문에 각각의 voxel의 위치값을 나타낸다.

Multiply VOP 은 연결된 인풋들을 서로 곱하는 역할을 한다.

즉, 기존의 density 값에 노이즈 함수를 곱해주는 것이다.

density 값에 노이즈를 곱한뒤에도 볼륨에는 어떤 변화도 없다.

그 이유는 곱한 결과값을 아직 내보내지 않았기 때문이다.

'multiply1' 노드의 결과값을 'volumevopoutput1' 노드 density에 연결해 준다.

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

vol-vop-img10.png

씬뷰에는 노이즈의 영향으로 density 볼륨이 얼룩덜룩해진걸 확인할 수 있다.

볼륨이 잘안보이면 ‘aanoise1’ 노드의 amplitude 값을 많이 높여준다.

vol-vop-img11.png
만약 노이즈 결과를 기존의 density에 곱하지 않고 직접 'volumevopoutput1' density에 연결하면 토러스 모양이 없어지고 박스 형태로 얼룩덜룩하게 된다. 이는 노이즈의 결과값이 바운딩 박스안 모든 voxel의 density 데이터로 할당되기 때문이다.