POP ATTRIBUTES

Geometry 레벨의 어트리뷰트를 Dynamics 레벨까지 연결시켜주는 POP Attributes 에 대해서 알아보자.

Posted: June 19, 2018
Version: Houdini 16.5

POP Source DOP

POP Source 노드는 파티클을 방출하는 소스 오브젝트에 대한 전반적인 설정을 담당한다.

이번 강좌에서는 POP Source 노드에 있는 [Attributes] 탭 부분을 다룬다.

POP Source 노드

POP Source 노드

 

POP Source DOP 은 파티클 시뮬레이션의 전부라 해도 과언이 아니다.

이 노드를 어떻게 사용하는지에 따라 시뮬레이션의 결과물은 천지차이가 될 수 있다.


POP Attributes 예제

소스 지오메트리가 가진 어트리뷰트가 파티클에 어떤 영향을 미치는지 알아보자.

/obj 에 파티클 소스가 될 스피어를 하나 만든다.

POP_basic_3.jpg

 

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

'sphere1' 노드의 Primitive Type 옵션은 "Primitive" 를 유지한다.

POP_attr_1.jpg

 

이번에는 스피어 3개를 파티클 소스로 만들 것이다.

Color SOP 3개와 Merge SOP 1개를 만든뒤 다음과 같이 연결한다.

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

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

 

3개의 Color 노드의 각 Color 속성을 차례대로 빨강, 초록, 파랑으로 바꿔준다.

POP_attr_4.jpg
POP_attr_5.jpg
POP_attr_6.jpg
 

 

현재 3개의 스피어가 원점(0,0,0) 에서 겹쳐져 있는 상태이다.

씬뷰에서는 파랑색 스피어만 보이지만 실제로 3개의 스피어가 있음을 이해한다.

POP_attr_9.jpg

 

스피어들의 위치를 분산시키기 위해 Attribute Wrangle SOP 을 만들고 다음과 같이 연결한다.

POP_attr_7.jpg

 

만들어진 'attribwrangle1' 노드의 VEXpression 에 다음과 같이 입력한다.

각 스피어의 색상값(Cd) 을 그대로 위치값(P) 에 대입한 것이다.

POP_attr_8.jpg

 

결과적으로 스피어들은 다음과 같이 분산된다.

 

POP_attr_10.jpg

 

그 원리는 다음과 같다.

스피어1 위치(P) = 스피어1 색(Cd) = (1, 0, 0)
스피어2 위치(P) = 스피어2 색(Cd) = (0, 1, 0)
스피어3 위치(P) = 스피어3 색(Cd) = (0, 0, 1)

 

파티클 시뮬레이션을 위해 POP Network 노드를 만든다.

만들어진 'popnet' 노드를 'attribwrangle1' 노드에 연결한다.

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

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

 

이제 'popnet' 노드를 더블클릭하여 Dynamics 레벨로 들어가자.

이번 시간에는 Gravity Force DOP 없이 진행한다.

POP_attr_12.jpg

 

플레이를 해보면 3개의 스피어 모두 파티클을 방출한다.

외부힘이 없기 때문에 방출된 파티클은 태어난 자리에서 계속 고정된다.


Inherit Attributes

POP Source 노드의 파라미터에 있는 [Attributes] 탭을 집중해서 보자.

[Attributes] 탭에 있는 속성들 중에서 몇가지 중요한 것들만 설명하도록 한다.

 

방출되는 파티클은 소스 지오메트리의 어트리뷰트를 물려받을 수 있다.

Inherit Attributes 속성에서 물려받을(Inherit) 어트리뷰트를 정할 수 있다.

POP_attr_13.jpg

 

기본값인 "*" 표시는 소스가 가진 모든 어트리뷰트를 물려받는다는 말이다.

그러므로 태어나는 파티클은 그것을 방출한 스피어의 색을 갖게 된다.

만약 기본값 "*" 표시를 지우고 공란으로 만들면, 파티클은 더이상 색상정보를 물려받지 않게 된다.


Inherit Velocity

속도(Velocity) 는 방향성을 갖는 벡터(Vector) 데이터이다.

소스로부터 물려받는 어트리뷰트 중, Velocity 는 조금 특별하다.

다른 어트리뷰트와 달리, 속도는 파티클의 운동에 직접적인 영향을 끼치기 때문이다.

 

현재 3개의 스피어는 Cd 이외에 어떤 어트리뷰트도 없으므로 속도값을 만들어줘야 한다.

상위에 있는 'attribwrangle1' 노드의 VEX 코드를 다음과 같이 수정한다.

POP_attr_14.jpg

 

소문자 v 는 속도(velocity) 를 나타내는 어트리뷰트 이름이다.

즉, v 는 후디니에서 지정된(Reserved) 어트리뷰트들 중 하나이다.

 

이제 스피어들은 v 어트리뷰트를 갖게 되었고 그 값에 Cd 어트리뷰트가 할당되었다.

그 원리는 다음과 같다.

스피어1 속도(v) = 스피어1 색(Cd) = (1, 0, 0)
스피어2 속도(v) = 스피어2 색(Cd) = (0, 1, 0)
스피어3 속도(v) = 스피어3 색(Cd) = (0, 0, 1)
여기까지는 Geometry 레벨이기 때문에 속도 어트리뷰트가 스피어를 움직이게 하진 않는다. 이 속도를 물려받는 Dynamics 레벨의 파티클의 움직임이 영향을 받을 것이다.

 

다시 'popnet' Dynamics 레벨로 돌아가 플레이를 해보자.

다이나믹 레벨에서는 어떤 속성을 변경할 경우, 타임라인의 캐쉬라인이 주황색으로 바뀐다.

POP_birth_5.jpg

 

프레임 1로 돌아가 캐쉬라인이 파란색이 되면 변경된 속성이 올바르게 적용된 시뮬레이션이라는 말이다.

POP_birth_4.jpg

 

v 어트리뷰트를 물려받은 파티클이 각각의 축(X,Y,Z) 방향으로 이동하는 것을 볼 수 있다.

 

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

Inherit Velocity 속성은 물려받는 v 어트리뷰트의 세기를 결정한다.

POP_attr_15.jpg

 

프레임 1로 돌아가 플레이하면, 파티클의 이동속도가 전보다 3배 빨라진다.

현재 이 초기속도를 방해하는 어떠한 외부힘도 존재하지 않으므로, 태어난 각 파티클은 물려받은 속도값을 계속 유지하며 등속운동을 한다.