Posted: April 12, 2021
Version: Houdini 18.0
Volume VOP 이란?
볼륨의 Voxel 에 부여된 데이터를 수정하거나 새로운 데이터를 만들어주는 역할을 한다.
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’ 에 토러스 지오메트리를 하나 만든다.
만들어진 'torus1' 노드를 더블클릭하여 Geometry 레벨로 들어간다.
이제 토러스 오브젝트를 볼륨으로 변환시켜 보자.
IsoOffset 노드를 한개 만들고 다음과 같이 연결한다.
연결한 뒤에는 'isooffset1' 노드의 Display Flag 를 선택한다.
다음과 같이 토러스가 바로 볼륨으로 변환된다.
'isooffset1' 노드의 파라미터를 다음과 같이 수정한다.
name 속성에서 변환된 볼륨의 이름을 정해준다.
uniform sampling divs 값을 높혀서 voxel 양을 늘려준다.
표현할 voxel 개수가 늘면서 토러스 모양에 가까운 볼륨이 된다.
이제 Volume VOP 노드를 이용해서 density 볼륨을 수정해 보자.
Volume VOP 노드를 만들어 다음과 같이 연결해 준다.
연결한 뒤에는 'volumevop1' 노드의 Display Flag 를 선택한다.
볼륨에는 아직 아무런 변화가 없다.
아직 'volumevop1' 노드 안에서 VEX 작업을 하지 않았기 때문이다.
'volumevop1' 노드를 더블클릭해서 VEX Builder 레벨로 들어간다.
안쪽에는 두개의 VOP 노드가 있다. 'volumevopglobal1' 과 'volumevopoutput1' 이다.
왼쪽에 있는 '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 을 한개씩 만들고 다음과 같이 연결한다.
‘aanoise1’ 노드는 ‘volumevopglobal1’ 노드의 P를 기반으로 노이즈를 만들어 낸다.
이때 P는 볼륨이기 때문에 각각의 voxel의 위치값을 나타낸다.
Multiply VOP 은 연결된 인풋들을 서로 곱하는 역할을 한다.
즉, 기존의 density 값에 노이즈 함수를 곱해주는 것이다.
density 값에 노이즈를 곱한뒤에도 볼륨에는 어떤 변화도 없다.
그 이유는 곱한 결과값을 아직 내보내지 않았기 때문이다.
'multiply1' 노드의 결과값을 'volumevopoutput1' 노드 density에 연결해 준다.
기존의 density(왼쪽) 값을 수정해서 새로운 density(오른쪽) 로 업데이트 한 것이다.
씬뷰에는 노이즈의 영향으로 density 볼륨이 얼룩덜룩해진걸 확인할 수 있다.
볼륨이 잘안보이면 ‘aanoise1’ 노드의 amplitude 값을 많이 높여준다.