Lesson 4: Cloth 시뮬레이션

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


Cloth 시뮬레이션이란?

옷이나 커튼과 같이 얇고 유연한 물체의 운동을 나타내는 다이나믹이다.

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


Cloth 시뮬레이션 기본구조

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

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



Cloth 시뮬레이션 구현하기

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

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



TAB메뉴를 이용해 Cloth ObjectCloth Solver DOP노드를 하나씩 만든다.



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

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



씬 뷰에 나타난 그리드는 'clothobject1' 노드의 Initial Geometry 기본값이 그리드이기 때문이다.



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



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

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


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

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



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



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

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



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

그리드가 충돌할 오브젝트 생성을 위해 다이나믹 레벨에서 RBD Object DOP을 하나 만든다.

RBD 시뮬레이션 강좌에서 본 것처럼 기본적으로 스피어가 나타난다.

만들어진 'rbdobject1' 노드의 Output Flag 를 클릭해야 스피어를 볼 수 있다.


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

그 정답은 Merge DOP에 있다.

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

'merge1' 노드의 Output Flag 를 켜준다.

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

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



Cosine 함수에 의해서 Velocity Z 속성값이 -1부터 1까지 왔다갔다하게 된다.

하지만 플레이 해보면 이전과 동일하게 +Z 방향으로만 날아간다.

그 해답은 많은 DOP 노드들이 공통적으로 가지고 있는 Default Operation 속성에서 찾을 수 있다.



Wire 시뮬레이션 마무리하기

Default Operation 속성값이 'Set Initial' 이면 프레임 1에서의 값이 변하지 않고 계속 지속된다.

즉, 프레임 1에서 cos($F*5) 의 값 0.996195가 마지막 프레임까지 그대로 지속된 것이었다.

위처럼, 익스프레션의 실제값을 숫자로 확인하고자 할 때는 그 파라미터 이름을 클릭해 준다.


'windforce1' 노드의 Default Operation 속성값을 'Set Always' 로 바꾼다.

비로소, 위의 익스프레션 cos($F*5) 가 매 프레임마다 계산되어 다이나믹에 적용된다.