[ Cloth Simulation & Collision ] 01. 천 시뮬레이션 (Cloth Simulation)

2023. 7. 6. 09:30·물리 기반 시뮬레이션/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

 

'물리 기반 시뮬레이션 > Cloth Simulation' 카테고리의 다른 글

[ Cloth Simulation & Collision ] 06. SDF 생성  (0) 2025.05.15
[ Cloth Simulation & Collision ] 05. Local Optimization for SDF  (0) 2024.01.17
[ Cloth Simulation & Collision ] 04. 천 자가 충돌 (Cloth Self-Collision)  (0) 2023.09.06
[ Cloth Simulation & Collision ] 03. 충돌 (History-Based Collisions)  (0) 2023.07.19
[ Cloth Simulation & Collision ] 02. 레벨 셋 충돌 (Level Set Collision)  (0) 2023.07.13
'물리 기반 시뮬레이션/Cloth Simulation' 카테고리의 다른 글
  • [ Cloth Simulation & Collision ] 05. Local Optimization for SDF
  • [ Cloth Simulation & Collision ] 04. 천 자가 충돌 (Cloth Self-Collision)
  • [ Cloth Simulation & Collision ] 03. 충돌 (History-Based Collisions)
  • [ Cloth Simulation & Collision ] 02. 레벨 셋 충돌 (Level Set Collision)
coding-l7
coding-l7
  • coding-l7
    coding-l7rl0
    coding-l7
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 기타
      • 유니티
        • OfficeWorkerRunning
      • 프로그래밍 언어
        • C
        • C#
        • C++
      • CS
        • 컴퓨터 구조
        • 운영체제
      • 물리 기반 시뮬레이션
        • 기초
        • Cloth Simulation
        • Fluid Simulation
      • 코딩 테스트
        • 프로그래머스
        • 백준
      • 독서
        • [ 뇌를 자극하는 윈도우즈 시스템 프로그래밍 ]
        • [ 혼자 공부하는 컴퓨터 구조 + 운영체제 ]
        • [ CUDA 기반 GPU 병렬 처리 프로그래밍 ]
      • 영어
        • Basic Grammar In Use
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 포트폴리오
  • 공지사항

  • 인기 글

  • 태그

    C언어
    jump table
    RAM
    물리 기반 시뮬레이션
    OpenGL
    GLSL
    cloth simulation
    컴퓨터 구조
    실수
    surface turbulence
    그리드 기반 방법
    Flip
    상수
    bilateral blur
    유체 시뮬레이션
    collision
    명령어
    액체 시뮬레이션
    screen-space rendering
    시스템 프로그래밍
    pbd
    입자 기반 방법
    screen space fluid rendering
    wave simulation
    fluid implicit particle
    fluid simulation
    파동 난류
    narrow range filter screen-space fluid rendering
    position based dynamics
    정수 승격
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
coding-l7
[ Cloth Simulation & Collision ] 01. 천 시뮬레이션 (Cloth Simulation)
글쓰기
상단으로

티스토리툴바