Ten Minute Physics - 10 Simple and unbreakable simulation of soft bodies
복잡한 모델의 경우 보통 수만~수십만개의 정점을 가지기에 이를 물리 엔진에 그대로 넣으면 과도한 연산량 발생함.
- Simulation Mesh : 물체의 대략적인 부피와 움직임을 담당하는 저해상도 사면체 메쉬를 만듦.
- Visual Mesh : 눈에 보이는 고해상도 메쉬
- Embedding(Skinning) : 고해상도 메쉬의 점들을 저해상도 메쉬 안에 심어버려 저해상도 메쉬가 움직이거나 변형될 때, 고해상도 메쉬의 점들이 그 움직임을 따라가도록 매칭시킴.
바리센트릭 좌표(Barycentric Coordinates)
고해상도 메쉬의 점 하나(v)를 잡고, 이 점을 감싸고 있는 저해상도 사면체 하나에 대해 매칭
사면체 안에 있는 어떤 점 v의 위치는 v=b1p1+b2p2+b3p3+b4p4 사면체 꼭짓점 4개의 가중치 합으로 표현 가능함.
- b1+b2+b3+b4=1
- 이 b값들은 물체가 찌그러지거나 회전해도 변하지 않음.
해당 방식의 장점
- 수만 개의 점에 대해 복잡한 물리 계산을 하는 대신, 단순히 4개 점의 가중치 합이기에 계산 최적화.
- 저해상도 메쉬가 물리적으로 안정적이라면, 해당 메쉬에 임베딩된 고해상도 메쉬도 안정적으로 따라감.
코드
- Hash를 이용한 공간 해싱 최적화 (
Hash Class)
- 3D 공간을
spacing 크기의 격자(Grid)로 분할
- Brute Force - O(n2) / Spatial Hash - O(n×k)
- 각 사면체가 자신의 바운딩 구 내의 시각 메시 정점만 검색하기에, 전체 정점을 모두 확인하지 않아도 됨.
- Barycentric Coordinates

- 사면체의 4개 꼭짓점 p1,p2,p3,p4에 대해 임의의 점 v에 대한 무게중심 좌표 (b1,b2,b3,b4)이 모두 0 이상일 때 해당 점은 사면체 내부에 있음.
-
Embedding
: 고해상도 시각 메시(Visual Mesh)를 저해상도 물리 메시(Tet Mesh)에 내장하는 기법.
computeSkinningInfo(visVerts) : 각 시각 메시 정점이 속한 사면체와 그 사면체의 무게중심 좌표가 무엇인지 계산하는 함수
updateVisMesh() : 저장된 무게중심 좌표를 사용해 시각 메시 정점 위치를 갱신하는 함수
→ 물리적 정확성과 시각적 품질을 모두 확보하면서도 실시간 성능을 유지할 수 있음.