# bone-option-pitfalls

您好，这里是**OtakuSolutions**。

今天，我们要和大家分享一个从绑定新手到从业老手都意外容易忽略的问题——**3ds Max Bone选项的陷阱**，以及由此引发的**真实事故案例**。

### 😱 真实案例："导入动画后角色变形了"

在进行绑定工作时，你可能会遇到这样令人抓狂的情况。

1. **案例A（引擎不一致）：** 在Max视口中，骨骼的**Squash（挤压）**效果明明运作正常，但上传到引擎（Unity/Unreal）后，角色形状纹丝不动。
2. **案例B（数据幽灵）：** 保存并重新加载动画数据（Save/Load Animation）后，明明没有碰过的**骨骼上出现了奇怪的缩放（Scale）值**，导致绑定扭曲变形。

---

### 🔍 为什么会发生这种情况？

#### 1. 视口"视觉渲染"与"实际数据"的区别

Bone选项中的拉伸和挤压，只是**在3ds Max视口内**看起来像那么回事的"假变形"。

- **实际数据：** Transform（位置、旋转、缩放）的值根本没有发生变化。
- **结果：** 由于引擎基于"数据"运行，数据没有变化的骨骼在引擎中自然不会动。只看Max界面觉得"哦，效果不错！"，结果在引擎里吃了哑巴亏。

#### 2. 加载动画时产生的数据混乱

更大的问题出在复用动画数据时。在Bone选项开启的状态下保存并加载动画，Max会试图将这种"视觉变形"强制换算为"数据"，从而引发错误。

- **结果：** 原本不存在的**缩放值以1.1、0.9**等形式被随意写入骨骼，导致在替换绑定或复用动画时，整个工作流程一团糟。

---

### 💡 专业绑定师的解决方案："诚实的绑定"

专业的游戏绑定师应该使用**正规方法**，而不是依赖这些捷径选项。

- **LookAt Constraint & Script Controller：** 如果想要控制骨骼长度，请自行设计绑定结构，通过计算两点间距离来使**实际的缩放值**发生变化。
- **数据透明性：** 只有这样，在引擎中才能得到相同的结果，交换动画数据时数值也不会出现偏差。

---

### 🚀 [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选项看似方便，但在游戏生产中反而可能成为毒药。现在就来检查一下您的骨骼设置吧！
@@