Posted: July 26, 2019
Version: Houdini 17.5
Cloth 시뮬레이션이란?
옷이나 커튼과 같이 얇고 유연한 물체의 운동을 나타내는 다이나믹이다.
다음과 같은 상황들이 Cloth 시뮬레이션에 포함될 수 있다.
식탁보가 식탁위로 착지하는 모습
텐트가 강한 바람에 펄럭거리는 모습
캐릭터의 동작에 따라 옷자락이 출렁이는 모습
Cloth 시뮬레이션 기본구조
후디니 Cloth 시뮬레이션의 기본 골격은 다음과 같다.
Cloth 오브젝트가 어떤 힘을 받을 경우, Cloth 솔버가 그 힘을 계산하여 오브젝트를 움직인다.
Cloth 시뮬레이션 구현하기
다이나믹을 하기위해 '/obj' 에 DOP Network 노드를 하나 만든다.
만들어진 'dopnet1' 노드 안쪽 Dynamics 레벨로 들어간다.
TAB 메뉴를 이용해 Cloth Object DOP, Cloth Solver DOP 노드를 하나씩 만든다.
만들어진 'clothobject1' 과 'clothsolver1' 노드를 다음과 같이 연결한다.
Output Flag 를 맨밑에 있는 'output' 노드로 지정해준다.
씬뷰에는 다음과 같이 그리드 오브젝트가 한개 만들어진다.
이는 'clothobject1' 노드 [Deformation] 탭에 있는 Initial State 기본값이 그리드이기 때문이다.
이 Initial State 파라미터에는 여러분들이 원하는 어떠한 오브젝트도 올 수 있다.
현재 기본골격인 오브젝트와 솔버가 있지만, 플레이를 해도 그리드는 아무 변화가 없다.
그것은 그리드를 움직이게 만드는 외부힘이 존재하지 않기 때문이다.
그렇다면 우리가 알고있는 대표적인 외부힘인 중력을 더해보자.
TAB 메뉴를 이용해서 Gravity Force DOP 노드를 한개 만들어준다.
만들어진 ‘gravity1’ 노드를 'clothsolver1' 과 'output' 노드 사이에 연결해 준다.
'gravity1' 노드의 Force 기본값이 (0, -9.80665, 0) 임을 확인할 수 있다.
후디니 화면 밑쪽 Playbar 에 있는 Play 버튼을 클릭해서 플레이 해본다.
이때 플레이버튼 밑에 있는 Real Time Toggle 버튼을 눌러서 리얼타임으로 플레이 한다.
플레이를 해 보면 그리드가 중력으로 인하여 아래로 떨어지는 것을 볼 수 있다.
충돌(collision) 오브젝트 만들기
그리드가 충돌할 오브젝트 생성을 위해 RBD Object DOP을 하나 만든다.
RBD 시뮬레이션 강좌에서 본 것처럼 기본적으로 스피어가 나타난다.
자, 그럼 어떻게 그리드 (clothobject1) 를 스피어 (rbdobject1) 에 충돌하게 만들 수 있을까?
Merge DOP 노드를 만든 후, 다음과 같이 연결해 준다.
우선 Merge DOP 은 Merge SOP 과 그 성격이 많이 다르다.
'merge1' 노드의 Relationship 속성값으로 인해 그 인풋으로 오는 오브젝트들을 충돌관계에 넣고있다.
Affector Relationship 속성은 인풋으로 오는 오브젝트들의 관계에서 우선 순위를 정해준다.
기본값은 Merge DOP 의 왼쪽 인풋의 오브젝트가 오른쪽 인풋의 오브젝트에게 영향을 미치도록 되어 있다.
즉, 그리드는 스피어의 영향을 받아 충돌하지만 스피어는 그리드의 영향을 받지 않는다.
그러므로 Merge DOP 에 연결시 인풋들의 순서에 특별히 주의한다.
Cloth 시뮬레이션 마무리하기
현재 그리드(Cloth) 와 스피어 오브젝트가 원점에 겹쳐서 위치하고 있다.
'rbdobject1' 노드의 Position Y 값을 조절하여 스피어를 그리드(Cloth) 밑에 위치시킨다.
다시 시뮬레이션을 플레이 해 보자.
그리드(Cloth) 가 스피어를 감싸 안으면서 충돌하는 모습을 확인할 수 있다.