RBD 시뮬레이션

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

Posted: July 24, 2019

Version: Houdini 17.5


RBD 시뮬레이션이란?

RBD Object 노드

RBD Object 노드

Rigid Body Dynamics 의 줄임말이다.

글자 그대로 어떤 견고한 물체의 운동을 나타내는 다이나믹이다.

 

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

  • 접시가 땅에 떨어져 깨지는 모습

  • 볼링공으로 볼링핀들을 때리는 모습

  • 건물이 지진으로 붕괴되는 모습


RBD 시뮬레이션 기본구조

RBD 시뮬레이션의 기본 골격은 다음과 같다.

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

RBD Object, RBD Solver 노드

RBD Object, RBD Solver 노드


RBD 시뮬레이션 구현하기

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

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

DOP_rbd_3.jpg

 

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

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

Output Flag 를 맨밑에 있는 'output' 노드로 지정해준다.

DOP_rbd_4.jpg
DOP Network 안에 자동으로 생성되는 Output DOP 노도는 최종 시뮬레이션의 결과를 하드디스크에 저장해주는 기능을 한다. 실무에서는 거의 사용하지 않으므로 가볍게 생각하도록 하자.

씬뷰에는 다음과 같이 스피어 오브젝트가 한개 만들어진다.

DOP_rbd_5.jpg

이는 'rbdobject1' 노드의 SOP Path 기본값이 스피어이기 때문이다.

이 SOP Path 파라미터에는 여러분들이 원하는 어떠한 오브젝트도 올 수 있다.

DOP_rbd_7.jpg

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

그것은 스피어를 움직이게 만드는 외부힘이 존재하지 않기 때문이다.

그렇다면 우리가 알고있는 대표적인 외부힘인 중력을 더해보자.

TAB 메뉴를 이용해서 Gravity Force DOP 노드를 한개 만들어준다.

DOP_rbd_8.jpg

만들어진 ‘gravity1’ 노드를 'rbdsolver1' 과 'output' 노드 사이에 연결해 준다.

DOP_rbd_9.jpg

'gravity1' 노드의 Force 기본값이 (0, -9.80665, 0) 임을 확인할 수 있다.

DOP_rbd_10.jpg

후디니 화면 밑쪽 Playbar 에 있는 Play 버튼을 클릭해서 플레이 해본다.

이때 플레이버튼 밑에 있는 Real Time Toggle 버튼을 눌러서 리얼타임으로 플레이 한다.

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

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

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

여러분들은 방금 후디니에서 최초의 다이나믹 시뮬레이션을 했다.

다이나믹을 플레이 할 때는 반드시 프레임 번호가 1인 지점에서 시작하도록 한다.

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

스피어가 충돌할 평면을 만들기 위해 Ground Plane DOP 을 하나 만든다.

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

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

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

자, 그럼 어떻게 스피어(rbdobject1) 를 바닥(groundplane1) 에 충돌하게 만들 수 있을까?

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

Output Flag 는 항상 마지막 ‘output’ 노드에서 활성화시키도록 주의한다.

Output Flag 는 항상 마지막 ‘output’ 노드에서 활성화시키도록 주의한다.


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

'merge1' 노드의 Relationship 속성때문에 인풋으로 오는 오브젝트들을 충돌관계에 넣는다.

DOP_rbd_17.jpg

 

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

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

즉, 스피어는 바닥의 영향을 받아 충돌하지만 바닥은 스피어의 영향을 받지 않는다.


그러므로 Merge DOP 에 연결시 인풋들의 순서에 특별히 주의한다.


RBD 시뮬레이션 마무리하기

현재 스피어와 바닥 오브젝트가 원점에 겹쳐서 위치하고 있다.

DOP_rbd_18.jpg

‘rbdobject1’ 의 Position Y 값을 조절하여 스피어를 바닥위로 충분히 올려준다.

[Initial State] 탭은 다이나믹 최초(Frame:1) 에 해당 오브젝트의 위치 또는 회전값을 정해 준다.

[Initial State] 탭은 다이나믹 최초(Frame:1) 에 해당 오브젝트의 위치 또는 회전값을 정해 준다.

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


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

스피어가 바닥에 충돌하는 모습을 확인할 수 있다.