[ Cloth Simulation & Collision ] 01. 천 시뮬레이션 (Cloth Simulation)
📌 천 시뮬레이션 (Cloth Simulation)
이전 글에서 정리했던 위치 기반 역학(PBD)으로 표현할 수 있는 가장 대표적인 시뮬레이션으로, 천의 표현과 강체와의 충돌, 자가 충돌, 천 팽창 등의 내용을 포함한다.
📌 천의 표현 (Representation of Cloth)
천 시뮬레이터는 임의의 삼각형 메쉬를 입력받는다. 이때 각 가장자리는 최대 두 개의 삼각형에 공유되어야 하며, 메쉬의 각 노드는 정점이다. 또한, 사용자는 면적 당 질량으로 표시된 밀도 $\rho [kg/m^2]$ 를 제공하며 정점의 질량은 각 인접한 삼각형의 질량의 1/3의 합으로 설정된다.
🔗 스트레칭 제약 조건 (Stretching Constraint)
각 가장자리에 대해 다음과 같은 가장자리의 초기 길이를 나타내는 스칼라 $l_0$ 와 전역 매개변수로 제공되는 stretch stiffness $k$ 를 이용하여 스트레칭 제약을 생성한다. 이때 제약 함수는 다음과 같이 표현된다:
이는 $\text{equality}$ 유형이다.
🔗 굽힘 제약 조건 (Bend Constraint)
인접한 두 삼각형 $(p_1, p_3, p_2)$ 및 $(p_1, p_2, p_4)$ 에 대해 굽힘 제약을 생성한다. 이때 굽힘 제약 함수는 다음과 같이 표현된다:
위에서 $\phi_0$ 은 두 삼각형 사이의 초기 이중각(dihedral angle)이며, $k_{bend}$ 는 천의 굽힘 강성을 정의하는 전역 매개변수이다. 또한, 이는 인접한 두 삼각형의 법선 벡터 사이의 각도로 표현되며, 스트레칭과 독립적이라는 특징을 가진다.
💥 강체와의 충돌 (Collision with Rigid Bodies)
(이전 글의 충돌 감지 및 반응 참고)
양방향 상호작용을 위해 강체와의 충돌로 인해 정점 $i$ 가 투영될 때마다 접점에서 강체에 임펄스 $m_i\Delta p_i / \Delta t$ 를 적용한다. 또한, 작은 강체는 큰 천의 삼각형 메쉬를 통과할 수 있기 때문에, 강체의 볼록한 모서리와 천의 삼각형과의 충돌 검사를 수행해야 한다.
💥 자가 충돌 (Self Collision)
삼각형의 크기가 거의 동일하다고 가정하면, 정점-삼각형 충돌을 찾기 위해 공간 해싱(spatial hashing)을 사용한다.
정점 $q$ 가 삼각형 $p_1, p_2, p_3$ 를 통과한다면 다음과 같은 제약 함수를 사용할 수 있다:
만약 정점이 삼각형의 법선에 대해 아래에서 다가온다면, 제약 함수는 다음과 같아야 한다:
이렇게 두 개의 제약 함수로 구분함으로써 정점을 원래의 면 방향으로 유지할 수 있다.
또한, 이러한 제약 함수는 선형 및 각 운동량이 보존되며, 천의 자체 충돌에 필수적인 요소이다.
🎈 천의 팽창 (Cloth Balloons)
닫힌 삼각형 메쉬의 경우, 메쉬 내부의 과압을 쉽게 모델링 할 수 있으며, 이를 표현하기 위해 모든 $N$ 개의 정점에 대해 다음과 같은 $\text{equality}$ 제약을 추가할 수 있다:
이때, $k$ 는 1로 설정한 하나의 제약 조건에 대한 강성을 나타내며, $t^i_1, t^i_2, t^i_3$ 는 삼각형 $i$ 에 속하는 세 개의 정점 인덱스이다. 또한, 괄호 안의 합계는 닫힌 메쉬의 실제 부피를 계산한다. 이렇게 계산된 부피는 원래의 부피 $V_0$ 에 과압 인자 $k_{pressure}$ 를 곱한 값과 비교된다.
이러한 제약 함수는 다음과 같은 그래디언트를 생성한다:
이를 이용해 이전 글에서 다룬 스케일링 요소와 질량 가중치를 부여하여 최종적인 투영 오프셋 $\Delta p_i$ 를 얻을 수 있다.
📈 시뮬레이션 결과 (Result)
위 결과는 천에 움직임을 주기 위해 외력(바람)을 각 정점에 대해 가하도록 구현한 결과이다.
참고 자료 :
Position Based Dynamics - Matthias Müller, Bruno Heidelberger, Marcus Hennix, John Ratcliff
깃허브:
https://github.com/qkrdmstn/pbd-cloth-simulation.git
GitHub - qkrdmstn/pbd-cloth-simulation
Contribute to qkrdmstn/pbd-cloth-simulation development by creating an account on GitHub.
github.com