# Ep.21 — [FAQ] 컨스트레인트 복원이 제대로 안되요.

### 1. 상황 (Scenario)

- **현상:** 애니메이션 작업 중 Fast-Ref로 설정한 **Link Constraint**가 리로드(Reload) 후에 사라지거나, 데이터가 제대로 복원되지 않는 현상 발생.
- **사용자 경험:** 복원이 안 되어 수동으로 Point Constraint 등을 활용해 다시 작업해야 하는 불편함 초래.

---

### 2. Fast-Ref의 컨스트레인트 복원 알고리즘 안내 (Logic)

Fast-Ref는 리로드 시 데이터 무결성을 위해 아래와 같은 **'비교 알고리즘'**에 따라 복원 여부를 결정합니다.

![image.png](image.png)

| **구분** | **[Skip] 리깅 기본 상태** | **[Restore] Fast-Ref 커스텀 작업** |
| --- | --- | --- |
| **판단 기준** | 리깅(Rig) 및 애니(Ani) 파일에 이미 동일하게 Link가 있는 경우 | 리깅(Rig)에는 없으나, 애니(Ani) 파일에서 컨스트레인트가 존재하는 경우 |
| **알고리즘 동작** | “원본과 동일함”, “원본 리깅 우선”으로 판단하여 무시 | "사용자 데이터"로 판단하여 별도 기록 및 복원 |
| **설계 의도** | 불필요한 컨스트레인트 처리를 생략함으로서 최적화 | 애니 및 컨스트레인트 추가 사항이 애니에 자동 반영되도록 함 |

- **[Skip] 리깅 원본과 동일한 경우:**
    - 리깅(Rig) 파일  : 자체에 이미 컨스트레인트(포인트, 오리엔트,링크 등)이 걸려 있고,
    - 애니(Ani) 파일 : 에서도 컨스트레인트(포인트, 오리엔트,링크 등)이 걸려 있다면
    ⇒ 이는 "리깅의 기본 상태"로 판단하여 복원 리스트에서 제외합니다. (리깅 수정 사항이 자연스럽게 반영되도록 하기 위함)
- **[Restore] Fast-Ref로 생성된 새로운 변화:**
    - 리깅 파일에는 없지만, **작업자가 Fast-Ref 기능을 통해 추가한**  컨스트레인트 는 "사용자의 작업한 애니메이션 데이터"로 인식하여 별도 레이어에 기록하고 교체 및 리로드 시 참고하고 복원합니다.

---

### 3. 문제 원인 (Root Cause)

윗 애니메이터님이 겪으신 이슈는 알고리즘의 **'판단 로직'**에서 발생한 예외 상황 때문입니다.

1. **데이터 오인식:** 리깅 파일에도 / 애니 파일에도 이미 컨스트레인트가 걸려 있는 상태에서 작업을 하니, 툴이 "이건 사용자가 새로 만든 게 아니라 원래 리깅에 있던 거야"라고 착각하여 **복원 대상에서 누락(Skip)**시킨 것입니다.

---

### 4. 해결 방법 (Solution)

사용자의 의도를 100% 반영하기 위해 알고리즘을 다음과 같이 업데이트합니다.

### **A안: 리깅 파일의 클린업 (최적화)**

알고리즘이 원본과 작업본을 비교할 때 혼동을 주지 않도록 리깅 파일을 깨끗하게 유지하는 방법입니다.

- **설명**: 리깅 원본 파일에는 무기(Prop) 같은 요소에 미리 **Link Constraint를 걸어두지 마세요.**
- **이유**: 원본에 이미 링크가 있으면, Fast-Ref는 애니메이션 파일에서 사용자가 새로 설정한 링크를 **"원래부터 있던 것"**으로 착각하여 복원 대상에서 제외(Skip)할 수 있기 때문입니다.
- **권장**: 무기는 그냥 바닥에 놓인 채로(Clean) 두고, 링크 작업은 애니메이터가 애니메이션 씬에서 **Fast-Ref를 통해 실행**하게 하면 복원이 100% 확실해집니다.

---

### **B안: 커스텀 Attr(속성) 또는 드라이브 연결**

컨스트레인트 복원 로직 자체를 타지 않도록 시스템 구조를 바꾸는 더 전문적인 리깅 방식입니다.

- **설명**: 컨스트레인트를 복원하는 대신, 컨트롤러의 **커스텀 Attr(예: Switch 0/1)**이나 특정 **드라이브(이동값 X 등)**를 통해 연결을 제어하세요.
- **이유**: 이 방식은 애니메이션 씬에서 컨스트레인트를 새로 생성하는 것이 아니므로, **복원해야 할 요소 자체가 생기지 않아** 데이터 유실 위험이 원천 차단됩니다.
- **참고**: Maya 등 메이저 스튜디오의 기본 리깅에서도 권장되는 방식이나, 이를 구현하기 위해서는 팀 내에 전담 **리거(Rigging TD)**의 협업이 필요합니다.

---