# bone-option-pitfalls

こんにちは、**OtakuSolutions**です。

本日は、リギング入門者から現場のプロまで、意外と多くの方が見落としている**3ds Max Boneオプションの落とし穴**と、それによって起こる**実際のトラブル事例**をご紹介します。

### 😱 実際の事例：「アニメーションを読み込んだらキャラクターが崩れました」

リギング作業をしていると、このような困惑する状況に出くわすことがあります。

1. **事例A（エンジンとの不一致）：** Maxのビューポートではボーンの**スクワッシュ（Squash）**効果がしっかり効いているのに、エンジン（Unity/Unreal）にアップロードするとキャラクターのシェイプがまったく動かないケース。
2. **事例B（データの幽霊）：** アニメーションデータを保存（Save/Load Animation）して読み込み直したら、触ったはずのない**ボーンに異常なスケール（Scale）値**が発生し、リギングが歪んでしまうケース。

---

### 🔍 なぜこんなことが起きるのでしょうか？

#### 1. ビューポートの「視覚的レンダリング」vs「実際のデータ」の違い

Boneオプションのストレッチとスクワッシュは、**3ds Maxのビューポート内でのみ**それらしく見える「偽の変形」です。

- **実際のデータ：** Transform（Position、Rotation、Scale）の値はまったく変化しません。
- **結果：** エンジンは「データ」をもとに動作するため、データが変わっていないボーンはエンジンでは当然動きません。Maxの画面だけ見て「おお、うまくいってる！」と思っていたら、エンジンで痛い目を見ることになります。

#### 2. アニメーション読み込み時に発生するデータの混乱

さらに大きな問題は、アニメーションデータを再利用する際に発生します。Boneオプションが有効な状態でアニメーションを保存・読み込みすると、Maxがこの「視覚的変形」を「データ」へ無理やり変換しようとしてエラーを起こします。

- **結果：** 存在しなかった**スケール値が1.1や0.9**のように勝手に入り込み、リグの差し替えやアニメーションの再利用時に作業全体が狂ってしまいます。

---

### 💡 プロリガーの解決策：「正直なリギング」

プロのゲームリガーであれば、便法オプションに頼らず**正攻法**を使うべきです。

- **LookAt Constraint & Script Controller：** ボーンの長さを調整したい場合は、2点間の距離を計算して**実際のScale値**が変化するようにリギング構造を自分で設計してください。
- **データの透明性：** そうすることで初めてエンジンでも同じ結果が得られ、アニメーションデータをやり取りする際も数値がズレません。

---

### 🚀 [Tool] 事故防止用：Boneオプション一括オフスクリプト

すでに作業済みのボーンが不安な場合は、以下のスクリプトですべてのボーンの「目くらましオプション」を一括解除してください。正しいリギングに戻るための第一歩です。

```maxscript
-- Bone의 가짜 스트레치/스쿼시 옵션을 완전히 끄고 데이터 혼선을 막습니다.
for b in objects where classof b == BoneGeometry do (
    b.realignSelf = false
    b.freezeLength = false -- 길이 고정 해제 (데이터 계산 방해 방지)
    b.stretch = #none      -- 가짜 스트레치 해제
    b.sidefin = false      -- (선택사항) 불필요한 핀 제거
    print (b.name + " : Clean up completed.")
)
```

---

### 📝 まとめ

> **「リギングは目ではなく、『データ』で行うものです。」**
> 便利そうに見えるBoneオプションですが、ゲームプロダクションではむしろ害になることがあります。今すぐご自身のボーン設定を確認してみてください！
@@