독학.NET

DOP FLIP 시뮬레이션

Flip 시뮬레이션이란 무엇이며 후디니에서 어떻게 구현되는지 알아보자.

Posted: March 8, 2017
Version: Houdini 15

Flip 시뮬레이션이란?

물과 같이 액체로 이루어진 물체의 운동을 나타내는 다이나믹이다.

 

다음과 같은 상황들이 Flip 시뮬레이션에 포함될 수 있다.

  • 욕조 안에서 물이 출렁거리는 장면

  • 계곡에서 폭포수가 떨어지는 모습

  • 화산의 용암이 천천히 흘러내리는 장면

 

Flip 시뮬레이션은 다름 아닌 파티클(POP) 시뮬레이션이다.

하지만 Flip 에서는 기본적으로 파티클 입자간의 상호작용이 가능하다.

즉, 파티클끼리 충돌하며 서로 밀어내거나 합쳐지기 때문에 좀 더 사실적인 시뮬레이션이 된다.

게다가 POP 다이나믹에서 쓰이는 여러가지 노드를 Flip 에도 적용할 수 있다는 장점도 있다.

이러한 이유로 Flip 시뮬레이션 속도는 POP 시뮬레이션보다 일반적으로 느리다.


Flip 시뮬레이션 기본구조

후디니 Flip 시뮬레이션의 기본 골격은 다음과 같다.

Flip 오브젝트가 어떤 힘을 받을 경우, Flip 솔버가 그 힘을 계산하여 오브젝트를 움직인다.


Flip 시뮬레이션 구현하기

다이나믹을 하기위해 '/obj' 에 DOP Network 노드를 하나 만든다.

만들어진 'dopnet1' 노드 안쪽 Dynamics 레벨로 들어간다.

DOP_rbd_2.jpg

 

TAB메뉴를 이용해 Flip Object 와 Flip Solver DOP 노드를 하나씩 만든다.

 

만들어진 'flipobject1' 과 'flipsolver1' 노드를 다음과 같이 연결한다.

Output Flag 를 'flipsolver1' 으로 지정해준다.

 

씬 뷰에 박스 모양의 파랑색 구슬들(파티클) 이 나타난다.

이는 'flipobject1' 파라미터에서 [Initial Data] 탭의 'SOP Path' 기본값이 박스이기 때문이다.

 

이 'SOP Path' 속성값에 여러분들이 원하는 어떤 오브젝트도 올 수 있다.

자동적으로 오브젝트 내부 공간에 파티클이 채워져 준비가 될 것이다.

 

현재 기본골격인 오브젝트와 솔버가 있지만, 플레이를 해도 파티클에는 아무 변화가 없다.

그것은 파티클을 움직이게 만드는 외부힘이 존재하지 않기 때문이다.

 

외부힘을 더하기 위해 중력을 만든다.

다음과 같이 Gravity Force DOP을 만들어서 'flipobject1' 과 'flipsolver1' 노드 사이에 연결해 준다.

 

타임라인의 플레이버튼을 클릭해 보자.

 

후디니 화면 우측 밑 Playbar 에 있는 Real Time Toggle 버튼을 눌러서 리얼타임으로 플레이 한다.

 리얼타임이란 1초에 24프레임의 속도로 플레이 하는 것을 말한다.

리얼타임이란 1초에 24프레임의 속도로 플레이 하는 것을 말한다.

 

플레이를 해 보면 구슬들이 중력으로 인하여 아래로 떨어지는 것을 볼 수 있다.

다이나믹을 플레이 할 때는 반드시 프레임 1부터 시작하도록 한다.


충돌(collision) 오브젝트 만들기

파티클이 충돌할 평면을 만들기 위해 다이나믹 레벨에서 Ground Plane DOP 을 하나 만든다.

다음과 같이 그리드 모양의 평면 오브젝트가 나타난다.

만들어진 'groundplane1' 노드의 Output Flag 를 클릭해야 평면 오브젝트를 볼 수 있다.

 

     

    자, 그럼 어떻게 파티클 (flipobject1) 을 바닥 (groundplane1) 에 충돌하게 만들 수 있을까?

    'Merge DOP' 노드를 만든 후, 다음과 같이 연결해 준다.

    만들어진 'merge1' 노드의 Output Flag 를 켜준다.

     Merge DOP 에 연결시 순서가 바뀌지 않도록 주의한다.

    Merge DOP 에 연결시 순서가 바뀌지 않도록 주의한다.

     

    우선 Merge DOP 은 Merge SOP 과 그 성격이 많이 다르다.

    'merge1' 노드의 Relationship 속성값으로 인해 그 인풋으로 오는 오브젝트들을 충돌관계에 넣고있다.

     

    Affector Relationship 속성은 인풋으로 오는 오브젝트들의 관계에서 우선 순위를 정해준다.

    기본값은 Merge DOP 의 왼쪽 인풋의 오브젝트가 오른쪽 인풋의 오브젝트에게 영향을 미치도록 되어 있다.

    즉, 파티클은 바닥의 영향을 받아 충돌하지만 바닥은 파티클의 영향을 받지 않는다.


    Flip 시뮬레이션 마무리하기

    현재 파티클과 바닥 오브젝트가 원점에 겹쳐서 위치하고 있다.

    'groundplane1' 의 Position Y 값을 조절하여 바닥을 충분히 파티클 아래쪽으로 내려 준다.

     Position 속성값은 다이나믹 최초에 (프레임이 1일 때) 해당 오브젝트의 위치값을 정해 준다.

    Position 속성값은 다이나믹 최초에 (프레임이 1일 때) 해당 오브젝트의 위치값을 정해 준다.

    모든 다이나믹 오브젝트는 파라미터에서 [Initial State] 탭을 가지고 있다.

     

    다시 시뮬레이션을 플레이 해 보자.

    파티클이 바닥에 충돌하면서 넓게 퍼져 나아가는 모습을 확인할 수 있다.

    시뮬레이션중 구슬 색깔은 각 파티클이 움직이는 속도에 따라서 변하도록 되어있다.