독학.NET

VELLUM 시뮬레이션

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

Posted: July 31, 2019

Version: Houdini 17.5


Vellum 시뮬레이션이란?

DOP_vellum_1.jpg

후디니 17부터 새롭게 선보이는 다이나믹 종류중 하나이다.

유연하고 변형이 쉬운 물체를 다룬다는 점에서 Wire, Cloth 다이나믹과 흡사할 수 있다.

 

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

  • 새의 움직임에 따라 반응하는 깃털

  • 자동차가 충돌하거나 전복되면서 변형되는 모습

  • 풍선들이 서로 부딪히며 움직이는 모습


Vellum 시뮬레이션 기본구조

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

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

Vellum Object, Vellum Solver 노드

Vellum Object, Vellum Solver 노드

Vellum 오브젝트는 다음 두가지 요소로 구성되어 있다.

1. Vellum Geometry

시뮬레이션을 실행할 주대상 지오메트리를 말한다.

Constraint Geometry 에 의해서 그 움직임이 제한을 받는다.

2. Constraint Geometry

주대상 지오메트리의 형태를 유지시키기 위한 점들간의 뼈대를 말한다.

Vellum Geometry 가 비현실적으로 줄어들거나 늘어나는 움직임에 제한을 준다.

예를 들어, 연날리기를 생각해보면 이해하기 쉽다. 바람에 따라 펄러거리는 종이부분이 Vellum 지오메트리가 되고, 종이가 구겨지거나 찢어지지 않도록 지탱해주는 뼈댓살이 Constraint 지오메트리가 되는 것이다.

Vellum 시뮬레이션 구현하기

이번 시간에는 /obj 가 아닌 Geometry 레벨에서 다이나믹 셋업을 한다.

/obj 에 Geometry 노드를 한개 만든다.

만들어진 ‘geo1’ 노드를 더블클릭 해서 Geometry 레벨로 들어간다.

DOP_vellum_4.jpg

이제 다이나믹을 하기위해 DOP Network 노드를 하나 만들자.

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

DOP_vellum_5.jpg

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

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

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

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

이전까지 배운 다른 다이나믹 오브젝트와 다르게 기본값으로 나타나는 지오메트리가 없다.

그럼 시뮬레이션할 대상인 Vellum 지오메트리를 직접 준비하면 된다.

Geometry 레벨로 다시 올라가 /obj/geo1 안에서 Grid SOP 노드를 만든다.

DOP_vellum_6.jpg


만들어진 ‘grid1’ 노드의 Connectivity 옵션에서 Triangles 를 선택한다.

DOP_vellum_7.jpg

빗금들이 추가되면서 사각형이었던 면들이 삼각형으로 바뀐다.

이제 이 그리드는 우리들의 Vellum 지오메트리가 될 것이다.

하지만 그리드 형태를 지탱해줄 Constraint 지오메트리 또한 필요하다.

DOP_vellum_8.jpg

/obj/geo1 안에서 Vellum Constraints SOP 을 만든다.

이 노드는 Vellum 시뮬레이션에 필요한 뼈대를 자동으로 생성한다.

DOP_vellum_9.jpg

만들어진 ‘vellumconstraints1’ 노드를 ‘grid1’ 노드에 연결해 준다.

이때 그리드가 ‘vellumconstraints1’ 노드 첫번째 인풋에 연결하도록 주의한다.

연결후에는 ‘vellumconstraints1’ 노드의 Display Flag 를 선택한다.

연결후에는 ‘vellumconstraints1’ 노드의 Display Flag 를 선택한다.

‘vellumconstraints1’ 노드의 Constraint Type 옵션에서 Cloth 를 선택한다.

다이나믹하려는 대상의 특성에 따라 이 옵션을 적절히 선택해주어야 한다.

DOP_vellum_11.jpg
Vellum Constraints SOP 은 엄청난 양의 노드들이 모여있는 HDA(Houdini Digital Asset) 이다. 처음부터 모두 이해하기에는 너무 방대하므로 욕심을 버리고 노드가 하는 주된 기능만 가볍게 이해하고 넘어가자.

그리드 면위에 수많은 흰색 와이어들이 거미줄같이 연결되어 있다.

바로 이 흰색 와이어들이 Constraint 지오메트리다.

Vellum Constraints 노드는 특이하게 세가지 인풋/아웃풋을 갖는다.

1. Vellum Geometry: 그리드 지오메트리

2. Constraint Geometry: 흰색 와이어 지오메트리

3. Collision Geometry: 충돌 지오메트리

Vellum Geometry

Vellum Geometry

Constraint Geometry

Constraint Geometry

임시로 Null SOP 을 만들어서 세가지 아웃풋을 차례대로 확인해본다.

세번째 충돌 지오메트리는 이번 강좌에서는 무시하도록 한다.

DOP_vellum_13.jpg

이제 Vellum 시뮬레이션을 할 준비가 모두 끝났다.

‘vellumconstraints1’ 노드를 ‘dopnet1’ 노드 첫번째/두번째 인풋에 차례대로 연결한다.

DOP_vellum_16.jpg

‘dopnet1’ 노드를 더블클릭해서 다시 Dynamics 레벨로 들어가보자.

이전과 달리, 씬뷰에는 우리가 만든 그리드가 자동으로 들어와 있다.

이는 ‘vellumobject1’ 노드의 [Initial Data] 탭에 쓰여있는 익스프레션 때문에 그렇다.

DOP_vellum_17.jpg

`opinputpath("..", 0)` 은 상위노드, 즉 ‘dopnet1’ 의 첫번째 인풋을 가리킨다.

`opinputpath("..", 1)` 은 상위노드, 즉 ‘dopnet1’ 의 두번째 인풋을 가리킨다.

Geometry 레벨에서 만든 Vellum/Constraint 세트를 Dynamics 레벨에서도 그대로 가져온 것이다.

다이나믹 레벨에서 그리드가 보이지 않는다면 타임라인의 프레임번호가 1인지 확인한다.

 

현재 기본골격인 오브젝트와 솔버가 있지만, 플레이를 해도 그리드(Vellum) 는 아무 변화가 없다.

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

 

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

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

DOP_rbd_8.jpg

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

DOP_vellum_18.jpg

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

DOP_rbd_10.jpg

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

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

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

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

플레이를 해 보면 그리드(Vellum) 가 중력으로 인하여 아래로 떨어지는 것을 볼 수 있다.

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

Vellum 시뮬레이션 마무리하기

이번 강좌를 마무리하기 전에 Pin to Animation 기능을 활용해 보자.

Pin to Animation 이란 시뮬레이션 도중 특정한 점을 고정(pin) 시키는 역할을 한다.

‘vellumconstraints1’ 노드의 Pin Points 속성에 0 을 입력한다.

이는 시뮬레이션 도중 고정시킬 Point 번호를 지정한다.

DOP_vellum_19.jpg
Pin Points 에 반드시 한개의 점만 지정해야 한다는 법은 없다. 예를들어, 0,7,25,40 등 낱개로 입력하거나 4-7 처럼 일련의 번호들(4,5,6,7) 을 나열해도 무방하다. 또한 Point 그룹이 있다면 그 그룹이름을 지정하는 방법도 있다.

다시 ‘dopnet1’ 안으로 들어가 플레이 해보자.

그리드가 중력으로 인해 떨어짐과 동시에 0번 점에 묶여 매달려있는 모습을 볼 수 있다.

Constraint 지오메트리가 그리드의 형태를 잡아주면서 비현실적으로 줄어들거나 늘어나는 현상을 방지한다.