VOL VDB FROM POLYGONS

인풋 오브젝트를 볼륨으로 만들어주는 또다른 방법에 대해서 알아보자.

Posted: January 29, 2018
Version: Houdini 16

VDB from Polygons Surface Operator

VDB from Polygons SOP 역시 인풋 지오메트리(폴리곤) 를 볼륨으로 변환시켜 준다.

VDB from Polygons SOP 노드

VDB from Polygons SOP 노드

 

VDB from Polygons SOP 은 다음과 같은 특징을 가진다.

 

1. Output: VDB 볼륨

VDB from Polygons 노드는 Open VDB Volume 을 생성한다.

 

2. 볼륨 타입: Scalar 필드

만들어진 볼륨의 타입은 Float(Scalar) 필드 이다.

 

3. Input: Water-Tight

인풋으로 오는 도형에 빈틈이 없고 막혀있어야(Water-Tight) 정확한 볼륨을 계산해 준다.

 

이러한 특징들은 아래 예제를 따라하며 복습하도록 한다.


VDB from Polygons 예제

VDB from Polygons 노드를 이용해서 토러스 오브젝트를 볼륨으로 변환시켜 보자.

 

후디니를 열고 /obj 에 토러스 지오메트리를 만든다.

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

VOL_vdb-poly_2.jpg

 

TAB 메뉴에 'VDB from' 라고 치면 VDB 볼륨을 생성하는 여러가지 노드를 볼 수 있다.

토러스 오브젝트는 폴리곤이므로 VDB from Polygons 노드를 선택한다.

VOL_vdb-poly_3.jpg
파티클(점) 을 VDB 볼륨으로 변환시키는 VDB from Particle Fluid, VDB from Particles 노드는 다른 강좌에서 다루기로 한다.

 

만들어진 'vdbfrompolygons1' 노드를 'torus1' 에 연결한다.

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

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

 

다음과 같이 토러스 지오메트리가 VDB 볼륨으로 변환된다.

결과물이 VDB 볼륨이기 때문에 Voxel 들은 최대한 토러스 형태에 가깝게 형성된다.

Wireframe 모드에서는 볼륨이 나타나지 않는다. 씬 뷰에서 단축키 'w' 를 눌러서 Shaded 모드로 확인하도록 한다.

Wireframe 모드에서는 볼륨이 나타나지 않는다. 씬 뷰에서 단축키 'w' 를 눌러서 Shaded 모드로 확인하도록 한다.

만일 인풋 타입이 폴리곤이 아니면(Mesh, Nurbs 등) 이를 자동으로 Polygon 으로 컨버팅한 후 볼륨으로 만든다.
VDB 볼륨은 인풋의 바운딩 박스 전체를 계산할 필요가 없으므로 후디니 볼륨보다 그 처리속도가 훨씬 빠르다.

 

'vdbfrompolygons1' 노드 위에서 마우스 중간버튼으로 요약 정보를 확인하자.

현재 11,468(35x15x35) 개의 Voxel 들로 이루어진 것을 확인할 수 있다.

VOL_vdb-poly_7.jpg

 

요약 정보에는 추가로 Voxel Size 라는 것이 보인다.

Voxel Size 정보는 볼륨 변환에 사용되는 Voxel 개수에 영향을 준다.

 

이는 'vdbfrompolygons1' 노드에 있는 Voxel Size 속성에서 결정한다.

VOL_vdb-poly_8.jpg

 

기본값인 0.1 은 0.1 미터당 한개의 Voxel이 채워진다는 뜻이다.

예를 들어, X축으로 1미터 길이의 오브젝트는 X축으로 10개의 Voxel이 채워지게 된다.

후디니에서 길이를 나타내는 기본단위는 미터(m) 임을 기억한다.

 

Voxel Size 값이 낮을수록 Voxel 개수가 늘어나면서 인풋의 디테일을 더욱 잘 나타낼 수 있다.

값을 너무 낮게 설정할 경우, 버벅거림과 함께 프로그램이 다운될 수 있으니 주의하도록 한다.

Voxel Size 를 반으로 줄인다고 전체 Voxel 개수도 두 배가 된다고 생각하면 큰 오산이다. 줄어든 Voxel Size 는 X,Y,Z 세 개의 축 모두에 영향을 주어 전체 Voxel 개수는 기하급수적으로 증가하게 된다는 점을 명심한다.

 

여기서 의문점이 생기게 된다.

'torus1' 노드의 요약 정보를 보면 토러스 사이즈가 XYZ 각각 3, 1, 3 미터이다.

'torus1' 노드의 바운딩 박스 사이즈

'torus1' 노드의 바운딩 박스 사이즈

 

Voxel Size 가 0.1 이므로 Voxel 개수는 9000(30x10x30) 개가 되어야 한다.

그런데 11,468(35x15x35) 개로 계산된 이유는 무엇일까?

 

이는 볼륨변환시 바운딩 박스 가 바뀌기 때문이다.

'torus1' 에서 3, 1, 3 미터였던 바운딩 박스가 'vdbfrompolygons1' 에서 3.5, 1.5, 3.5 미터로 늘어난다.

이 늘어난 길이를 0.1 로 나눴기 때문에 Voxel 개수가 XYZ 각각 35, 15, 35 개가 된 것이다.

이렇게 볼륨변환시 바뀌는 바운딩 박스의 크기는 후디니에서 자동으로 계산되어 나오는 수치이다.

 

또다른 의문점은 총 Voxel 개수에 있다.

35x15x35 를 계산해보면(곱하면) 총 Voxel 개수는 18,375 여야 한다.

 

이 개수가 11,468 개로 줄어든 이유는 VDB 볼륨의 특징에서 기인한다.

즉, 전체 바운딩 박스를 채우고 있는 18,375개 중에 유효한 Voxel은 토러스 형태에 근접한 11,468개 뿐이다.

VOL_vdb-poly_6.jpg

 

게다가 'vdbfrompolygons1' 노드의 Fill Interior 옵션이 꺼져있기 때문에 Voxel 개수는 더욱 줄어든다.

Fill Interior 옵션은 토러스 내부에도 Voxel 을 채워넣는 역할을 한다.

VOL_vdb-poly_10.jpg

 

결국 VDB from Polygons 노드는 내부/외부 가 아닌 지오메트리 겉면에 가깝게(얇게) 형성된다는 것을 알 수 있다.

토러스를 형성하는 VDB 볼륨을 비주얼라이즈 한 모습

토러스를 형성하는 VDB 볼륨을 비주얼라이즈 한 모습

 

이는 'vdbfrompolygons1' 노드에서 왜 볼륨을 Distance VDB 라고 불리는지와 관련이 있다.

VOL_vdb-poly_12.jpg

 

이 Distance VDB 를 이해하려면 SDF(Signed Distance Field) 개념의 등장이 필요하다.

SDF 볼륨에 관해서는 다음 강좌에서 자세히 다루기로 한다.