# Cloth Lab v0.7 — 동적 찢기 + 자기 충돌 베이크

무료 Blender 천·의상 제작 애드온의 15번 패널에 동적 엔진용 자기 충돌 계산을 추가했습니다. Blender 내장 XPBD가 천의 연결·탄성·파단을 계산하고, Cloth Lab이 단계 사이에서 천끼리의 접촉을 검사해 위치와 속도를 보정합니다. 보정값은 다음 물리 계산에 다시 반영됩니다.

## 실행 환경과 설치
- 기존 천·의상 도구: Blender 4.5 이상. Windows 4.5.14에서 회귀 검사.
- 동적 찢기 및 이번 자기 충돌: **Blender 5.2 이상**, 기본 Dynamics 에셋 필요. Windows 5.2.2에서 검증.
- 기존 Blender Cloth의 Self Collision과 별도 기능입니다.
- 이번 기능은 **실험적 베이크 모드**입니다. 일반 Space 미리보기에는 적용되지 않고, 전용 버튼으로 계산한 결과에서 적용됩니다.
- Preferences → Add-ons → Install from Disk → Cloth_Lab_v0.7.zip 선택 → 활성화 → Blender 재시작.

## 사용 순서
1. 천 메시를 선택하고 Scale을 적용합니다.
2. N → Cloth Lab → 동적 찢기 작업창 → ‘원본 보존 → 동적 천 복사본’. 이미 동적 천이면 그대로 사용합니다.
3. 고정 정점, 잡기 컨트롤의 위치 키프레임, 파단 임계값과 영역을 정합니다.
4. **자기 충돌 · 베이크**를 켭니다.
5. **천 사이 간격 / 천끼리 마찰 / 접촉 반복 / 자동 계산 상한**을 조절합니다.
6. **자기 충돌 포함 전체 베이크**를 누릅니다. Esc로 취소할 수 있으며 한 프레임 계산이 끝난 뒤 반영됩니다.
7. 별도로 생성된 결과를 Space로 재생하고 **Ctrl+S**로 저장합니다.
8. 수정할 때는 결과 선택 → **설정할 천으로 돌아가기** → 수치 변경 → 다시 계산. 원본과 이전 결과는 삭제하지 않습니다.

## 옵션과 예제 값
| 옵션 | 의미 | 접힌 천 예제 |
|---|---|---|
| 천 사이 간격 | 두 표면 사이 거리. 표시 두께가 아닙니다. | 0.006 m |
| 천끼리 마찰 | 접촉 중 미끄러짐 감소 | 0.25 |
| 접촉 반복 | 물리 단계 안의 접촉 보정 반복 | 10 |
| 프레임당 계산 | 기본 물리 계산 분할 수 | 6 |
| 자동 계산 상한 / 프레임 | 빠른 움직임에 추가 계산. 기본 계산 수가 더 크면 기본값이 우선 | 30 |
| 정점당 질량 | 메시 밀도와 함께 전체 무게에 영향 | 0.02 |
| 늘어나는 정도 / 휘어지는 정도 | 내장 XPBD 0–1 값. 일반 Cloth 강성과 다른 단위 | 0.001 / 0.94 |

충돌 간격은 작은 엣지 길이보다 충분히 작아야 합니다. 과도한 값은 시작 시 안내합니다. 수백~수천 정점과 느린 움직임부터 조절하세요. 고밀도 메시에서는 계산 비용이 크게 늘어납니다.

## 실제 계산
계산용 복사본은 삼각형 연결을 고정하고, 완전 고정점의 위치를 정확히 유지합니다. 반복 접촉 계산 뒤에도 면 교차가 남으면 해당 부분의 이동을 제한합니다. 이 보수적 보정은 좁은 접힘에서 움직임을 더 감쇠할 수 있습니다. 원본 메시의 면 구성은 바꾸지 않습니다.

정점–삼각형 및 엣지–엣지 접촉, 핀 고정, 질량에 따른 양쪽 표면 보정, 마찰, 이전 위치를 이용한 통과 검사, 속도 기반 자동 세분, 파단 후 현재 메시 재검사, 닫힌 충돌 물체 간격 보호를 포함합니다. 자기 충돌을 끄면 기존 내장 엔진 베이크를 사용합니다.

## 저장
자기 충돌 결과는 실제 계산한 프레임별 메시와 표준 Geometry Nodes로 .blend 안에 저장합니다. 정점 수가 바뀌는 파단도 저장합니다. 애드온 없이 같은 Blender 버전에서 재생하는 것을 검증했습니다. 임의로 만든 찢어진 모양을 섞는 방식이 아닙니다.

v0.6 기본 모드의 Packed 시뮬레이션 캐시와 다른 방식입니다. 캐시 컬렉션의 숨긴 프레임 오브젝트를 지우면 결과가 사라집니다. 프레임 수·메시 크기에 따라 파일도 커집니다. 정수 프레임을 검증했으며 프레임 사이 보간·변형 모션블러용 캐시는 제공하지 않습니다.

## 예제
- Cloth_Lab_0.7_Self_Contact.blend: 아래를 고정한 한 장의 접힌 천, 407정점, 1–30프레임. 왼쪽 OFF / 오른쪽 ON. 6mm 간격. 비교 배치를 위한 표시 이동 외에 초기 형태와 물리 설정은 같고 자기 충돌만 다릅니다.
- Cloth_Lab_0.7_Tearing_Contact.blend: 1–12프레임의 실제 파단 결합 검사, 625 → 863정점. 기술 검증용이며 완성 릴스 장면이 아닙니다.

## 검증과 한계
켜기/끄기 대조, 고정점, 질량, 엣지 교차, 마찰, 닫힌 충돌체, 오브젝트 좌표, 파단 후 속성, 취소 시 보존, 저장 후 애드온 없는 재생을 검사했습니다. 상세 수치는 03_검증결과.json과 공개 소스 tests에 있습니다.

정확한 연속 충돌 검출(CCD)을 보장하는 솔버가 아닙니다. 극단적 속도·회전, 얇은 접힘, 서로 충돌하도록 움직인 고정점, 처음부터 관통한 메시에서는 관통이나 떨림이 남을 수 있습니다. 시작 메시를 정리하고 움직임을 줄이거나 계산 단계·접촉 반복을 높이세요. 원래 인접한 점과 새 절단면의 가까운 이웃은 과도한 반발을 피하기 위해 접촉에서 제외합니다. 기존 Wind/Turbulence 도구는 이 동적 엔진에 자동 연결되지 않습니다.

Cloth Lab의 자체 구현이며 Simply Cloth Studio 원본 코드 또는 독자 전체 물리엔진의 복제로 표시하지 않습니다. 기본 노드 에셋은 사용자 Blender 설치본에서 읽습니다. GPL-3.0-or-later.

기술 참고:
- https://developer.blender.org/docs/features/nodes/xpbd_solver/
- https://developer.blender.org/docs/features/nodes/xpbd_simulation/
- https://docs.blender.org/manual/en/5.2/modeling/geometry_nodes/simulation/cloth_dynamics.html
