# Ep.21 — [FAQ] 约束恢复不正常

### 1. 情况（Scenario）

- **现象：** 动画作业中通过 Fast-Ref 设置的 **Link Constraint** 在 Reload 后消失，或数据未能正确恢复。
- **用户体验：** 因无法恢复，需手动使用 Point Constraint 等重新作业。

---

### 2. Fast-Ref 约束恢复算法说明（Logic）

为保证 Reload 时的数据完整性，Fast-Ref 按以下**比较算法**决定是否恢复。

![image.png](image.png)

| **区分** | **[Skip] 绑定默认状态** | **[Restore] Fast-Ref 自定义作业** |
| --- | --- | --- |
| **判断标准** | 绑定（Rig）与动画（Ani）文件中已有相同 Link | 绑定中没有，但动画文件中存在约束 |
| **算法行为** | 判定为“与源相同”“以源绑定为准”并忽略 | 判定为“用户数据”并单独记录与恢复 |
| **设计意图** | 省略不必要的约束处理以优化性能 | 使动画及新增约束自动反映到 Ani |

- **[Skip] 与绑定源相同的情况：**
    - **绑定（Rig）文件：** 本身已有约束（Point、Orient、Link 等），且
    - **动画（Ani）文件：** 也有约束（Point、Orient、Link 等）
    ⇒ 视为绑定的**默认状态**，从恢复列表中排除（以便绑定修改自然生效）。
- **[Restore] 通过 Fast-Ref 产生的新变化：**
    - 绑定文件中没有、但**作业者通过 Fast-Ref 添加的**约束，视为**用户制作的动画数据**，记录到单独图层，在 Replace / Reload 时参考并恢复。

---

### 3. 问题原因（Root Cause）

您遇到的情况属于算法**判断逻辑**中的例外。

1. **数据误判：** 在绑定与动画文件中都已存在约束的情况下作业，工具误以为是**绑定原本就有的**而非用户新建，因而从恢复目标中**遗漏（Skip）**。

---

### 4. 解决方法（Solution）

为完整反映用户意图，可采用以下方式：

### **方案 A：清理绑定文件（推荐）**

保持绑定文件干净，避免算法混淆源文件与作业文件。

- **说明：** 不要在绑定源文件中预先对武器（Prop）等施加 **Link Constraint**。
- **原因：** 若源文件已有 Link，Fast-Ref 可能将动画文件中用户新设的 Link 误判为**“原本就有”**并从恢复中**排除（Skip）**。
- **建议：** 武器保持干净放在场景中，由动画师在动画场景中**通过 Fast-Ref** 进行 Link 作业，可确保 100% 恢复。

---

### **方案 B：自定义 Attr（属性）或驱动连接**

更专业的绑定方式，不经过约束恢复逻辑。

- **说明：** 不恢复约束，而通过控制器上的**自定义 Attr（如 Switch 0/1）**或特定**驱动（如位移 X）**控制连接。
- **原因：** 不在动画场景中新建约束，**无需恢复的对象本身不存在**，从根源避免数据丢失。
- **参考：** Maya 等大型工作室常用方式，但需要团队内专职 **Rigging TD** 协作。

---