# 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 がある | リグにはなく、アニにコンストレイントがある |
| **アルゴリズム動作** | 「オリジナルと同一」「オリジナルリグ優先」と判断して無視 | 「ユーザーデータ」と判断して別途記録・復元 |
| **設計意図** | 不要なコンストレイント処理を省略して最適化 | アニへの追加・コンストレイントが自動反映される |

- **[Skip] リグオリジナルと同一の場合:**
    - **リグ（Rig）ファイル:** すでにコンストレイント（Point、Orient、Link など）があり、
    - **アニ（Ani）ファイル:** にもコンストレイント（Point、Orient、Link など）がある
    ⇒ **リグの基本状態**とみなし、復元リストから除外（リグ修正が自然に反映されるため）
- **[Restore] Fast-Ref で作られた新しい変更:**
    - リグにないが、**作業者が Fast-Ref で追加した**コンストレイントは**ユーザーが作業したアニメーションデータ**として別レイヤーに記録し、Replace / Reload 時に参照して復元します。

---

### 3. 問題の原因（Root Cause）

ご報告の事象は、アルゴリズムの**判断ロジック**における例外です。

1. **データの誤認識:** リグ・アニの両方にすでにコンストレイントがある状態で作業したため、ツールが「ユーザーが新規作成したものではなく、もともとリグにあったもの」と誤認し、**復元対象から除外（Skip）**しました。

---

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

ユーザーの意図を100%反映するため、次の方法を検討してください。

### **A案: リグファイルのクリーンアップ（最適化）**

アルゴリズムがオリジナルと作業版を混同しないよう、リグファイルをクリーンに保つ方法です。

- **説明:** リグオリジナルでは武器（Prop）などに**Link Constraint を事前に付けない**でください。
- **理由:** オリジナルにすでに Link があると、アニメーションファイルでユーザーが新しく設定した Link を**「最初からあったもの」**と誤認し、復元対象から**除外（Skip）**されることがあります。
- **推奨:** 武器は床に置いたまま（Clean）にし、Link 作業はアニメーターがアニメーションシーンで**Fast-Ref 経由**で行えば、復元は100%確実です。

---

### **B案: カスタム Attr（属性）またはドライブ接続**

コンストレイント復元ロジック自体を使わない、より専門的なリグ方式です。

- **説明:** コンストレイントを復元する代わりに、コントローラの**カスタム Attr（例: Switch 0/1）**や特定の**ドライブ（移動値 X など）**で接続を制御してください。
- **理由:** アニメーションシーンで新しいコンストレイントを作らないため、**復元すべき要素が発生せず**、データ欠落リスクを根本から防げます。
- **参考:** Maya など大手スタジオの基本リグでも推奨される方式ですが、チーム内の専任**リガー（Rigging TD）**との連携が必要です。

---