[ Cloth Simulation & Collision ] 05. Local Optimization for SDF

2024. 1. 17. 20:34·물리 기반 시뮬레이션/Cloth Simulation

⚙️ Loal Optimization for SDF(Signed Distance Field)

✅ NVIDIA의 Local Optimization for Robust Signed Distance Field Collision 논문은 SDF를 이용한 충돌처리에서 삼각형 Cloth에 대해 Face와 Edge 사이의 접촉을 연속적인 방식으로 생성하는 방법을 다룬다.

➡️ 이는 이산화된 위치에서 접촉을 생성하던 이전 접근법과는 다르게, 실제 정점이 존재하지 않는 Face와 Edge 내부에 접촉을 생성하기 때문에, 면에 대한 충돌처리가 가능해진다.

🎯 이때, Projected Gradient Descent와 Frank-Wolfe 방법과 같은 로컬 최적화를 위한 수치 해석적 방법을 사용한다.

 


📏 Projected Gradient Descent

투영과 미분 값의 하강을 통해 로컬 최적화를 수행하는 방법이다.

이를 간편하게 설명하기 위해 2차원 공간에 다음과 같은 원과 선분이 있다고 가정한다:

위와 같은 상황에서 Projected Gradient Descent의 다음 식을 이용해 로컬 최적화를 진행한다.

이때, P는 Barycentric coordinate를 이용한 Face 내부로의 투영이다. 계산 과정은 다음과 같다.

1. 법선 벡터($\nabla \phi$) 계산

2. $-\nabla \phi$ 방향으로 하강

3. 선분에 투영

SDF의 Gradient는 물체로부터 멀어지는 충돌 법선 방향을 의미한다. 따라서, Gradient의 하강 및 투영을 계산하면 선분 위에서 SDF 물체와 가까워진다.

 

이를 반복하여 다음과 같이 물체와 가장 가까운 선분 위의 점으로 수렴하게 한다:

 

위 그림처럼 closest point를 찾은 경우, 해당 점에 대해 충돌처리를 진행한다.


📏 Frank-Wolfe Method

Projected Gradient Descent 방법과 유사하게 1차 미분 값이 요구되지만, 투영 과정이 생략된다.

 

마찬가지로 설명의 편의를 위해 다음과 같은 원과 선분을 가정한다:

 

 Frank-Wolfe 방법은 다음과 같은 식을 이용해 로컬 최적화를 진행한다.

이때, $\alpha$ 는 가중치로 $(0, 1)$ 값을 가진다. 

 

Frank-Wolfe 방법의 전체적인 진행 과정은 다음과 같다:

1. $\nabla \phi_{p0}$ 계산

2. 끝점의 A와 B를 $\nabla \phi_{p0}= N$에 투영

3. 값이 더 작은 정점을 $s_i$로 두고, 위의 식을 계산

4. 반복

이를 통해 다음과 같이 선분(mesh) 위의 closest point로 수렴하게 된다:

 


📏 Golden-Section Search

황금 비율을 이용한 구간 탐색 방법으로, 2차원 직선에서 사용되는 로컬 최적화 기법이다.

이는 Gradient가 요구되지 않으며, 과정은 다음과 같다:

1. 양 끝점의 61.8%(황금비)에 해당하는 지점에 $x_a, x_b$ 설정

2. $\phi(x_a), \phi(x_b)$ 값을 계산하여 더 큰 값을 가진 지점을 경계로 설정

3. 위 과정을 SDF 값이 일정 크기보다 작아질 때까지 반복


💻 Implement

전체적인 알고리즘 진행은 다음과 같다:

모든 triangle에 대해 반복
	Bounding Sphere를 이용한 Culling
    Start Point 지정(중간 값)
    While(수렴)
    	로컬 최적화
    sdf를 이용한 접촉 생성

 

이때 Bounding Sphere의 관한 내용은 다음과 같다:


📈 Result

위 내용을 토대로 Projected Gradient Descent 방법과 Frank-Wolfe 방법을 이용해 구현하였고, 다음과 같은 결과를 확인할 수 있었다.

 

Projected Gradient Descent
Frank-Wolfe

 

충돌 처리는 앞서 다뤘던 Self Collision에서 사용한 제약 조건 투영을 사용하였으며, Face의 각 정점에 대해 Barycentric Coordinate를 이용해 가중치를 두어 투영을 진행하였다. 현재는 방정식으로 표현되는 SDF만을 다룰 수 있다보니, 모서리에서의 충돌 감지 및 처리를 확인할 수 없었다. 


참고 자료 : 

Local Optimization for Robust Signed Distance Field Collision (MILESMACKLIN, KENNYERLEBEN, MATTHIASMÜLLER, NUTTAPONGCHENTANEZ, STEFANJESCHKE, ZACHCORSE)


깃허브:

https://github.com/qkrdmstn/pbd-sdf-collision.git

 

GitHub - qkrdmstn/pbd-sdf-collision

Contribute to qkrdmstn/pbd-sdf-collision development by creating an account on GitHub.

github.com

 

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

[ Cloth Simulation & Collision ] 07. K-D tree를 활용한 SDF 생성 최적화  (0) 2025.05.16
[ Cloth Simulation & Collision ] 06. SDF 생성  (0) 2025.05.15
[ 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 ] 07. K-D tree를 활용한 SDF 생성 최적화
  • [ Cloth Simulation & Collision ] 06. SDF 생성
  • [ Cloth Simulation & Collision ] 04. 천 자가 충돌 (Cloth Self-Collision)
  • [ Cloth Simulation & Collision ] 03. 충돌 (History-Based Collisions)
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
    액체 시뮬레이션
    screen-space rendering
    fluid implicit particle
    파동 난류
    wave simulation
    surface turbulence
    cloth simulation
    실수
    fluid simulation
    유체 시뮬레이션
    시스템 프로그래밍
    position based dynamics
    그리드 기반 방법
    명령어
    입자 기반 방법
    GLSL
    정수 승격
    컴퓨터 구조
    RAM
    bilateral blur
    collision
    OpenGL
    pbd
    Flip
    narrow range filter screen-space fluid rendering
    상수
    screen space fluid rendering
    물리 기반 시뮬레이션
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
coding-l7
[ Cloth Simulation & Collision ] 05. Local Optimization for SDF
글쓰기
상단으로

티스토리툴바