# bone-option-pitfalls

안녕하세요, **오타쿠 솔루션즈**입니다.

오늘은 리깅 입문자부터 실무자까지, 의외로 많은 분이 놓치고 있는 **3ds Max Bone 옵션의 함정**과 그로 인해 발생하는 **실제 사고 사례**를 공유하려 합니다.

### 😱 실제 사례: "애니메이션을 불러왔더니 캐릭터가 찌그러졌어요"

리깅 작업을 하다 보면 이런 황당한 경우를 겪게 됩니다.

1. **사례 A (엔진 불일치):** 맥스 뷰포트에서는 분명 Bone의 **Squash(스쿼시)** 효과가 찰지게 먹히고 있는데, 엔진(Unity/Unreal)에 올리니 캐릭터 쉐잎이 미동도 하지 않는 경우.
2. **사례 B (데이터 유령):** 애니메이션 데이터를 저장(Save/Load Animation)하고 다시 불러왔더니, 분명 건드린 적 없는 **Bone에 이상한 스케일(Scale) 값**이 생겨서 리깅이 뒤틀려버리는 경우.

---

### 🔍 왜 이런 일이 벌어질까요?

#### 1. 뷰포트의 '시각적 렌더링' vs '실제 데이터'의 차이

Bone 옵션의 스트레치와 스쿼시는 **3ds Max 뷰포트 내에서만** 그럴싸하게 보여주는 '가짜 변형'입니다.

- **실제 데이터:** Transform(Position, Rotation, Scale) 값은 전혀 변하지 않습니다.
- **결과:** 엔진은 '데이터'를 기반으로 작동하기 때문에, 데이터가 변하지 않은 본은 엔진에서 당연히 움직이지 않습니다. 맥스 화면만 보고 "오, 잘 되네!" 했다가 엔진에서 뒤통수를 맞는 격이죠.

#### 2. 애니메이션 로드(Load) 시 발생하는 데이터 혼선

더 큰 문제는 애니메이션 데이터를 재사용할 때 발생합니다. Bone 옵션이 켜진 상태에서 애니메이션을 저장하고 불러오면, 맥스가 이 '시각적 변형'을 '데이터'로 억지로 환산하려다 오류를 일으킵니다.

- **결과:** 본에 없던 **Scale 값이 1.1, 0.9** 식으로 멋대로 들어가면서 리깅 교체나 애니메이션 재사용 시 작업 전체를 꼬이게 만듭니다.

---

### 💡 전문 리거의 해결책: "정직한 리깅"

전문적인 게임 리거라면 편법 옵션 대신 **정공법**을 써야 합니다.

- **LookAt Constraint & Script Controller:** 본의 길이를 조절하고 싶다면, 두 지점 사이의 거리를 계산해 **실제 Scale 값**이 변하도록 리깅 구조를 직접 설계하세요.
- **데이터의 투명성:** 그래야만 엔진에서도 똑같이 나오고, 애니메이션 데이터를 주고받을 때도 수치가 틀어지지 않습니다.

---

### 🚀 [Tool] 사고 방지용: Bone 옵션 일괄 Off 스크립트

이미 작업된 본들이 불안하시다면, 아래 스크립트로 모든 본의 '눈속임 옵션'을 일괄 제거하세요. 리깅의 정석으로 돌아가는 첫걸음입니다.

```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 옵션, 게임 프로덕션에서는 오히려 독이 될 수 있습니다. 지금 바로 여러분의 본 세팅을 점검해 보세요!
@@