VOP 포인트 클라우드

포인트 클라우드의 개념을 이해하고 VEX 에서 어떻게 활용할 수 있는지 알아보자.

Posted: March 27, 2021

Version: Houdini 18.0


포인트 클라우드(Point Cloud) 란?

동일한 기능의 Attribute Transfer 노드를 먼저 확인하기 바란다.

 

많은 사람들이 이 Point Cloud 를 이해하는데 어려움을 겪는다.

특히 초보자에게는 개념을 이해한 후에도 그것이 작업 과정에서 어떻게 쓰이는지 감을 잡기 쉽지 않다.

포인트 클라우드란 글자그대로 단지 점들(Point) 의 모임(Cloud) 이다.

포인트 클라우드는 근처에 있는 점들의 어트리뷰트값을 얻기위해서 활용된다.


포인트 클라우드 원리

포인트 클라우드가 기능하는 원리는 다음과 같다.

예를 들어, A 라는 사람과 B 라는 사람이 있다.

A 가 B 에게 가까이 갈수록 A 는 B 의 성격을 닮아 간다.

 

지오메트리 A, B 가 있고 각각에 소속된 점 a, b 가 있다.

만약 a 를 기준으로 특정 거리 안에 b 가 위치하면, b 가 갖고 있는 데이터를 a 가 취할 수 있다.

여기서 데이터라 함은 다름아닌 점의 어트리뷰트 값을 말한다.

위 그림에서 점 a2 는 b2 의 데이터를 취할 수 있지만 b1, b3 로부터는 취할 수 없다.

위 그림에서 점 a2 는 b2 의 데이터를 취할 수 있지만 b1, b3 로부터는 취할 수 없다.

 

아직 감이 오질 않는가? 다음 예제를 보면 쉽게 이해할 수 있을 것이다.


포인트 클라우드 예제

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

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

vop_ptcloud_img1.png

 

'sphere1' 파라미터에 있는 'Primitive Type' 속성은 기본값을 유지한다.

기본값 'Primitive' 는 점의 개수도 한 개, 면의 개수도 한 개인 도형이다.

vop_ptcloud_img2.png

 

이제 그리드를 하나 만들어 주자.

이 그리드는 스피어가 색상 정보를 참조할 대상이 될 것이다.

 

역시 Geometry 레벨에서 Grid SOP 과 Color SOP 을 생성한다.

다음과 같이 ‘color1’ 노드를 ‘grid1’ 노드에 연결해 준다.

연결한 후에는 ‘color1’ 노드의 Display Flag 를 클릭한다.

연결한 후에는 ‘color1’ 노드의 Display Flag 를 클릭한다.

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

Color Type 옵션에서 Bounding Box 를 선택한다.

Color Type 속성에 관한 자세한 설명은 생략한다.

Color Type 속성에 관한 자세한 설명은 생략한다.

 

다음과 같이 다양한 그래디언트 색상을 가진 그리드가 되었다.

 

이제 VEX 에서 포인트 클라우드를 사용할 차례다.

포인트 클라우드를 이용해서 스피어 위치에 따라 그리드의 색상 정보를 전달 받을 것이다.

Attribute VOP 노드를 하나 생성해서 다음과 같이 연결해 준다.

'attribvop1' 에 연결시 그 순서에 주의하도록 한다. 그리드는 참조 역할만 하기 때문에 Input1 에 연결되어서는 안 된다. 색상을 변화시킬 대상인 스피어를 Input1 에 연결해 준다.

'attribvop1' 에 연결시 그 순서에 주의하도록 한다. 그리드는 참조 역할만 하기 때문에 Input1 에 연결되어서는 안 된다. 색상을 변화시킬 대상인 스피어를 Input1 에 연결해 준다.

 

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

Point Cloud Open VOP, Point Cloud Filter VOP 노드를 하나씩 만들어서 다음과 같이 연결해 준다.

vop_ptcloud_img6.png

Point Cloud Open VOP: 스피어 점 위치에서 가장 가까운 거리에 있는 그리드 점들을 걸러낸다.

Point Cloud Filter VOP: 걸러낸 그리드 점들로부터 어떤 어트리뷰트값을 얻을지 정한다.

파라미터창을 보면서 하나씩 차근차근 이해해 보자.

우선, 'pcopen1' 노드에서 Point Cloud Texture 파라미터는 참조할 지오메트리를 말한다.

앞서 우리는 참조 대상인 그리드를 상위 레벨에 있는 'attribvop1' 노드 두번째 인풋에 연결했었다.

그 두번째 인풋을 의미하는 OpInput2 를 'pcopen1' 노드의 file 인풋에 연결한다.

 

Query Position 파라미터는 어느 위치를 기준으로 가장 가까운 거리에 있는가를 파악한다.

스피어의 위치값인 P 를 'pcopen1' 노드의 P 인풋에 연결한다.

즉, 현재 스피어의 위치가 그 기준점이 된다.

vop_ptcloud_img7.png

 

Search Radius 파라미터는 기준점에서 반경 몇 미터 이내에 있는 점들만 참조할지 정하는 범위이다.

기본값 0.1 은 스피어 위치에서 반경 0.1 미터 이내에서 발견된 점들에 한해서만 참조한다는 뜻이다.

이 값이 너무 작으면 점들이 아예 발견되지 않기 때문에 충분한 값을 넣어준다(9999).

vop_ptcloud_img8.png

 

Number of Points 파라미터는 Radius 안에서 최대 몇 개의 점까지 참조할 것인지를 정한다.

만일 반경 이내에서 30개의 점이 발견되었다면 그 중 기준점에서 가장 가까운 10개의 점만 참조된다.

이는 Number of Points 기본값이 10 이기 때문이다.

이 값이 1 이상일 경우, 추가적인 복잡한 설명이 필요하므로 일단 1 값을 입력하도록 한다.

vop_ptcloud_img9.png

 

지금까지 'pcopen1' 노드가 수행한 일을 다시 한번 정리해 보자.

스피어 지오메트리가 참조할 대상으로 그리드 지오메트리를 선택한다(Point Cloud Texture).

스피어 위치(P) 를 중심으로 반경 9999미터(Search Radius) 이내에서 발견되는 그리드 점들을 걸러낸다.

9999미터는 아주 큰 숫자이므로 그리드 지오메트리의 모든 점이 발견될 것이다.

발견된 그리드 점들 중에 P에 가장 가까운 점 한 개(Number of Points) 만 결정적으로 참조한다.

 

자, 마지막까지 살아남은 한 개의 그리드 점을 참조하는 이유는 무엇인가?

그것은 그 점의 특정 어트리뷰트 정보값을 얻기 위해서이다.

얻고자 하는 어트리뷰트 이름을 'pcfilter1' 노드에서 정해준다.

 

'pcfilter1' 노드에서 'Channel' 속성값을 P 에서 색상정보인 Cd 로 바꿔준다.

'pcfilter1' 노드로부터 얻은 그리드 점의 색상정보를 'geometryvopoutput1' 노드 Cd 에 연결해 준다.

vop_ptcloud_img10.png

 

연결을 하자마자 스피어 색깔이 변하는 것을 확인할 수 있다.


포인트 클라우드 예제 마무리

결과를 확인하기 위해 VEX Builder 레벨에서 상위 Geometry 레벨로 이동한다.

키보드의 ctrl 키를 누른 상태로 'color1' 노드의 'template flag' 를 클릭한다.

ctrl키를 누르지않고 template flag 를 클릭할경우, 그리드는 와이어형태로 나타나기때문에 컬러를 확인하기 어렵다.

ctrl키를 누르지않고 template flag 를 클릭할경우, 그리드는 와이어형태로 나타나기때문에 컬러를 확인하기 어렵다.

 

다음과 같이 씬 뷰에서 스피어와 그리드의 컬러를 모두 볼 수 있다.

'sphere1' 노드를 선택하고 씬 뷰에 마우스를 댄 상태에서 엔터키를 누른다.

나타난 핸들을 이용해서 스피어를 그리드 위에서 여기저기 움직여 본다.

스피어의 색깔이 변하는 것을 볼 수 있는가?

vop_ptcloud_img12.png

 

다음은 스피어를 그리드 위에서 회전시킨 영상이다.

스피어 위치가 변함에 따라 근처에 있는 그리드 점 색깔이 스피어로 전달되고 있다.