---

# Ep.0 — 왜 만들었나 · Squash & Stretch · 리깅 파이프라인의 현실

> slug: ep00-intro

https://youtu.be/QIHe0k6EIoQ?si=qKtmhzIPz01_CCQX

## 개요

BipedPlus를 **왜 만들었는지**, 현장에서 반복되는 **리깅·파이프라인 문제**가 무엇인지, 그리고 이 툴이 **어떤 방향으로 해결**하려는지를 설명하는 소개 영상입니다.  
툴 버튼을 누르는 방법보다 **배경과 철학**을 이해하는 데 초점을 맞춥니다.

## 이 영상에서 다루는 핵심 주제

### 1. 반복되는 리깅 기초 공사

많은 프로덕션에서 Technical Artist·리드 리거로 일할 때, 회사를 옮길 때마다 비슷한 일이 반복됩니다.

- 리깅 가이드라인·네이밍 규칙·본 체계를 **처음부터** 다시 세우기
- 스타트업·중소·대기업 모두 **처음(레벨 1~5)부터 다시 쌓아** 프로덕션 수준(영상: 레벨 30)까지 올리는 작업을 반복
- 프로젝트마다 사정이 달라 **근간은 비슷한데** 매번 리셋되는 경험

BipedPlus는 이 **반복 비용을 줄이고**, 공통된 기반 위에서 바로 작업할 수 있게 하려는 목적이 있습니다.

### 2. Squash & Stretch(스트레칭·스쿼시)와 한국 게임

애니메이션 12원칙 중 첫 번째인 **Squash & Stretch**는 과장·리듬·생동감에 필수적입니다.

- 인게임 영상만 봐도 **스트레칭·스쿼시 유무**로 표현 수준이 크게 달라집니다
- 젤레스 존, 오버워치 등 해외·글로벌 타이틀은 과감한 본 변형을 활용합니다
- 한국 인게임에서는 **리깅 시스템이 받쳐주지 못해** 기법 자체가 잘 쓰이지 않았던 경우가 많습니다
- **게임 엔진이라서 불가능한 것이 아닙니다.** 구조만 맞으면 충분히 가능합니다

BipedPlus는 **Stretch/Squash/Scale 표현**을 리깅 단계에서 지원해, 애니메이터가 원하는 과장을 낼 수 있게 하는 것을 목표로 합니다.

### 3. 파편화된 도구 환경

3ds Max 리깅 생태계에는 유용한 스크립트·플러그인이 많지만 **뿔뿔이 흩어져** 있습니다.

- 공통 표준이 없어 **개인 노하우**로만 축적
- 어떤 툴이 최신·권장인지 찾기 어려움

BipedPlus는 **만능 툴이 아닙니다.** Biped 기반 고급 리깅 빌드와 애니메이션 보조에 필요한 기능을 **한 패키지**로 모으는 방향입니다.

### 4. 리깅은 눈에 잘 안 보이지만 중요한 파트

- 모델링·애니메이션·이펙트는 **비주얼**로 피드백이 쉽습니다
- 리깅은 **데이터 구조·효율·파이프라인** 쪽이라 아트 디렉터·PD 입장에서 와닿기 어렵습니다
- 그럼에도 **애니메이션 TA·리거 1~2명**의 의견을 존중하면, 아래 같은 문제를 막을 수 있습니다

#### 실제 현장 사례: FBX 익스포트 지옥

- 캐릭터마다 **익스포트 방식이 제각각** (루트 유무, 축 방향, 무기 포함 여부 등)
- 리거·TA 없이 **애니메이터가 각자 리깅** → 규칙 통일 불가
- 씬·캐릭터 수가 많을수록 **수작업 익스포트**에 수주가 소요
- 자동화·규칙 통일 후 **80시간 → 3시간** 수준으로 단축된 사례도 있음

**교훈:** 비주얼이 뛰어나도 **내부 파이프라인**이 무너지면 전체 일정이 흔들립니다.

### 5. Biped 고유의 함정 — Clavicle(쇄골) 예시

Biped 기본 설정에서는 Clavicle이 **4개**로 잡히고, Spine과의 연결도 **구조상 어색한** 경우가 있습니다.

- 목·어깨 움직임에 **의도치 않은 영향**이 전파
- 한번 **본 연결 구조(부모–자식 관계)** 가 어긋난 채로 애니메이션이 쌓이면 **돌이키기 어려움**

BipedPlus는 **게임 엔진에 맞는 본 연결 구조·스킨 본 배치**를 일관되게 제공해, 이런 병목을 줄이려 합니다.

### 6. BipedPlus가 지향하는 것

| 목표 | 설명 |
|------|------|
| **엔진에 맞는 본 구조** | Unreal·Unity 등에 맞는 연결·축 방향 제공 |
| **Stretch/Squash/Scale** | 애니메이터 표현 자유도 확대 |
| **풀 패키지** | Build, Figure, Skin, Picker, Ani Utils 등 한 툴에서 |
| **가이드라인 공유** | 네이밍·본 규칙 등 **공통 상식** 수준의 문서 제공 |
| **중간 평준화** | 현장 리깅 격차를 **최소 기준선**까지 끌어올리기 |

회사 규모·인프라 수준(레벨 5~60)과 관계없이, **바로 쓸 수 있는 실무 기술**과 **파이프라인 정돈**을 돕는 것이 목표입니다.

## BipedPlus UI 미리보기 (영상 후반)

영상 후반에서는 실제 툴 화면이 **잠깐** 소개됩니다.

- **패널 도킹** — BipedPlus 창을 3ds Max 옆에 **붙여서** 사용
- **Build 이후** Stretch/Squash 등 다양한 표현·보조 기능
- 이후 ep.1부터 **Build 탭**부터 순서대로 튜토리얼 진행

## 누구에게 특히 도움이 되나

- 회사마다 **리깅 가이드라인을 매번 새로** 짜야 하는 분
- Biped 기반인데 **Squash & Stretch**를 쓰고 싶은 애니메이터·TA
- **익스포트·파이프라인**이 캐릭터마다 다른 프로덕션
- 인프라가 없는 **초기 프로젝트**에서 기준을 잡고 싶은 팀

## 책임자·팀장님께

- 애니메이션 **Technical Artist·리거**는 아트팀의 **윤활유** 역할입니다. 많을 필요는 없습니다
- 파일 구조·익스포트 규칙·레퍼런스 구조 제안은 **팀장·아트 디렉터의 이해와 결정**이 있을 때 현실적으로 적용됩니다
- 리깅은 화면에 직접 드러나지 않아도, **모델링·애니·이펙트 품질**을 받쳐 줍니다

---

# Ep.1 — Preset · Biped Style · Build 탭

> slug: ep01-build-tab

https://youtu.be/12qbped3gBA?si=TBa_b2K_q-OqkpH_

## 개요

BipedPlus를 처음 실행한 뒤 **Build 탭**에서 리깅의 기본 골격을 설정하고 **Build**로 생성하는 과정입니다.  
Preset, Human/Beast 타입, Spine·Twist·Hip·Prop 등 옵션을 한 번에 맞춥니다.

## 사전 준비

- BipedPlus가 3ds Max에 **설치되어 패널로 붙어 있는** 상태
- 예시 캐릭터 메시(영상: 메이블) 또는 본인 프로젝트 캐릭터

> **Build 탭** = 리그를 **처음 만들 때** 쓰는 설정 화면입니다. 여기서 옵션을 고르고 **Build** 버튼을 누르면 본·컨트롤러가 생성됩니다.

## 단계별 가이드

### 1. Preset (프리셋)

1. Build 탭 상단 **Preset** 영역을 확인합니다.
2. 프로덕션마다 자주 쓰는 옵션 조합은 **Save** 또는 **Save As**로 저장해 둡니다.
3. 다른 프로젝트로 전환할 때 저장된 Preset을 불러와 빠르게 스위칭합니다.
4. 영상에서는 **기본값**으로 진행합니다.

### 2. Biped Style (Human / Beast)

| 타입 | 용도 |
|------|------|
| **Human(휴먼)** | 일반 인간형 캐릭터 |
| **Beast(비스트)** | 짐승형 — 다리 **Leg Link 4개** 등 구조가 다름 |

1. 캐릭터 유형에 맞게 **Human** 또는 **Beast**를 선택합니다.
2. Beast는 새 씬에서 미리보기해 전체 구조(다리 4링크 등)를 확인한 뒤, 작업 캐릭터에 맞는 타입을 고릅니다.
3. 예시 캐릭터(메이블)는 **Human** + 신장 **170** (필요 시 조정, Figure Mode에서도 재설정 가능).

### 3. Build 옵션 설정

#### Spine · Leg · Finger

- **Spine**: Biped 척추 본 개수
- **Leg Link**: 기본 3 (Thigh–Knee–Foot 등)
- **Finger**: 5개, 링크 수 확인

#### Twist (트위스트)

- 기본 **3개** — 팔꿈치 기준 Upper Arm·Forearm 각각 3개
- 서브컬처·콘솔급 게임(명조, 젤레스 존 등) 기준 **3개 권장**
- Leg Link가 **4개(Beast)**일 때 **Horse Link**도 3개씩 추가됨

#### Hip · Extra (6-Dart)

- **Hip(힙)** 을 올렸을 때 스커트·허리가 어색하지 않게 **주변을 보정**하는 작은 컨트롤러가 **6개** 생깁니다. (영상에서 "6-Dart"라고 부릅니다.)
- 스커트 캐릭터는 **스커트 옵션**을 켜 두면 됩니다.

#### Corrective (커렉티브)

- **무릎·팔꿈치** Corrective 본 — 팔·다리 90° 굽힘 시 45° 정도로 자연스럽게 보정
- **기본 체크 권장**

#### Prop

| 체크 수 | 결과 |
|---------|------|
| 1 | 한쪽 |
| 2 | 양쪽 |
| 3 | 양쪽 + 가운데 |

예시 캐릭터는 무기 없음 → **모두 해제**

#### Rigging Info

- **미러·기본 포즈·리셋**에 필요한 정보를 담는 **설정 덩어리**를 만들지 여부입니다.
- **체크(생성)해 두는 것을 권장** — Ep.9~14 미러·리셋 기능과 연결됩니다.

#### Engine (엔진)

| 엔진 | "위쪽" 방향 |
|------|-------------|
| **Unreal** | Z축이 위 |
| **Unity** | Y축이 위 |

**왜 중요한가:** 나중에 FBX 등으로 **보낼 때** 캐릭터가 누워 있거나 뒤집히지 않게, **팀이 쓰는 게임 엔진**에 맞춥니다. (예시: Unreal)

#### Init 패키지

- Ep.2~3 Figure Mode에서 **관절 배치를 저장**해 두면, 그걸 **Build할 때 그대로 쓸지** 정하는 옵션입니다.
- **첫 Build**는 아직 저장 데이터가 없으므로 **체크 해제** — Init 없이 생성합니다.

### 4. Build 실행

1. 옵션을 **한 번 더** 훑어봅니다.
2. **Build** 버튼을 누릅니다. (영상에서는 기본값 확인 후 Build)
3. 완료되면 뷰포트에 **본·컨트롤러**가 생겼는지 확인합니다. — 아직 메시와 **위치가 안 맞아도 정상**입니다. Ep.2 Figure Mode에서 맞춥니다.

## 개념 보강

- **Tail Link**는 추후 추가 예정입니다.
- Build 옵션은 Biped Figure 옵션과 동일하지만, BipedPlus는 **보기 편한 레이아웃**으로 정리되어 있습니다.
- UI가 많아 보여도 실제 흐름은 **옵션 설정 → Build** 한 번이 핵심입니다.

## 주의사항

- Beast/Human 전환 시 **Leg Link·Horse Link** 구조가 달라집니다. 캐릭터 타입을 먼저 확정하세요.
- Engine 설정은 **익스포트 축**과 맞춰야 합니다. 프로젝트 규칙을 확인하세요.

---

# Ep.2 — 피규어 모드 1 · 캐릭터 비율·뼈 배치

> slug: ep02-figure-mode-1

https://youtu.be/7_mQ8OKCsjk?si=P9ygSq0G_aydBKT3

## 개요

Build로 만든 **뼈대**를 캐릭터 메시에 **겹쳐 보이게** 맞추는 단계입니다.  
**Figure Mode**에서 전체 크기, 다리·발 관절, 좌우 미러, Hip 위치를 조정합니다.

> **Figure Mode** = "이 리그를 **이 캐릭터 몸**에 맞게 배치하는" 작업 모드입니다. Build 직후 **반드시** 거칩니다.

## 사전 준비

- Ep.1에서 **Build 완료**된 리그
- 캐릭터 메시가 씬에 있음

## 단계별 가이드

### 1. Figure Mode 진입 · 전체 스케일

1. **Figure Mode** 탭으로 이동합니다.
2. Build 직후 **초기 관절 배치** 단계입니다 — 이후 Figure Mode에서 Init 데이터를 저장·재사용할 수 있습니다.
3. 캐릭터 전체 **스케일**을 조정합니다 (예: **0.9**).
4. **와이어프레임** 표시로 메시와 본 위치를 비교하기 쉽게 합니다.
5. 너무 작으면 **1.03** 등으로 미세 조정 — **완벽하지 않아도 대략 맞으면** 다음 단계로 진행합니다.

### 2. 기본 Figure 옵션

- **기본 Figure 옵션**이 체크되어 있으면, Biped Figure의 **기본 위치 데이터**가 저장·적용됩니다.
- **기본적으로 체크 유지**를 권장합니다.

### 3. 관절 배치 (메시 숨기기)

1. 작업 속도를 위해 **메시를 숨기거나** Figure Mode 기본 설정(메시·레이어 숨김)을 활용합니다.
2. 하단 **레이어** 영역에서 필요 시 **와이어프레임·메시 표시**를 토글합니다.
3. **관절 이동** 버튼으로 각 본 위치를 메시 관절에 맞춥니다.

### 4. Thigh — 박스 컨트롤러 배치

> **중요:** 발목(Ankle)이 아니라 **Thigh 쪽 박스 컨트롤러** 기준으로 배치합니다.

1. 다리 관절은 **정면(Front) 뷰** 위주로 작업합니다.
2. **Thigh 박스 컨트롤러** 위치를 메시 다리 관절에 맞춥니다.
3. 캐릭터가 비대칭이면 **한쪽만** 먼저 맞춘 뒤 **미러**로 반대쪽을 맞춥니다.

### 5. Foot(발) 세팅

1. **발목(Ankle Ball)** 위치를 맞춥니다.
2. **발끝(Toe) 높이**를 **0**으로 맞춥니다.
3. Front 뷰에서 **발·다리 정렬**을 확인합니다.

### 6. 정렬 · 미러 · Update (반영)

1. **정면(Front)** 에서 작업합니다. (팀 규칙: T-Pose, A-Pose 등 **기본 포즈**가 정해져 있으면 그에 맞춥니다.)
2. **Align(정렬)** — 좌우가 **대칭**인지 맞춥니다.
3. **Mirror** — 한쪽만 맞춰 둔 경우 **반대쪽**에 같은 배치를 복사합니다.
4. 3ds Max **스냅(90°·180°)** 으로 관절이 **똑바로** 서 있는지 확인합니다.
5. **Update** (또는 **Update from Init**) 버튼을 눌러 **지금까지 조정한 내용을 리그에 저장·반영**합니다.  
   → **이 단계를 빼먹으면** Figure Mode를 나갔을 때 **원래대로 돌아간 것처럼** 보일 수 있습니다.
6. Figure Mode를 **껐다 켜도** 배치가 **유지**되는지 확인합니다.

### 7. Hip 배치

1. **Hip**은 **Pelvis와 Thigh가 만나는 지점**에 위치합니다.
2. Figure Mode에서 Hip 전용 보기·조정으로 **다리와의 연결**이 자연스러운지 확인합니다.
3. Hip을 움직이면 Thigh 쪽이 **연동**되는지 테스트합니다.

## 팁

- **A-Pose** 등 프로덕션 포즈 규칙이 있으면 **정확히** 맞추는 것이 이후 스키닝·애니에 유리합니다.
- **미러 전에 한쪽을 먼저** 맞추는 습관이 시간을 줄입니다.
- 실수로 **Ankle 대신 Thigh 박스**를 움직였다면, 다시 Thigh 기준으로 재배치 후 Update합니다.

## 주의사항

- 관절 하나만 어긋나도 **전체 체형·스키닝**에 영향 — Pelvis·Spine·다리 **순서대로** 큰 틀부터 맞추세요.
- **Update** 없이 Figure Mode만 종료하면 **조정이 저장되지 않을 수 있습니다** — 위 6번을 습관화하세요.

---

# Ep.3 — 피규어 모드 2 · 축·미러·Init 저장

> slug: ep03-figure-mode-2

https://youtu.be/TOP1vLwUSQs?si=UWObSlCQ5_P4lc_R

## 개요

Figure Mode **후반** — Spine·Twist 개수 변경, Hip·Prop 추가/제거, **Init 패키지 저장·로드**, 저장된 Init으로 **Build**하는 방법입니다.

## 사전 준비

- Ep.2에서 관절 배치·Update까지 완료

## 단계별 가이드

### 1. Head 등 누락 관절 보정

1. 배치 후 **Head** 등 빠진 관절이 있으면 다시 조정합니다.
2. **Update** 후 정상 동작을 확인합니다.

### 2. Spine 개수 변경

1. Spine이 **3개가 아닌 4·5개** 필요하면 Build/Figure 옵션에서 개수를 변경합니다 (예: **5**).
2. **설치 변경(Install Change)** 버튼을 누릅니다.
3. 변경된 Spine 구조를 확인한 뒤, **관절 위치를 다시 Update**합니다.
4. Clavicle 등 미세하게 앞으로 밀린 경우 **수동 보정** 후 Update.

### 3. Twist 5개로 변경 (콘솔급)

1. 콘솔 게임 등에서 Twist **5개**가 필요하면 Twist 옵션을 **5**로 변경합니다.
2. **에러 메시지**가 뜨더라도(파일 강제 삭제 관련) **OK** — Figure Mode에서 5개로 바뀐 것을 확인합니다.
3. **Picker**는 당시 3개 기준일 수 있음 — Twist 5개 사용 시 Picker도 **5개 모드**로 맞춥니다 (추후 업데이트 예정).
4. 영상에서는 **원래 3개로 복구** 후 진행.

### 4. Hip · Prop

| 항목 | 설명 |
|------|------|
| **Hip 제거** | 팔·다리만 맞추고 Hip이 불필요하면 제거 가능 |
| **Hip 재설치** | Install로 다시 추가 후 **위치 재조정** |
| **Prop** | Install로 추가 (예: 쌍검). **Init 컨트롤러는 손 쪽**에 배치 |
| **Prop 미러** | **Prop은 미러되지 않음** — 참고 |

1. Prop을 여러 개 추가했다면 불필요한 것은 **삭제**합니다.
2. 다리·Prop 조정 후 **Update** — Prop 위치가 맞는지 확인합니다.

### 5. 표시 옵션 · Init 저장

1. 메시를 **디폴트 쉐이프 / 투과 / 와이어프레임** 중 선택해 볼 수 있습니다.
2. 셋업이 끝나면 **Init 데이터를 Save**합니다.
3. 저장해 두면 **다음 작업·다른 캐릭터**에서 동일 배치를 빠르게 불러올 수 있습니다.

### 6. 저장된 Init으로 Build

**Init 파일** = Figure Mode에서 Save한 **관절 배치·손가락·Prop 위치** 등이 들어 있는 패키지입니다.  
같은 체형·비슷한 캐릭터를 **또 만들 때** 시간을 크게 줄입니다.

#### 방법 A — Build 탭에서 Init 연동 Build

1. Build 탭에서 **저장된 Init 패키지로 Build** 옵션을 **켭니다**.
2. 안내에 따라 **Yes** → 팝업에서 **항목을 모두 체크** 후 진행.
3. Build가 끝나면 **저장해 두었던 관절 위치·손가락 배치**까지 **그대로** 적용된 리그가 생성됩니다.

#### 방법 B — Load로 불러오기

1. Build 탭 또는 Figure Mode의 **Load**에서 **저장 파일**을 지정합니다.
2. Figure Mode **Load/Save**만으로도 **배치만** 다시 불러올 수 있습니다.

## 개념 보강

- **Init** = Figure Mode에서 맞춘 **관절 위치·비율·일부 옵션**의 스냅샷. 팀 내 **표준 체형**을 파일로 공유할 때 유용합니다.
- **무릎·팔꿈치 Corrective 본** 등은 차후 Build 옵션에 추가될 예정입니다.

## 주의사항

- Spine/Twist 개수 변경 후 **반드시 관절 재배치 + Update**.
- Prop은 **미러 안 됨** — 양손 무기는 각각 배치하거나 Init으로 관리.
- Twist 5 + Picker 3 불일치 시 Picker 버튼과 실제 본 수가 어긋날 수 있습니다.

---

# Ep.4 — 컨트롤러 생성 · Biped Shape · 미러 & 네이밍

> slug: ep04-controller

https://youtu.be/zzFiHxCH2rY?si=IBkB_Wf7KzT4wgtC

## 개요

Figure Mode 이후 **Controller 탭**에서 Biped 컨트롤러 **쉐입 조절**, NURBS Curve 스케일, **좌우 미러**, **커스텀 컨트롤러 생성**(원점/선택/오프셋), **네이밍 접두·접미**를 설정합니다.

## 사전 준비

- Build + Figure Mode(Init) 완료
- 필요 시 Figure Mode에서 **관절 위치**를 다시 맞춘 상태

## 단계별 가이드

### 1. Controller 탭 개요

- Build 이후 **컨트롤러 위치·쉐입**을 다듬는 단계입니다.
- Figure Mode에서 위치를 바꾼 뒤 **컨트롤러 표시(플래그)** 가 어긋나면, Controller 탭에서 **다시 맞출 수 있습니다**.

### 2. Biped Shape(쉐입) 편집

1. **Biped Shape** 편집 모드로 들어갑니다.
2. 버텍스를 이동해 컨트롤러 **크기·형태**를 조정합니다.
3. **Update**하면 변경된 쉐입이 반영됩니다.
4. **반대쪽** 쉐입: **Flip(플립) 모드**로 전환해 편집 → **R** 키로 **짝이 되는 Left/Right 이름**을 찾으면 **반대쪽도 같이** 바뀌는지 확인합니다.

### 3. NURBS Curve 일괄 스케일

1. NURBS Curve 컨트롤러는 **소스·커브·포인트**가 묶여 있어 Max에서만 키우면 **느려질 수 있습니다**.
2. Controller 탭에서 **일괄 스케일**로 크기를 조정합니다.
3. 반대쪽도 **Flip 후 동일하게** 맞춥니다.

### 4. 커스텀 컨트롤러 쉐입

- 원하는 형태로 **커스텀 쉐입**을 만들 수 있습니다 (영상 후반에서 상세).

### 5. 컨트롤러 생성 모드

| 모드 | 설명 |
|------|------|
| **Origin(원점)** | 아무것도 선택하지 않은 상태 — **월드 원점**에 생성 |
| **Selected(선택)** | 선택한 본·오브젝트 위치에 생성 |
| **Offset(오프셋)** | 선택 기준 **오프셋** 위치에 생성 |

1. 캐릭터를 **Hide**한 뒤 버튼을 누르면 **빈 씬 기준** 생성 등 테스트가 가능합니다.
2. **Selected + Offset** 옵션 조합으로 **그룹 단위** 배치·회전도 가능합니다.

### 6. 네이밍 (Prefix · Suffix)

1. **Prefix(접두)** / **Suffix(접미)** 로 컨트롤러 이름 규칙을 맞춥니다.
2. **대칭(Symmetric)** 옵션 — Left/Right 등 **규칙에 맞게** 양쪽 이름이 자동 변경됩니다.
3. **접두사만** 바꿔도 양쪽 이름이 **일괄 변경**됩니다.

#### 권장 규칙

- 애니메이터가 **직접 만지는** 것 → 이름 **앞에** "컨트롤러" 뜻의 접두를 붙입니다 (팀마다 다름, 예: `Ctrl_`).
- Biped **기본 루트 이름**과 **충돌하지 않게** 팀 가이드를 확인합니다.

## 개념 보강

- Controller 탭은 **"보기 좋게 + 팀 네이밍"** 단계 — 리깅 기능 자체는 Build/Figure에서 이미 결정됩니다.
- Figure Mode에서 **관절 위치를 다시 조정**하고 Controller 탭에서 **쉐입을 다듬는** 작업을 번갈아 쓰는 경우가 많습니다.

## 주의사항

- Biped Shape 편집 후 **Update**를 잊지 마세요.
- **Flip 모드** 없이 한쪽만 수정하면 좌우 쉐입이 달라집니다.
- 네이밍 규칙은 **프로덕션 표준**과 맞춰야 Picker·Mirror·익스포트가 일관됩니다.

---

# Ep.5 — 스키닝 전 준비 · 리깅/스킨 계층 · SkinLayer Studio

> slug: ep05-skinning-prep

https://youtu.be/jtUWj2wY06w?si=TKXpvowsmEuiOUCz

## 개요

스키닝(웨이트) 본격 작업 **전**에, BipedPlus가 **리깅용**과 **스킨용**을 **나눠 두는 이유**를 이해하는 영상입니다.  
3ds Max **기본 스키닝**이 왜 힘든지, **SkinLayer Studio**가 어떤 도움을 주는지도 설명합니다.

## 핵심 개념: 두 계층

BipedPlus 리그는 **역할이 다른 두 층**으로 나뉩니다.

```
[ 리깅 계층 ]     애니메이터가 움직이는 컨트롤러, 연결(컨스트레인트) 등
       ↕
[ 스킨 본 계층 ]  메시에 웨이트가 붙고, 게임 엔진으로 보내는 본
```

**기억할 것:** 웨이트를 줄 때 **"스킨 본"** 에 붙입니다. 컨트롤러에 직접 스킨하지 않습니다.

- 스키닝 **방법**(본 추가·수치 입력)은 Max에서 하던 것과 비슷합니다.
- 중요한 건 **어느 계층의 본을 고르느냐** 입니다.

## 3ds Max 기본 스키닝 — 왜 어려운가

| 문제 | 쉽게 말하면 |
|------|-------------|
| **오래된 방식** | UI·작업 흐름이 2026년 기준으로도 **답답함** |
| **본이 많음** | Twist·Corrective 등 **구역별로** 웨이트를 나누기 힘듦 |
| **퀄리티 상승** | 예전 모바일 대비 **폴리·본 수**가 많아져 **대충**은 통하지 않음 |
| **Envelope** | 실시간으로 영역을 바꾸는 방식 — **복잡하고 느려질** 수 있음 |

### BipedPlus 리그에서의 권장

- Envelope보다 **버텍스마다 숫자를 직접** 넣는 방식을 권장 (영상 기준).
- BipedPlus처럼 **본이 많은** 리그는 Max **Skin Modifier만**으로 전부 하면 **시간이 매우** 길어질 수 있습니다.

## SkinLayer Studio란

**레이어 방식 스키닝** — 포토샵처럼 **부위별로 겹겹이** 웨이트를 쌓습니다.

| 레이어 예 | 담당 영역 |
|-----------|-----------|
| Pelvis | 골반만 |
| Spine | 등·허리 |
| Neck | 목 |
| Thigh · Knee | 허벅지·무릎 |

- 레이어마다 **칠해 둔 영역(마스크)** 이 있어 **수정·좌우 미러**가 편합니다.
- **복잡한 본**이 있어도 **한 구역씩** 나눠 작업합니다.
- Max **뷰포트와 연동** — 재생하면서 **움직임**을 바로 확인.
- 작업 속도도 **빠른 편** (제작진 경험).

> SkinLayer Studio는 **BipedPlus와 별도** 툴이지만, **같은 팀**에서 준비 중이며 **스킨 작업**을 함께 쓰도록 맞춰 두었습니다.

## 다른 스키닝 툴과의 차이

- **자동 스킨** 위주 툴: 몸통은 괜찮을 수 있으나 **페이셜·본 많은** 캐릭터는 한계.
- **레이어로 구역 관리**하는 방식(SkinLayer Studio 등)이 **지금 기준** 더 관리하기 쉽다는 입장.

## 실습 전 체크

1. Ep.1~4 **Build · Figure · Controller** 완료.
2. 스킨할 **메시** 준비.
3. **골반 → 척추 → 다리…** 큰 부위부터 생각.
4. Max Skin Modifier **만** 쓰기보다 **SkinLayer Studio** 또는 **팀 지정 스킨 툴** 사용 권장.

## Ep.6과의 차이

| Ep.5 (이번) | Ep.6 (다음) |
|-------------|-------------|
| **왜** 나누고, **무슨 툴**로 스킨할지 | BipedPlus **Skin 탭**으로 웨이트 **저장·불러오기·끄기** |

## 주의사항

- 팀에 **이미 좋은 스킨 툴**이 있으면 그걸 써도 됩니다.
- Ep.6 **Skin 탭**은 **데이터 관리** — 스킨 **그리기**와는 다른 화면입니다.

---

# Ep.6 — Skin 기능 · 웨이트 작업 준비 & 데이터 관리

> slug: ep06-skin-function

https://youtu.be/MpVUQJQufBQ?si=zGjOOsg6NRZUeTW1

## 개요

**Skin 탭**은 웨이트를 **그리는** 화면이 아니라, 이미 스킨된 메시를 **한꺼번에 고르고·끄고·백업·복구**하는 **관리** 화면입니다.

> **Skin Modifier** = Max 메시에 붙는 **스킨 수정기**.  
> **SkinLayer Studio** = Ep.5의 **레이어 방식 스킨 툴** (이름이 비슷하지만 **다른 것**입니다.)

## 사전 준비

- 메시에 **웨이트(스킨)가 적용**된 상태 — SkinLayer Studio 등으로 작업 중이거나 일부 완료

## Skin 탭 — 버튼별로

### All Mesh

- 씬에 있는 **스킨 대상이 될 수 있는 메시**를 **한 번에 선택**합니다.
- 몸·옷·액세서리 **여러 조각**이 있을 때 편합니다.

### All Skinned

- **Skin Modifier가 이미 붙은** 메시만 선택합니다.
- All Mesh와 차이: **아직 스킨 안 한** 메시는 빠집니다.

### Enable / Disable Skin

| 버튼 | 하는 일 |
|------|---------|
| **Disable** | 모든 스킨 수정기를 **잠깐 끔** — 리깅·메시만 보고 싶을 때 |
| **Enable** | 다시 **켬** |

**언제 쓰나:** 포즈를 바꿨는데 메시가 **이상하게 늘어나 보일** 때 → Disable 하면 **메시 원형**만 보여 **스킨 때문인지** 구분하기 쉽습니다.

### Reset

1. **기본 포즈(T-Pose 등)** 로 돌아간 상태에서 테스트합니다.
2. 스킨 **켠 채** 본만 움직이면 메시가 **늘어난 것처럼** 보일 수 있습니다 — **정상적인 현상**입니다.
3. **Reset** — 스킨·포즈 관련을 **처음 상태**로 되돌립니다.

### Delete Skin

- 선택한 메시에서 **웨이트·스킨 수정기 삭제**.
- **All Skin Delete** — 스킨 붙은 것 **전부** 삭제 (**되돌리기 어려움**).

### Save · Load (백업·복구)

1. **Save** — 지금 웨이트를 **파일로 저장** (백업, 다른 씬으로 옮길 때).
2. **Load** — 저장 파일을 **불러옴**. 보통 **기존 웨이트를 지우고** 새로 적용합니다.
3. 성공하면 메시 표시가 **색으로 바뀌는** 등 UI로 구분될 수 있습니다 (버전마다 다름).

#### 권장 순서

```
작업 중간중간 Save (백업)
    → 실수하면 Load (복구)
    → Delete 하기 전에도 Save
```

## Rigging Info (간단히)

- Skin 탭 근처 또는 별도 버튼으로 **Rigging Info** 패널에 들어갈 수 있습니다.
- 미러·리셋·커스텀 컨트롤러는 여기 **등록·Update**와 연결됩니다 (Ep.10·13).

## 주의사항

- **Delete All Skin** 전에 **반드시 Save**.
- Disable/Enable만으로는 **웨이트 숫자는 안 지워짐**. Reset·Delete는 **데이터가 바뀜**.
- Load 할 때 **본 개수·이름**이 저장할 때와 다르면 **실패**할 수 있음 → Build/Figure **끝난 뒤** 스킨.

---

# Ep.7 — Edit Utils · Quick Connect · 본 Stretch/Squash

> slug: ep07-edit-utils

https://youtu.be/yNhUB3AChr4?si=Lb_MgQH5sigKM4I3

## 개요

**Edit Utils** 탭 — 리깅 **수정·연결** 단계에서 쓰는 기능입니다.  
**Ani Utils**(애니메이션)와 **역할이 다릅니다** — 리거·TA가 리그를 **고칠 때** 주로 Edit Utils를 씁니다.

## Edit Utils vs Ani Utils

| 탭 | 누가·언제 | 예 |
|----|-----------|-----|
| **Edit Utils** | 리깅 **만들·수정**할 때 | 본 연결, Stretch 끄기 |
| **Ani Utils** | **애니메이션** 찍을 때 | 키, 포즈 미러, 리셋 |

## Quick Connect — 컨트롤러와 본 연결

**"이 컨트롤러를 움직이면 저 본이 따라가게"** 한 번에 연결합니다.

### 단계 (영상 순서)

1. **Edit Utils** → Quick Connect 영역을 엽니다.
2. **컨트롤러 쪽 목록**에 **움직일 쪽**(컨트롤러)을 넣습니다.
3. **본 쪽 목록**에 **따라갈 쪽**(스킨 본 등)을 넣습니다.
4. **Find(이름 찾기)** — Left Arm ↔ Left Arm 처럼 **이름이 짝**인 것을 **자동 선택**.
5. 연결 방식에서 **Local Matrix Auto Parent** 선택 → **연결** 버튼.
6. 컨트롤러를 움직여 **본이 같이** 움직이는지 확인.

**Local Matrix Auto Parent를 권장하는 이유:** 구조가 **단순**하고, 연결 후에도 **위치·회전 0에 가깝게** 유지되기 쉽습니다 (시뮬 툴·Spring Magic과도 Ep.11에서 연관).

### 다른 연결 방식

- Point Constraint, Wire Parameters 등 **여러 방식** 지원.
- 대부분 **Local Matrix Auto Parent** 하나면 충분합니다.

## Stretch / Squash 끄기

BipedPlus는 **늘리기·찌그러지기(Stretch & Squash)** 를 지원하지만, **모든 본**에 항상 켤 필요는 없습니다.

### 왜 끄나

- Stretch가 **켜진 본**에 스케일을 주면 **스킨 메시가 같이 늘어나** 보일 수 있습니다.
- **Squash & Stretch 연출을 안 쓸** 본은 **Stretch 옵션 OFF**.

### 방법

1. Edit Utils에서 해당 **본** 선택.
2. **Stretch / Squash** 관련 옵션 **끄기**.
3. **Align** 관련 옵션도 함께 확인.
4. 포즈·스케일 테스트 → **스킨이 덜 찢어지는지** 확인.

> 이 옵션은 Max 기본 Skin Modifier **만으로는** 없을 수 있어 **BipedPlus Edit Utils**에서 관리합니다.

## 커스텀 본 길이 (Bone Tip)

- 본 **끝점 길이**를 뷰포트에서 **보기 좋게** 조정 (영상 후반).
- **Stretch OFF**와 함께 쓰면 **화면만** 정리하고 애니에는 영향을 줄입니다.

## 주의사항

- Connect 전 **이름 규칙**(Left/Right, Ctrl 접두 등)을 맞추면 **Find**가 정확합니다.
- 연결을 **여러 종류 중복**하면 꼬일 수 있음 → **Local Matrix Auto Parent** 우선.
- **연출용 Stretch ON** 본과 **OFF** 본을 **미리 구분**해 두세요.

---

# Ep.8 — Picker · 커스텀 피커 구성

> slug: ep08-picker

https://youtu.be/vyr-gztosFI?si=5UqIZ6KCAJTU5F71

## 개요

**Picker** = 뷰포트에서 컨트롤러를 **하나하나 찾지 않고**, **버튼**으로 빠르게 **선택**하는 UI입니다.  
BipedPlus **Picker 탭**에서 **만들기·연결·저장**까지 합니다.

## 사전 준비

- Build ~ Controller까지 완료
- **Figure Mode가 꺼진** 상태 (애니·리깅 작업 모드)
- Picker 창이 **처음에 크게** 열릴 수 있음 — 모니터에 맞게 줄이면 됩니다

## 단계별 가이드

### 1. Picker 열기 · Scan

1. **Picker 탭**에서 Picker 창을 엽니다.
2. **Scan** — 씬의 BipedPlus 리그를 **읽어 들여** 버튼 영역이 **활성화**됩니다.  
   → Scan 안 하면 **비어 있거나** 버튼이 **안 먹을** 수 있습니다.
3. 창 **모서리**를 드래그해 크기 조절.

### 2. Connect / Disconnect — 버튼과 컨트롤러 연결

1. **Connect 모드**를 켭니다.
2. 뷰포트 **컨트롤러**를 Picker **버튼 위**로 **드래그**해 연결합니다.
3. 연결 후 Connect를 **끄고**, 버튼을 누르면 해당 컨트롤러가 **선택**됩니다.
4. **Disconnect** — 연결 해제.

> Connect **켜진 상태**에서 버튼만 누르면 **선택이 안 될** 수 있습니다 — Connect **OFF** 후 테스트.

### 3. Template vs Edit 모드

| 모드 | 설명 |
|------|------|
| **Template(템플릿)** | **기본 제공** 레이아웃 — 위치만 약간 조정 |
| **Edit(편집)** | 버튼 **추가·삭제·크기·배경** 자유 |

**템플릿을 수정하려면 (중요):**

1. **「다른 이름으로 저장」** — 원본을 **복사**합니다.
2. **Edit 모드**로 바꿉니다.
3. 팀/테스트용 이름으로 저장 후 편집.

→ **원본 템플릿을 직접 덮어쓰지 마세요.**

### 4. 버튼 추가 · 정렬 · 미러

1. Edit 모드 → **Add Button** 등으로 버튼 추가.
2. 버튼 **3개**를 세로로 배치하는 예 (영상).
3. **Align(정렬)** — 간격·줄 맞춤.
4. **Mirror** — Picker UI 위에서 **좌우 대칭** 배치.
5. **Save / Update** → **애니메이션 모드**에서 버튼 눌러 **선택 되는지** 확인.

### 5. 배경 이미지

- 캐릭터 **실루엣 그림**을 배경으로 넣으면, **어깨·손·다리** 위치에 버튼을 **직관적으로** 배치하기 좋습니다.

### 6. Ani Utils와 같이 쓰기

- Picker + **Ani Utils**를 Max **옆에 붙여 두면**  
  **버튼으로 선택 → Key → Mirror** 가 한 흐름으로 이어집니다.

## 팁

- 리그 **구조 변경**(커스텀 컨트롤러 추가, Build 옵션 변경) 후 → **Scan 다시**.
- Twist **5개** 등 본 수 바꿨으면 Picker **프리셋**도 Ep.3과 맞출 것.

---

# Ep.9 — Ani Utils · 애니메이션 보조

> slug: ep09-ani-utils

https://youtu.be/Wd0KduN1BNE?si=phFI3WpM1tKTdQ8w

## 개요

**Ani Utils** 탭 — **애니메이션을 찍을 때** 쓰는 보조 도구 모음입니다.  
Picker와 **나란히** 두고 쓰는 경우가 많습니다.

## 사전 준비

- Build 완료, **Figure Mode OFF**
- Build 시 **Rigging Info 생성** 체크 (Ep.1)

---

## 기능별 설명

### Local / World — 어느 기준으로 움직일까

| 모드 | 의미 |
|------|------|
| **Local** | **부모(어깨·손목 등)** 를 기준으로 회전·이동 |
| **World** | **씬 전체(월드)** 기준 |

- 팔을 **몸통 기준**으로 굽히려면 Local, **공중 방향**으로 돌리려면 World — **파츠마다** 팀 습관이 있습니다.

### Selection · Key · Reset

| 버튼 | 하는 일 |
|------|---------|
| **Selection** | Left Arm, Spine 등 **부위 묶음** 한 번에 선택 |
| **Key** | 선택한 것에 **키프레임** |
| **Reset All** | 리그 **전체**를 **기본 포즈**로 |
| **Reset Selection** | **고른 것만** 기본 포즈로 (Ep.14) |

- Ep.13에서 **커스텀 컨트롤러**를 Rigging Info에 등록하면 **Reset All**에 **함께** 포함됩니다.

### Mirror Pose — 좌우 포즈 복사

1. **한쪽** 팔·다리 포즈를 만듭니다.
2. **Copy** (Left → Right 등 방향 선택).
3. **Mirror** 또는 **Flip Copy** — **반대쪽**에 **대칭 포즈** 붙여 넣기.
4. 트윈테일 등 **커스텀**은 Ep.13 **Mirror Factor** 등록 후에야 **제대로** 미러됩니다.

### Slide Key · Free Key

- **Slide Key** — 키 **타이밍·값**을 슬라이드 (Max 타임라인 보조).
- **Free Key** — 특정 축만 풀어서 키 (팀 워크플로에 맞게).

### Scale

- 선택 컨트롤러 **크기(스케일)** 키 — Squash & Stretch **연출**과 연결.  
  → 스킨이 찢어지면 Ep.7 **Stretch OFF** 본인지 확인.

### Range · Play

- **Range** — 재생 **구간** 지정.
- **Play** — 그 구간만 **미리보기**.

### Pose · Posture 복사

- **Pose** — 지금 프레임 포즈 **저장·붙여넣기**.
- **Posture** — Biped **Posture** 형식 (Max Biped 사용자에게 익숙한 방식).

### Transform Snap · Bake

- **Snap** — 다른 컨트롤러·오브젝트 **위치/회전 맞춤**.
- **Bake** — 연결(Constraint) 결과를 **키·트랜스폼으로 굳히기** — 게임 엔진으로 **보낼 때** 필요할 수 있음.

### Prop Snap — 무기·소품 붙이기

- **Prop(무기)** 컨트롤러를 **손·Prop 본** 위치에 **빠르게** 맞춤.
- IK 없이 **장착 포즈** 잡을 때 유용.

---

## 추천 작업 순서 (예)

```
Picker로 Spine / Arm 선택
  → Local로 포즈
  → Key
  → Mirror Copy로 반대쪽
  → Play로 구간 확인
  → Prop Snap으로 무기
```

## 주의사항

- **Reset All**은 **등록된 커스텀**까지 돌아감 — 의도 확인.
- Local / World **섞어 쓰면** 키 값이 **어색**해질 수 있음.
- Stretch **켜진 본**에 Scale 키 남발 → **스킨 문제** (Ep.7).

---

# Ep.10 — Seed · 노드 리네임 · Layer

> slug: ep10-seed-layer

https://youtu.be/NqsSvFFHeNQ?si=moejMPrM5_5oZxu8

## 개요

팀 **이름 규칙**에 맞게 본·컨트롤러 **이름을 바꿔도**, BipedPlus가 **Picker·미러·리셋**을 계속 쓰게 하는 **Seed·Rigging Info Update**와 **Layer 정리**를 다룹니다.

## Seed — 쉽게 말하면

**전화번호부**와 비슷합니다.

- Max에서는 본 이름을 **`LeftArm`** → **`Ctrl_L_Arm`** 처럼 **바꿀** 수 있습니다.
- BipedPlus는 **Seed**에 "원래 이 본이 무엇이었는지"를 **기억**해 둡니다.
- 이름을 바꾼 뒤 **Update**만 하면, Picker·Mirror·Reset이 **새 이름**으로 다시 연결됩니다.

**Update 안 하면:** Mirror·Reset·Picker가 **일부만** 동작하거나 **Missing(누락)** 목록에 뜹니다.

## Free Node Rename — 이름 바꾸기

1. 팀 규칙에 맞게 **이름만** 변경 (Left/Right, Ctrl 접두 등).
2. **부모–자식 연결 구조**는 **그대로** 둡니다.
3. **Rigging Info**에서 **Scan → Update** (또는 Picker **Scan**).

## Rigging Info — Update · Missing From Seed

### 순서

1. **Rigging Info** 패널 열기 (Skin 탭 근처 등 — UI 버전마다 위치 확인).
2. **Scan / Load** — 지금 씬 **리그 구조** 읽기.
3. **Update** — 바뀐 이름·추가된 컨트롤러 **반영**.
4. **Missing From Seed** — Seed에는 있는데 **등록에서 빠진** 항목 목록 → **Add + Update**로 해결.

### Update가 필요한 때

| 상황 | 할 일 |
|------|--------|
| 본·컨트롤러 **이름 변경** | Update |
| **커스텀 컨트롤러** 추가 | Add → Update (Ep.13) |
| Build 옵션 바꿔 **재Build** | Scan → Update |
| Picker / Mirror **안 됨** | Missing 목록 확인 |

## Layer — 레이어 정리

BipedPlus는 **Max Layer**로 종류를 나눕니다 (이름은 팀에 맞게 바꿀 수 있음).

| Layer (예) | 넣는 것 |
|------------|---------|
| **Controller** | 애니메이터가 **움직이는** 컨트롤러 |
| **Skin** | **웨이트·익스포트**용 스킨 본 |
| **System** | Space Group 등 **보이지 않는** 정리용 |

**왜 중요한가:** 컨트롤러를 **Skin Layer**에 넣으면 FBX 등 **보낼 때** 게임에 **안 필요한 본**까지 나갈 수 있습니다 (Ep.11).

## 팁

- **이름·Layer 정리**는 리깅 **절반** — 중간중간 하면 나중이 편합니다.
- Update 전 **씬 저장(백업)**.

---

# Ep.11 — 시뮬 본 · Spring Magic 연동

> slug: ep11-simu-bone

https://youtu.be/kzzBCZ9_efc?si=76r5vzu0BzVoFx0Z

## 개요

**Spring Magic** 같은 **2차 시뮬**(머리카락, 스마트폰 줄, 체인)을 BipedPlus 리그에 **규칙에 맞게** 붙이는 방법입니다.  
핵심은 **"스킨 본"과 "컨트롤러"를 나누고**, **Space Group**으로 정리하는 것입니다.

## Spring Magic과 BipedPlus — 왜 조심해야 하나

| BipedPlus 일반 방식 | Spring Magic이 좋아하는 방식 |
|---------------------|------------------------------|
| **오프셋 + 컨트롤러** (중간에 빈 노드) | **본만** 이어진 **단순 체인** |
| 연결 후 **위치·회전 0** 유지 | **중간 노드 없이** Head → Bone → Bone |

- Spring Magic은 **오프셋(중간 그룹)** 이 있으면 **제대로 안 돌아갈 수** 있습니다.
- 오프셋 없이 Head 아래에 본만 달면 **돌아가지만**, BipedPlus **Layer·스킨 분리 규칙**과 **안 맞습니다**.

> **다른 시뮬 툴**을 쓰면 **오프셋 허용** 여부를 **직접 테스트**해 보세요. 되면 기존 BipedPlus 방식을 유지해도 됩니다.

---

## 권장 구조 (영상 — 머리카락 예)

### 1단계: 스킨 본 (게임으로 보내는 쪽)

- **스킨 계층**에 Hair1, Hair2… 처럼 **본 체인**을 만듭니다 (머리에서 이어짐).
- 여기에 **나중에 웨이트**를 줍니다.
- **Controller Layer에 넣지 않습니다.**

### 2단계: 컨트롤러 (애니메이터·시뮬이 거는 쪽)

1. 같은 구조를 **복사(클론)** → **부모 연결 끊기(Unparent)**.
2. 팀 규칙대로 **컨트롤러 이름** (예: Ctrl_Hair1, Ctrl_Hair2…).
3. 뷰포트에서 **박스 표시** 등으로 **본과 구분**.
4. **Edit Utils → Quick Connect:**
   - **컨트롤러 목록** ← Ctrl_Hair들
   - **본 목록** ← Skin Hair들
   - **Find** → **Local Matrix Auto Parent** → 연결
5. **머리**를 움직이면 **Hair 체인 전체**가 따라가는지 확인.

### 3단계: Space Group — "어디에 둘까" 문제 해결

**Space Group이란?**  
**기준 본**(영상: **머리 스킨 본**)과 **완전히 같은 위치·회전·스케일**을 가진 **빈 그룹**입니다.  
(영상에서 골반 Pelvis로 **원리**를 설명한 뒤, 머리카락 예시에서는 **머리**를 기준으로 만듭니다.)

**왜 필요한가**

- 시뮬용 컨트롤러를 **Skin Layer**에 넣으면 → FBX **익스포트 시 게임 본에 섞임**.
- **Controller Layer**만 쓰면 → **머리와 같이** 움직이지 않을 수 있음.
- **Space Group** 아래에 Ctrl만 두면 → **머리를 따라가면서**, **익스포트에는 안 섞임**.

**만드는 순서 (영상)**

1. **Skin Head**(머리 스킨 본) 선택.
2. **Create Space Group** (Figure/Edit 쪽 메뉴 — UI는 버전 확인).
3. Space Group **쉐입(곡선) 끄기** — 보이지 않게 (100% 스케일 시 이미 꺼져 있을 수 있음).
4. Space Group이 **머리와 똑같이** 움직이는지 확인.
5. **Ctrl_Hair*** 들을 **Space Group 자식**으로 → **System Layer** 등.

### 4단계: Layer 정리

| 넣는 것 | Layer |
|---------|--------|
| Ctrl_Hair* | **Controller** |
| Skin Hair* | **Skin** |
| Space Group | **System** |

---

## Spring Magic 실행

- 영상은 **구조까지** — Spring Magic **실행**은 생략 가능.
- **단순 본 체인 + Space Group 아래 Ctrl** 이면 **일반적인 Spring Magic** 워크플로와 맞추는 목표입니다.

## Rigging Info 연동

1. **Scan** → 커스텀 **Ctrl_Hair*** → **Rigging Info Add**.
2. **Update**.
3. **Ani Utils Reset All** — Hair도 **함께** 기본 포즈로 돌아가는지 확인.

## Scale 주의

- Quick Connect + **Scale 키** → **스킨 왜곡** 가능 (Ep.7 Stretch/Squash와 함께 관리).

---

# Ep.12 — Bone Mirror

> slug: ep12-bone-mirror

https://youtu.be/eyz6USGgnGM?si=PLEiWC__h1aitJGp

## 개요

**한쪽에만** 만든 **추가 본**을 **반대쪽에 복사**할 때 씁니다.  
3ds Max **기본 Bone Mirror**는 **위치가 어긋나기 쉬워서**, BipedPlus **Edit Utils → Bone Mirror**를 쓰는 방법을 설명합니다.

> **Bone Mirror** = **본 배치·생성** 단계. **포즈** 좌우 복사는 **Ani Utils**(Ep.9·14)입니다.

## Max 기본 Bone Mirror — 무엇이 불편한가

- 선택한 본의 **피벗(원점)** 기준으로 미러되어, **캐릭터 가운데(X=0) 거울**에 비친 것처럼 **안 맞는** 경우가 많습니다.
- 맞추려면 **월드 X 좌표를 손으로 계산**해야 해서 **번거롭습니다**.

## BipedPlus Bone Mirror — 사용법

**Edit Utils** 영역의 **Bone Mirror**를 엽니다.

### 옵션 (쉽게)

| 옵션 | 의미 |
|------|------|
| **Mirror Plane** | **거울면** — 보통 **YZ 평면** (= 캐릭터 **정면**에서 좌↔우 반전) |
| **X Flip** | **X축** 기준으로 **뒤집기** |
| **Headless Axis** | 미러할 때 **어느 축을 기준으로 회전**할지 — Biped는 보통 **Z**. **기본값 유지** 권장 |

```
        │ 거울면 (YZ)
   Left │ Right
   ────┼────
        │
```

### 순서

1. **미러의 기준이 될 본들**을 **전부 선택** (보통 **Left** 쪽 체인).
2. **Hierarchy** → **Parent** — **자식 본 구조**가 **유지**되게 (처음엔 수동으로 Parent 고정 필요할 수 있음).
3. **Mirror** 실행.
4. **Left / Right** 이름이 **규칙대로** 바뀌었는지 확인.
5. 움직여 보고 **Z축 회전** 등 **대칭**인지 테스트.

## 언제 쓰나

- Ep.11처럼 **커스텀 Hair·소품 본**을 **한쪽만** 만들고 **반대쪽 복제**할 때.
- Max 기본 Mirror **대신** **정면 기준** 대칭을 맞출 때.

## 주의사항

- **Hierarchy Parent** 안 맞추면 **부모가 풀리거나** 트리가 깨질 수 있음.
- **Headless Axis** 함부로 바꾸지 말 것.
- 미러 후 **Rigging Info Update** (Ep.10).

---

# Ep.13 — Custom Mirror Factor

> slug: ep13-custom-mirror-factor

https://youtu.be/RTZAQowiHqM?si=przHmCaaiCmbxfEh

## 개요

**트윈테일·머리카락**처럼 **직접 추가한 컨트롤러**도, Biped **팔·다리**처럼 **Copy · Mirror · Reset**이 되게 만드는 설정입니다.  
**Rigging Info 등록** + **Mirror Factor(미러 계수)** 가 핵심입니다.

## 사전 준비

- Ep.11과 같이 **Space Group + Skin 본 + Ctrl + Quick Connect** 완료

## 왜 필요한가 — 예시 (트윈테일)

- **Left Arm** 은 Ani Utils **Copy · Mirror** 하면 **잘** 맞습니다.
- **머리에서 뻗은 Twin1** 은 그냥 Mirror하면 **반대쪽이 이상한 각도**로 따라갑니다.

**이유:** 좌우 대칭은 **축마다 "+각도 → -각도"** 로 바꿔야 하는데, **커스텀 본마다** 규칙이 다릅니다.  
이 **축별 ±1 규칙**이 **Mirror Factor** 입니다.

수동으로 맞추면 **리거는 가능**하지만 **애니메이터에게는 너무 어렵습니다** → **Auto Calculation Mirror Factor** 로 **자동 계산**.

---

## 단계별 가이드

### 1. Rigging Info에 **컨트롤러** 등록

> **Skin 본이 아니라 Ctrl(컨트롤러)** 을 등록합니다 — 애니메이터가 **움직이는** 쪽.

1. **Twin1, Twin2…** (커스텀 Ctrl) **전부 선택**.
2. **Rigging Info** → **Add**.
3. 목록에 **New Controller** 등으로 보이면 OK.
4. **안 보이면:** **Scan → Load** 후 다시 Add.

### 2. Update

1. **Update** 클릭.
2. **Settings** 목록에 **Twin1** 등 **커스텀 이름**이 **나타나는지** 확인.  
   → Update **전**에는 **안 나올 수 있음**.

### 3. Auto Calculation Mirror Factor

1. 해당 컨트롤러 **Settings** 열기.
2. **Auto Calculation Mirror Factor** 실행.
3. **X는 반대, Y·Z는 유지** 같은 **자동 값**이 채워짐.
4. **Left** Twin을 **과감히** 회전·이동 → **Copy · Mirror to Right**.
5. **거울에 비친 것처럼** 대칭이면 **성공**.

### 4. Reset · Flip도 연동되는지 확인

| 기능 | 기대 결과 |
|------|-----------|
| **Reset All** | Twin 포함 **기본 포즈** |
| **Flip Copy** | 좌우 **플립** 정상 |
| **선택 Flip Copy** | **고른 것만** 플립 |

→ **Biped 본과 같은 느낌**으로 쓸 수 있습니다.

---

## Rigging Info — 다른 용도 (참고)

- **레퍼런스·애니메이션 보조** — 포즈 저장 등
- BipedPlus **Mirror / Reset / Picker** — **미러·기본 포즈** 데이터

(상세는 Rigging Info **별도 강좌** — 영상 언급)

## 루틴 (외울 것)

```
커스텀 Ctrl 추가
  → Rigging Info Add
  → Update
  → Auto Calculation Mirror Factor
  → Copy/Mirror 테스트
```

## 주의사항

- **Connect·Space Group** 없이 Ctrl만 Add → Reset은 되도 **Mirror가 어색**할 수 있음.
- Auto로 **안 맞을 때만** Factor **수동** 조정.
- Picker **Scan** 후 **커스텀 버튼** 연결.

---

# Ep.14 — Pose Mirror · Flip · Reset Selection

> slug: ep14-pose-mirror

https://youtu.be/gAgfK9YzqPI?si=dGFiTqEbbx7X0ui3

## 개요

**Ani Utils**에서 **Copy · Flip(미러)** 할 때, BipedPlus가 **일반 Biped보다 잘 맞는** 경우와 **부분 선택·리셋** 방법을 다룹니다.  
**COM(무게중심)**, **Clavicle(쇄골)**, **Pelvis(골반)**, **Twist** 등 **액션 포즈**에서 자주 헷갈리는 상황 위주입니다.

> **어디서 하나:** **Ani Utils** 탭 → Copy / Flip / Reset Selection

---

## COM(무게중심) 기울임 + Flip

### 일반 Biped에서

- 몸을 **기울인 채** Flip하면 **다리·발 방향**이 **원하는 반대쪽**이 **아닌** 경우가 많습니다.
- **COM**을 **기울여** 쓰는 **액션·무게중심** 포즈에서 특히 그렇습니다.

### BipedPlus

1. **Copy** → **Flip** (Ani Utils).
2. **COM이 기울어진 상태**에서도 **대칭**이 **자연스럽게** 맞는 편입니다.
3. **레퍼런스 포즈 좌우 반전**에 유리합니다.

---

## Clavicle(쇄골)만 Mirror

### 문제

- **Clavicle만** 골라 Copy · Mirror → **어깨 각도**가 **의도와 다름**.

### BipedPlus

1. 같은 포즈에서 **Clavicle만** 선택.
2. Copy · Mirror.
3. **Chest(가슴·상체)** 를 **기준**으로 대칭 → **어깨 라인**이 **맞음**.
4. **Flip**도 Clavicle **만** 선택하면 **동일**.

**용도:** 전신 말고 **어깨만** 살짝 맞출 때.

---

## Pelvis(골반) 회전 + Flip

### 현상

- **Pelvis**에 **여러 축 회전**을 빠르게 주고 Flip하면, **다리가 뒤집힌 것처럼** 나올 **수** 있습니다.

### 어떻게 보면 되나

- **Copy → Left/Right** 했을 때 **다리가 자연스럽게** 바뀌면 **올바른 미러**입니다.
- 이상하면:
  1. Flip **전에 Copy**로 **미리보기**.
  2. **Pelvis 회전 순서** 조정.
  3. 또는 **다리·팔만** 선택해서 Mirror (아래).

> BipedPlus는 **Pelvis를 억지로 분리하지 않고**도 **미러**되게 설계했다는 설명 (영상).

---

## 몸통 Twist · 부분 Mirror

**전신 Mirror** 할 때:

| 부위 | 동작 |
|------|------|
| **팔·다리** | 좌 → 우 **그대로** 대칭 |
| **몸통 기울기** | **기울기 유지** |
| **Twist(비틀림) 단일 본** | 좌×우 → **0** (비틀림 **상쇄**) |

- **몸통만 비틀림 0** — 전신 미러 시 **비틀림이 두 배** 쌓이는 걸 **막기** 위함.
- **Twist를 살리고 싶으면** → **팔·다리만** 선택 후 Copy · Mirror.

---

## Reset Selection — 상체만 리셋

**하체 포즈는 유지**, **상체만** 기본 자세로:

1. **Spine, Arm, Head** 등 **상체**만 선택.
2. Ani Utils → **Reset Selection**.
3. **선택한 부위만** T-Pose 등 **기본** — **다리 포즈는 그대로**.

**용도:** 블로킹·레퍼런스 수정할 때 **하체는 두고** 상체만 고칠 때.

---

## 체크리스트

```
□ COM 기울인 포즈 → Flip 확인
□ Clavicle만 Mirror → 어깨 대칭?
□ Pelvis 강한 회전 → Copy로 먼저 확인
□ Twist 0 싫음 → 팔/다리만 Mirror
□ 상체만 되돌리기 → Reset Selection
□ 커스텀(트윈테일) → Ep.13 등록했는지
```

## 주의사항

- Ep.13 **미등록** 커스텀은 Flip·Reset **범위 밖**일 수 있음.
- **부분 Mirror** 후 **키 다시** 잡아야 할 수 있음.

## 시리즈 마무리

Ep.0~14를 순서대로 보면 **Build → Figure → Controller → Skin → Edit → Picker → Ani → Seed → 시뮬 → Mirror**까지 **전체 흐름**을 다룹니다.  
팀 **이름 규칙·Layer·익스포트 규칙**과 함께 적용하세요.

→ [README — 목차](README.md)

---

# Ep.15 — Player License (Animator Edition)

> slug: ep15-player-license

https://youtu.be/z97kfZ-RHW4


애니메이터·스튜디오가 "몇 개 사야 하나?"를 바로 이해할 수 있도록 정리한 문서입니다.

## 1. 결론부터

**애니메이터 10명이라고 Full 라이센스 10개가 필요하지 않습니다.**

| 역할 | 에디션 | 가격 | 만료·기기 | 사용 기능 |
|------|--------|------|-----------|-----------|
| 리거 | **Full** | 얼리 엑세스 **$349** / 정식 **$399** | 평생 · **3대** | Edit + Ani (Build, Skin, Figure, INFO, Picker…) |
| 애니메이터 | **Player** (Animator / Companion) | **$0** | 평생 · **3대** | **Ani만** (Picker, Mirror, Reset, Flip 등) |

> 설치 파일은 **하나(동일 MZP)**. 라이센스 종류만 UI를 바꿉니다.
> Full은 리그 **제작**, Player는 그 리그 **위에서 애니**만 합니다.

## 2. UI 차이

### Full
좌측 트리에 **Edit** + **Ani** 탭이 모두 표시됩니다.

| Edit (리거) | Ani (공통) |
|-------------|------------|
| Figure Mode | Picker |
| Ctrl Shape | Ani Utils |
| Skin | |
| Build | |
| Info_Node | |
| Edit_Utils | |

### Player
- **Edit 카테고리 전체 숨김**, **Ani만** 남음 (Picker · Ani Utils)
- 창에 **Animator Edition** 라벨 표시

Edit를 숨기는 이유: ① 불필요한 UI 제거 ② 리그 내부를 실수로 건드리는 일 방지

## 3. Player가 동작하는 조건

| 씬 | Player |
|----|--------|
| 일반 Biped 리그 | ❌ |
| **BipedPlus Full로 Build한 리그** (INFO 노드 포함) | ✅ |

Full로 Build하면 씬에 **INFO 노드**가 생깁니다.
Picker / Mirror / Reset 등은 이 **리깅 정보**를 읽습니다. INFO는 삭제·임의 수정 금지.

## 4. 팀 워크플로

```
① 리거 (Full) → Build / 커스텀 / INFO 저장
        ↓ .max를 공유 폴더(NAS 등)에 저장
② 애니메이터 × N (Player) → 동일 파일 열기 → Picker / Ani Utils로 작업
```

### 비용 예시 (얼리 엑세스 $349 기준, 애니 10명 팀)

| 방식 | 비용 |
|------|------|
| ❌ 전원 Full | 10 × $349 = **$3,490** |
| ✅ 리거 1~2 (Full) + 애니 Player | **$349 ~ $698** |

### FAQ — 팀 규모

| 질문 | 답 |
|------|-----|
| 팀 20명, Full 1개만? | **가능.** 리거 1 Full + 애니 19 Player |
| 팀 50명, Full 1개만? | 라이센스는 되지만, 리거 1명이 병목이 될 수 있음 |
| 팀 100명, Full 1개만? | **리깅 담당 2~3명** + Full을 나눠 사는 것을 권장 |

## 5. Player가 무료인 이유

리거가 Full을 사서 BipedPlus로 리깅한 파일을 팀에 넘겼을 때, 애니메이터에게까지 풀가격을 요구하면 부담이 큽니다.
스튜디오는 제작(Full)에 투자하고, 애니 좌석은 **Companion으로 무료 발급**됩니다.

## 6. 시작하기

1. OtakuSolutions 웹사이트에서 **Player (Animator) Edition / Companion** 신청
2. 이메일 인증 → 라이센스 발급
3. **Full과 동일한 BipedPlus** 설치 (3ds Max **2022~2027** 지원)
4. Player 라이센스로 인증 → Ani 탭만 보이는지 확인
5. BipedPlus로 빌드된 `.max`를 열고 Picker / Ani Utils 사용

**기억할 규칙 3줄**
1. 설치 파일은 **하나**
2. 리거 = **Full**, 애니 = **Player (무료)** · 각 **3대**
3. 리그는 **반드시 BipedPlus로 빌드** (INFO 필요)

---

# Ep.16 — Customizing 01: Hierarchy 구조

> slug: ep16-customizing-hierarchy

https://youtu.be/totoeAouq6U


BipedPlus Build 결과물의 Hierarchy를 이해하고, 커스텀(망토·팔찌 등)을 **어디에 붙일지** 파악하기 위한 문서입니다.

> **Hierarchy View가 본체**입니다. Layer View는 정리·표시용이지, 리깅의 근본이 아닙니다.

## 1. 왜 이 문서가 필요한가

BipedPlus는 Auto Rigging으로 구조를 빠르게 만들어 줍니다.
하지만 스튜디오마다 네이밍·프롭·추가 컨트롤러가 다릅니다.
**구조만 알면 Customizing 위치가 보입니다.**

## 2. Build 후 큰 구조 — 4가지만 기억

```
씬
├── Grp_Mod          (모델링 그룹)     ← 원본 메시
├── Grp_Sys          (시스템 그룹)     ← 씬에만 있으면 되는 헬퍼 / INFO 등
├── Grp_RigModule    (리그 모듈 그룹)  ← 팔·다리·머리 모듈 + Space
└── Root / Skin 트리 (스킨 본)        ← 엔진 내보내기용 본
```

| 그룹 | 역할 | 사용자가 할 일 |
|------|------|----------------|
| **모델링 (`Grp_Mod`)** | 캐릭터 원본 메시 | 모델링을 전부 여기로 |
| **시스템 (`Grp_Sys`)** | 씬에만 존재하면 되는 노드 | INFO·헬퍼·시스템 노드 — 애니메이터 건드리지 않음 |
| **리그 모듈 (`Grp_RigModule`)** | 팔/다리/머리 모듈 + Space | **커스텀의 주 작업 영역** |
| **스킨 본** | 엔진으로 나갈 최종 본 | 스키닝·내보내기 기준 |

## 3. RigModule 안의 두 Space

| 그룹 | 의미 | 누가 쓰는가 |
|------|------|-------------|
| **`Grp_Admin_Space`** | BipedPlus 내부 계산·줄기용 Space | 일반 작업에서는 거의 안 건드림 |
| **`Grp_Custom_Space`** | 최종 본 위치에 맞춘 Space 모음 | **망토·팔찌·프롭 등 커스텀을 넣는 곳** |

**Space란?** 특정 노드와 위치·회전·스케일이 동일하게 따라가는 그룹입니다.

### 실무 예시 — Create Space by Selection

1. 최종 본 (예: `Skin_Hand`) 선택
2. **Edit_Utils → Create Space by Selection** 실행
3. 생긴 Space를 **`Grp_Custom_Space` 쪽으로 이동** 권장
4. 팔찌·추가 본·컨트롤러를 그 Space **아래**에 넣음

## 4. 커스텀 추가 규칙

| 구분 | 내용 |
|------|------|
| ✅ 해도 되는 것 | 모델링 → 모델링 그룹, Space 생성 후 커스텀 배치, 제어용 Ctrl 추가 |
| ❌ 건드리면 안 되는 것 | **INFO 노드** (데이터 저장), **Admin Space 줄기** (내부 계산) |

### Seg 본 대신 상위 Skin 본을 잡는 이유

| | 예시 | 추천 |
|--|------|------|
| 상위 Skin 본 | `Skin_Spine1` | **✅** — Space·커스텀 기준 |
| Seg 본 | `Skin_Spine1_Seg` | **❌** — Stretch 스케일 영향 가능 |

## 5. 체크리스트

- [ ] Hierarchy View로 4대 그룹을 구분할 수 있다
- [ ] 모델링은 모델링 그룹에만 넣는다
- [ ] 커스텀은 `Grp_Custom_Space` + 대상 본 Space 아래에 둔다
- [ ] Skin Parent만으로 끝내지 않고, 제어용 Ctrl도 만든다
- [ ] INFO 노드는 건드리지 않는다
- [ ] Layer만 보고 구조를 판단하지 않는다

---

# Ep.17 — Customizing 02: 레이어 시스템

> slug: ep17-customizing-layer

https://youtu.be/aXqBLud9eOk


BipedPlus 기본 Layer가 무엇이고, 어디에 무엇을 넣는지 정리한 문서입니다.

## 1. Hierarchy가 본체, Layer는 구별용

| | Hierarchy | Layer |
|--|-----------|-------|
| 역할 | 부모·자식·Space·구속 관계 | 노드 묶음·표시/숨김·작업 편의 |
| 중요도 | **근본** | 정리·운영 편의 |

Layer는 "어디에 모아 두느냐"이지, "어떻게 물려 있느냐"가 아닙니다.
구조 이해는 항상 **Hierarchy → Layer** 순으로 하세요.

## 2. BipedPlus 기본 레이어 맵

| 레이어 (역할) | 넣는 것 | 메모 |
|-------------|---------|------|
| **Biped** | Biped 본 (`Bip001…`) | Biped 본체만 |
| **Ctrl** | 애니메이터가 직접 조작하는 메인 컨트롤러 | 팔찌·망토 등 **커스텀 Ctrl**도 여기 |
| **Ctrl_Seg** | Twist / Seg 등 세부 컨트롤러 | 미세 조정용 |
| **Ctrl_Seg_Pin** | Stretch / Squash용 Pin·Shape류 | 핀셋처럼 쓰는 컨트롤러 |
| **Init_Ctrl** | Figure 모드용 Init 컨트롤러 | 셋업 단계. 애니 작업 중 보통 숨김 |
| **Modeling** | 메시·소품 모델링 | Hierarchy의 모델링 그룹과 맞춤 |
| **Skin** | Skin 본 | 엔진 내보내기 **핵심** |
| **Sys** | 시스템 노드 | 아래 Sys 규칙 참고 |

## 3. Skin vs Ctrl — 역할 분리

| | Skin | Ctrl |
|--|------|------|
| 목적 | 메시 변형 · 엔진 본 | 애니메이터 조작 |
| 역할 | 내보내기 기준 | 애니 UI |

Player 사용자는 주로 **Ctrl (+ 피커)** 만 만지면 됩니다.

### Ctrl vs Ctrl_Seg 구분 기준

- **스케일이 먹히는지 여부**, **메인인지 디테일인지**
- 팀 취향에 맞게 나누어도 됩니다. 중요한 건 **애니가 잡을 것과 안 잡을 것을 헷갈리지 않게** 두는 것.

## 4. Sys 레이어 규칙

다음 중 하나(또는 둘 다)에 해당하면 Sys:

1. **어떤 Hierarchy에도 묶이지 않고, 씬에만 존재하면 된다**
2. **애니메이터가 건드릴 필요가 없다**

예시: INFO 데이터 노드, Offset (Ctrl은 Ctrl 레이어, Offset은 Sys 권장), Shadow 헬퍼

## 5. 커스텀 배치 빠른 가이드

| 추가물 | Hierarchy | Layer |
|--------|-----------|-------|
| 메시 (모자·포켓) | 모델링 그룹 | Modeling |
| 애니용 컨트롤러 | Custom Space 하위 | **Ctrl** |
| Twist / 세부 | 기존 모듈 규칙 | Ctrl_Seg |
| 절대 만지면 안 됨 | 시스템 그룹 | **Sys** |
| 엔진 본 | Skin 트리 | **Skin** |

## 6. Player(애니)를 위한 한 줄

Edit UI는 이미 숨겨져 있습니다. **Init_Ctrl · Sys** 는 건드리지 않는 것이 좋습니다.
수정이 필요하면 **내부 리깅 담당자에게 문의**하세요.

---

# Ep.18 — Customizing 03: 네이밍 & 팀 템플릿

> slug: ep18-customizing-naming

https://youtu.be/2-FuUHzUm1k


스튜디오 네이밍으로 고친 뒤, **한 번만 만들고 common 템플릿으로 재사용**하는 방법을 정리한 문서입니다.

## 1. 왜 필요한가

BipedPlus 기본 네이밍(`Skin_*`, `Ctrl_*`, `Bip001`)이 팀 규칙과 다르면 막히는 경우가 많습니다.
팀 규칙으로 바꿀 수 있고, **매번 Rename을 반복하지 않도록 템플릿으로 저장**하는 것이 핵심입니다.

## 2. 전체 파이프라인

![BipedPlus Naming & Template Pipeline](ep18-customizing-naming/pipeline.png)

## 3. 네이밍 변경 허용 범위 및 주의사항

| 구분 | 내용 |
|------|------|
| ✅ 변경 가능 | Biped 이름, Skin 본 이름 (엔진 bone name 일치 목적), Controller 접두사, Layer 표시 이름 |
| ⚠️ 주의 | Hierarchy / Constraint / Space가 깨지지 않게 **일괄 규칙**으로 변경 권장 |
| ❌ Fix Missing 생략 금지 | Rename 후 Fix Missing을 안 하면 Mirror / Picker / Reset 어긋남 |

## 4. Fix Missing — Rename 후에도 시스템이 따라오게

이름이 바뀌면 INFO에 기록된 예전 이름과 어긋나 **Missing**이 납니다.

| 개념 | 설명 |
|------|------|
| **Seed** | 이름이 바뀌어도 노드를 구별하기 위한 유니크한 주소값 |
| **Fix Missing** | Seed를 이용해 새 이름 노드를 다시 링크하는 기능 |

**절차**: Rig Info → Load → Missing 확인 → Fix Missing 실행 → Mirror 갱신 확인 → Ani Utils로 검증

## 5. 레이어 이름 커스터마이징

Layer 설정 → **Edit Name** → 팀/프로덕트명 프리셋 → 접두/접미 추가 → **Apply to Rename**
Hierarchy의 역할 분류는 유지하고, **표시 이름만** 팀에 맞춥니다.

## 6. common 템플릿으로 저장

| 단계 | 내용 |
|------|------|
| 1 | 모델링 씬 (또는 New File) |
| 2 | **Merge** — `common/BP_Human_Template.max`의 노드 모두 |
| 3 | BipedPlus **Scan** — INFO / 미러 등 유지 확인 |
| 4 | Figure / 비율 등 캐릭터별 조정 |
| 5 | 캐릭터 폴더에 저장 → 애니 팀 배포 (Player로 작업) |

```
공유_리깅/
├── character_A/
├── character_B/
└── common/
    └── BP_Human_Template.max   ← 네이밍·레이어·INFO까지 맞춘 마스터
```

## 7. Picker 예외

| | INFO / Ani Utils (Fix Missing 후) | Picker |
|--|-----------------------------------|--------|
| Rename 후 | 복구 가능 | **이름 기반**이라 레이아웃이 깨질 수 있음 |

**권장**: 네이밍·템플릿이 확정된 뒤 새 네이밍으로 Picker를 재구성하고 팀에 배포.
Picker 파일 위치는 BipedPlus **Setting** 옵션에서 확인.

## 8. 체크리스트

- [ ] 팀 bone / Ctrl / Layer 네이밍 규칙이 문서화되어 있다
- [ ] Rename 예제(또는 팀 스크립트)로 일괄 변경한다
- [ ] Rename 후 Fix Missing + Mirror / Reset 검증을 한다
- [ ] `common/` 템플릿 `.max`가 공유폴더에 있다
- [ ] 새 캐릭터는 Merge → Scan 절차를 쓴다
- [ ] Picker는 최종 네이밍 기준으로 재구성한다
- [ ] 애니 팀은 Player로 **동일 설치 파일**을 쓴다


### Example Rename Script (handle 2-pass)

Edit `NODE_RENAME_MAP` to match your team's rules. Run in Max Script Editor after Build.

```python
# -*- coding: utf-8 -*-
"""BipedPlus naming example (handle 2-pass, short version)"""

import pymxs
rt = pymxs.runtime

NODE_RENAME_MAP = [
    ("Bip001",          "Bip009"),
    ("Bip001 Pelvis",   "Bip009 Pelvis"),
    ("Ctrl_Head",       "CTL_Head"),
    ("Skin_Spine1",     "Bip001_Spine1"),
    ("Skin_L_Hand",     "Bip001_L_Hand"),
]

def rename_nodes_by_handle(rename_map=None):
    mapping = rename_map if rename_map is not None else NODE_RENAME_MAP
    if not mapping:
        raise ValueError("NODE_RENAME_MAP is empty.")

    # Phase 1 — collect handles
    collected = []
    for src, dst in mapping:
        node = rt.getNodeByName(src)
        if node is None:
            print(f"[SKIP] {src}")
            continue
        collected.append((int(node.handle), src, dst))

    if not collected:
        raise ValueError("No rename targets found in scene.")

    # Phase 2 — apply
    for handle, src, dst in collected:
        node = rt.maxOps.getNodeByHandle(handle)
        if node is None:
            raise RuntimeError(f"handle={handle} restore failed ({src} → {dst})")
        node.name = dst
        print(f"[OK] {src} → {dst}")

    print(f"Done ({len(collected)} ok). Next: Rig Info → Fix Missing")

if __name__ == "__main__":
    rename_nodes_by_handle()
```

> After running: Rig Info → Fix Missing → verify Mirror / Reset.

---

# Ep.15 — Skin Bones 노드 레퍼런스 (`Skin_*`)

> slug: ep19-skin-bones-reference

이 문서는 BipedPlus가 기본값으로 생성하는 `Skin_*` 스키닝 본의 네이밍 가이드라인입니다.
오타쿠솔루션즈가 3dsMax 리깅 작업 시 지향하는 명칭 규칙을 공유드립니다.

내부 리깅 네이밍 가이드라인이 없는 협력처는 이 문서를 기준으로 참고하시면 되고,
커스터마이징 작업 시에도 본 명칭 및 구조 약속을 유지하시면 호환성이 보장됩니다.

BipedPlus는 일부 관절에서 **메인본**과 **세분화본(`_Seg`)** 을 분리한 이중 구조를 사용합니다.
관절 스트레칭 표현과 스케일 에러 방지가 목적입니다.


| | |
|---|---|
| Pattern | `Skin_*` |
| Left + Center nodes | **85** |
| Right nodes (mirror) | 63 |
| Total nodes | **148** |


### 스키닝 구조 설계

| 역할 | 설명 |
|------|------|
| 메인 본 (`is_skinned=X`) | 관절 운동의 주축/회전 담당. 스키닝 불필요. |
| `_Seg` 본 (`is_skinned=O`) | 메인본의 자식. 각 세그먼트의 메시 변형 담당. |
| `_Twist` 본 (`is_skinned=O`) | 팔다리를 따라 트위스트 회전을 분산. |
| `_Cor` 본 (`is_skinned=O`) | 좌우 대칭 보정을 위한 교정본. |
| Seg/Twist 없는 본 (`is_skinned=O`) | 메인본에 직접 스키닝 (예: 손가락, 손, 발). |
| `Nub` 본 (`is_skinned=X`) | 체인 끝점 마커. 스키닝 불필요. |

### 필드 설명

| 필드 | 설명 |
|------|------|
| `direction` | left / center |
| `is_skinned` | 해당 본이 스킨 웨이트를 받는지 여부 (O = 예, X = 아니요) |
| `parent` | 부모 노드 (`{LAST}` = 체인의 마지막 번호 본) |
| `part` | 리그 모듈 파트 ID |


### Node List (85 — Left + Center)

| node | part | direction | parent | is_skinned |
| --- | --- | --- | --- | --- |
| Skin_Com | spine | center | Root | O |
| Skin_Pelvis | spine | center | Root | X |
| Skin_Spine | spine | center | Skin_Pelvis | X |
| Skin_Spine1 | spine | center | Skin_Spine | X |
| Skin_Spine2 | spine | center | Skin_Spine1 | X |
| Skin_Spine3 | spine | center | Skin_Spine2 | X |
| Skin_Spine4 | spine | center | Skin_Spine3 | X |
| Skin_Pelvis_Seg | spine | center | Skin_Pelvis | O |
| Skin_Spine1_Seg | spine | center | Skin_Spine1 | O |
| Skin_Spine2_Seg | spine | center | Skin_Spine2 | O |
| Skin_Spine3_Seg | spine | center | Skin_Spine3 | O |
| Skin_Spine4_Seg | spine | center | Skin_Spine4 | O |
| Skin_Spine_Seg | spine | center | Skin_Spine | O |
| Skin_Head | neck-head | center | Skin_Neck | X |
| Skin_Neck | neck-head | center | Skin_Spine{LAST} | X |
| Skin_HeadNub | neck-head | center | Skin_Head | X |
| Skin_Head_Seg | neck-head | center | Skin_Head | O |
| Skin_Neck_Seg | neck-head | center | Skin_Neck | O |
| Skin_Neck_Twist | neck-head | center | Skin_Neck | O |
| Skin_L_Clavicle | arm | left | Skin_Spine{LAST} | O |
| Skin_L_ForeArm | arm | left | Skin_L_UpperArm | X |
| Skin_L_Hand | arm | left | Skin_L_ForeArm | O |
| Skin_L_UpperArm | arm | left | Skin_L_Clavicle | X |
| Skin_L_ForeArm_Seg1 | arm | left | Skin_L_ForeArm | O |
| Skin_L_ForeArm_Seg2 | arm | left | Skin_L_ForeArm | O |
| Skin_L_ForeArm_Seg3 | arm | left | Skin_L_ForeArm | O |
| Skin_L_ForeArm_Seg4 | arm | left | Skin_L_ForeArm | O |
| Skin_L_ForeArm_Seg5 | arm | left | Skin_L_ForeArm | O |
| Skin_L_UpperArm_Seg1 | arm | left | Skin_L_UpperArm | O |
| Skin_L_UpperArm_Seg2 | arm | left | Skin_L_UpperArm | O |
| Skin_L_UpperArm_Seg3 | arm | left | Skin_L_UpperArm | O |
| Skin_L_UpperArm_Seg4 | arm | left | Skin_L_UpperArm | O |
| Skin_L_UpperArm_Seg5 | arm | left | Skin_L_UpperArm | O |
| Skin_L_Finger0 | finger0 | left | Skin_L_Hand | O |
| Skin_L_Finger01 | finger0 | left | Skin_L_Finger0 | O |
| Skin_L_Finger02 | finger0 | left | Skin_L_Finger01 | O |
| Skin_L_Finger1 | finger1 | left | Skin_L_Hand | O |
| Skin_L_Finger11 | finger1 | left | Skin_L_Finger1 | O |
| Skin_L_Finger12 | finger1 | left | Skin_L_Finger11 | O |
| Skin_L_Finger2 | finger2 | left | Skin_L_Hand | O |
| Skin_L_Finger21 | finger2 | left | Skin_L_Finger2 | O |
| Skin_L_Finger22 | finger2 | left | Skin_L_Finger21 | O |
| Skin_L_Finger3 | finger3 | left | Skin_L_Hand | O |
| Skin_L_Finger31 | finger3 | left | Skin_L_Finger3 | O |
| Skin_L_Finger32 | finger3 | left | Skin_L_Finger31 | O |
| Skin_L_Finger4 | finger4 | left | Skin_L_Hand | O |
| Skin_L_Finger41 | finger4 | left | Skin_L_Finger4 | O |
| Skin_L_Finger42 | finger4 | left | Skin_L_Finger41 | O |
| Skin_L_Calf | leg | left | Skin_L_Thigh | X |
| Skin_L_Foot | leg | left | Skin_L_Calf | O |
| Skin_L_HorseLink | leg | left | Skin_L_Calf | X |
| Skin_L_Thigh | leg | left | Skin_Pelvis | X |
| Skin_L_Toe0 | leg | left | Skin_L_Foot | O |
| Skin_L_Calf_Seg1 | leg | left | Skin_L_Calf | O |
| Skin_L_Calf_Seg2 | leg | left | Skin_L_Calf | O |
| Skin_L_Calf_Seg3 | leg | left | Skin_L_Calf | O |
| Skin_L_Calf_Seg4 | leg | left | Skin_L_Calf | O |
| Skin_L_Calf_Seg5 | leg | left | Skin_L_Calf | O |
| Skin_L_HorseLink_Seg1 | leg | left | Skin_L_HorseLink | O |
| Skin_L_HorseLink_Seg2 | leg | left | Skin_L_HorseLink | O |
| Skin_L_HorseLink_Seg3 | leg | left | Skin_L_HorseLink | O |
| Skin_L_HorseLink_Seg4 | leg | left | Skin_L_HorseLink | O |
| Skin_L_HorseLink_Seg5 | leg | left | Skin_L_HorseLink | O |
| Skin_L_Thigh_Seg1 | leg | left | Skin_L_Thigh | O |
| Skin_L_Thigh_Seg2 | leg | left | Skin_L_Thigh | O |
| Skin_L_Thigh_Seg3 | leg | left | Skin_L_Thigh | O |
| Skin_L_Thigh_Seg4 | leg | left | Skin_L_Thigh | O |
| Skin_L_Thigh_Seg5 | leg | left | Skin_L_Thigh | O |
| Skin_Prop1 | prop1 | center | Root | O |
| Skin_Prop2 | prop2 | center | Root | O |
| Skin_Prop3 | prop3 | center | Root | O |
| Skin_L_BackA_Skirt1 | extra_skirt | left | Skin_Pelvis | O |
| Skin_L_BackA_Skirt2 | extra_skirt | left | Skin_L_BackA_Skirt1 | O |
| Skin_L_BackA_Skirt3 | extra_skirt | left | Skin_L_BackA_Skirt2 | O |
| Skin_L_FrontA_Skirt1 | extra_skirt | left | Skin_Pelvis | O |
| Skin_L_FrontA_Skirt2 | extra_skirt | left | Skin_L_FrontA_Skirt1 | O |
| Skin_L_FrontA_Skirt3 | extra_skirt | left | Skin_L_FrontA_Skirt2 | O |
| Skin_L_Side_Skirt1 | extra_skirt | left | Skin_Pelvis | O |
| Skin_L_Side_Skirt2 | extra_skirt | left | Skin_L_Side_Skirt1 | O |
| Skin_L_Side_Skirt3 | extra_skirt | left | Skin_L_Side_Skirt2 | O |
| Skin_L_Back_Hip | extra_hip | left | Skin_Pelvis | O |
| Skin_L_Front_Hip | extra_hip | left | Skin_Pelvis | O |
| Skin_L_Side_Hip | extra_hip | left | Skin_Pelvis | O |
| Skin_L_ForeArm_Cor | extra_forearm | left | Skin_L_UpperArm | O |
| Skin_L_Calf_Cor | extra_calf | left | Skin_L_Thigh | O |

> **Right Side** — Replace `_L_` with `_R_` to get the mirrored node.
> e.g. `Skin_L_UpperArm` → `Skin_R_UpperArm`

---

# Ep.16 — Controllers 노드 레퍼런스 (`Ctrl_*`)

> slug: ep20-controller-reference

이 문서는 BipedPlus가 기본값으로 생성하는 `Ctrl_*` 컨트롤러 노드의 네이밍 가이드라인입니다.
오타쿠솔루션즈가 3dsMax 리깅 작업 시 지향하는 컨트롤러 명칭 규칙을 공유드립니다.

내부 리깅 네이밍 가이드라인이 없는 협력처는 이 문서를 기준으로 참고하시면 되고,
커스터마이징 작업 시에도 본 명칭을 유지하시면 BipedPlus와의 호환성이 보장됩니다.


| | |
|---|---|
| Pattern | `Ctrl_*` |
| Left + Center nodes | **82** |
| Right nodes (mirror) | 72 |
| Total nodes | **154** |


### 필드 설명

| 필드 | 설명 |
|------|------|
| `direction` | left / center |
| `part` | 리그 모듈 파트 ID |


### Node List (82 — Left + Center)

| node | part | direction |
| --- | --- | --- |
| Ctrl_Move | sys | center |
| Ctrl_World | sys | center |
| Ctrl_Pelvis | spine | center |
| Ctrl_Spine | spine | center |
| Ctrl_Spine1 | spine | center |
| Ctrl_Spine2 | spine | center |
| Ctrl_Spine3 | spine | center |
| Ctrl_Spine4 | spine | center |
| Ctrl_Head | neck-head | center |
| Ctrl_Neck | neck-head | center |
| Ctrl_L_Clavicle_Main | arm | left |
| Ctrl_L_ForeArm_Arc | arm | left |
| Ctrl_L_ForeArm_Main | arm | left |
| Ctrl_L_Hand_Main | arm | left |
| Ctrl_L_UpperArm_Arc | arm | left |
| Ctrl_L_UpperArm_Main | arm | left |
| Ctrl_L_ForeArm_Seg1 | arm | left |
| Ctrl_L_ForeArm_Seg2 | arm | left |
| Ctrl_L_ForeArm_Seg3 | arm | left |
| Ctrl_L_ForeArm_Seg4 | arm | left |
| Ctrl_L_ForeArm_Seg5 | arm | left |
| Ctrl_L_UpperArm_Seg1 | arm | left |
| Ctrl_L_UpperArm_Seg2 | arm | left |
| Ctrl_L_UpperArm_Seg3 | arm | left |
| Ctrl_L_UpperArm_Seg4 | arm | left |
| Ctrl_L_UpperArm_Seg5 | arm | left |
| Ctrl_L_Finger0 | finger0 | left |
| Ctrl_L_Finger01 | finger0 | left |
| Ctrl_L_Finger02 | finger0 | left |
| Ctrl_L_Finger1 | finger1 | left |
| Ctrl_L_Finger11 | finger1 | left |
| Ctrl_L_Finger12 | finger1 | left |
| Ctrl_L_Finger2 | finger2 | left |
| Ctrl_L_Finger21 | finger2 | left |
| Ctrl_L_Finger22 | finger2 | left |
| Ctrl_L_Finger3 | finger3 | left |
| Ctrl_L_Finger31 | finger3 | left |
| Ctrl_L_Finger32 | finger3 | left |
| Ctrl_L_Finger4 | finger4 | left |
| Ctrl_L_Finger41 | finger4 | left |
| Ctrl_L_Finger42 | finger4 | left |
| Ctrl_L_Calf_Arc | leg | left |
| Ctrl_L_Calf_Main | leg | left |
| Ctrl_L_Foot_Main | leg | left |
| Ctrl_L_HorseLink_Arc | leg | left |
| Ctrl_L_HorseLink_Main | leg | left |
| Ctrl_L_Thigh_Arc | leg | left |
| Ctrl_L_Thigh_Main | leg | left |
| Ctrl_L_Toe0 | leg | left |
| Ctrl_L_Calf_Seg1 | leg | left |
| Ctrl_L_Calf_Seg2 | leg | left |
| Ctrl_L_Calf_Seg3 | leg | left |
| Ctrl_L_Calf_Seg4 | leg | left |
| Ctrl_L_Calf_Seg5 | leg | left |
| Ctrl_L_HorseLink_Seg1 | leg | left |
| Ctrl_L_HorseLink_Seg2 | leg | left |
| Ctrl_L_HorseLink_Seg3 | leg | left |
| Ctrl_L_HorseLink_Seg4 | leg | left |
| Ctrl_L_HorseLink_Seg5 | leg | left |
| Ctrl_L_Thigh_Seg1 | leg | left |
| Ctrl_L_Thigh_Seg2 | leg | left |
| Ctrl_L_Thigh_Seg3 | leg | left |
| Ctrl_L_Thigh_Seg4 | leg | left |
| Ctrl_L_Thigh_Seg5 | leg | left |
| Ctrl_L_BackA_Skirt1 | extra_skirt | left |
| Ctrl_L_BackA_Skirt2 | extra_skirt | left |
| Ctrl_L_BackA_Skirt3 | extra_skirt | left |
| Ctrl_L_BackA_Skirt4 | extra_skirt | left |
| Ctrl_L_FrontA_Skirt1 | extra_skirt | left |
| Ctrl_L_FrontA_Skirt2 | extra_skirt | left |
| Ctrl_L_FrontA_Skirt3 | extra_skirt | left |
| Ctrl_L_FrontA_Skirt4 | extra_skirt | left |
| Ctrl_L_Side_Skirt1 | extra_skirt | left |
| Ctrl_L_Side_Skirt2 | extra_skirt | left |
| Ctrl_L_Side_Skirt3 | extra_skirt | left |
| Ctrl_L_Side_Skirt4 | extra_skirt | left |
| Ctrl_L_Skirt_DP_Set | extra_skirt | left |
| Ctrl_L_Back_Hip | extra_hip | left |
| Ctrl_L_Front_Hip | extra_hip | left |
| Ctrl_L_Side_Hip | extra_hip | left |
| Ctrl_L_ForeArm_Cor | extra_forearm | left |
| Ctrl_L_Calf_Cor | extra_calf | left |

> **Right Side** — Replace `_L_` with `_R_` to get the mirrored node.
> e.g. `Ctrl_L_UpperArm_Main` → `Ctrl_R_UpperArm_Main`

---

# Ep.17 — Biped Bones 노드 레퍼런스 (`Bip001*`)

> slug: ep21-biped-bones-reference

이 문서는 BipedPlus 리그의 기반이 되는 3ds Max Biped 시스템 내부 본(`Bip001*`)의 네이밍 가이드라인입니다.
오타쿠솔루션즈의 3dsMax 리깅 작업에서 실제로 사용되는 Biped 본 구조를 공유드립니다.

내부 리깅 가이드라인이 없는 협력처는 이 문서를 참고용으로 활용하시면 됩니다.
커스터마이징 시에도 본 문서를 기준으로 참고하시면 됩니다.


| | |
|---|---|
| Pattern | `Bip001*` |
| Left + Center nodes | **39** |
| Right nodes (mirror) | 30 |
| Total nodes | **69** |
| Common (biped + beast) | 31 |
| Human only | 36 |
| Beast only | 2 |


### 필드 설명

| 필드 | 설명 |
|------|------|
| `direction` | left / center |
| `parent` | 부모 노드 (`{LAST}` = 체인의 마지막 번호 본) |
| `part` | 리그 모듈 파트 ID |


### Node List (39 — Left + Center)

| node | part | direction | parent |
| --- | --- | --- | --- |
| Bip001 | sys | center | Ctrl_Move |
| Bip001 Footsteps | sys | center | Bip001 |
| Bip001 Pelvis | spine | center | Bip001 |
| Bip001 Spine | spine | center | Bip001 Pelvis |
| Bip001 Spine1 | spine | center | Bip001 Spine |
| Bip001 Spine2 | spine | center | Bip001 Spine1 |
| Bip001 Head | neck-head | center | Bip001 Neck |
| Bip001 Neck | neck-head | center | Bip001 Spine2 |
| Bip001 HeadNub | neck-head | center | Bip001 Head |
| Bip001 L Clavicle | arm | left | Bip001 Spine2 |
| Bip001 L Forearm | arm | left | Bip001 L UpperArm |
| Bip001 L Hand | arm | left | Bip001 L Forearm |
| Bip001 L UpperArm | arm | left | Bip001 L Clavicle |
| Bip001 L Finger0 | finger0 | left | Bip001 L Hand |
| Bip001 L Finger01 | finger0 | left | Bip001 L Finger0 |
| Bip001 L Finger02 | finger0 | left | Bip001 L Finger01 |
| Bip001 L Finger0Nub | finger0 | left | Bip001 L Finger02 |
| Bip001 L Finger1 | finger1 | left | Bip001 L Hand |
| Bip001 L Finger11 | finger1 | left | Bip001 L Finger1 |
| Bip001 L Finger12 | finger1 | left | Bip001 L Finger11 |
| Bip001 L Finger1Nub | finger1 | left | Bip001 L Finger12 |
| Bip001 L Finger2 | finger2 | left | Bip001 L Hand |
| Bip001 L Finger21 | finger2 | left | Bip001 L Finger2 |
| Bip001 L Finger22 | finger2 | left | Bip001 L Finger21 |
| Bip001 L Finger2Nub | finger2 | left | Bip001 L Finger22 |
| Bip001 L Finger3 | finger3 | left | Bip001 L Hand |
| Bip001 L Finger31 | finger3 | left | Bip001 L Finger3 |
| Bip001 L Finger32 | finger3 | left | Bip001 L Finger31 |
| Bip001 L Finger3Nub | finger3 | left | Bip001 L Finger32 |
| Bip001 L Finger4 | finger4 | left | Bip001 L Hand |
| Bip001 L Finger41 | finger4 | left | Bip001 L Finger4 |
| Bip001 L Finger42 | finger4 | left | Bip001 L Finger41 |
| Bip001 L Finger4Nub | finger4 | left | Bip001 L Finger42 |
| Bip001 L Calf | leg | left | Bip001 L Thigh |
| Bip001 L Foot | leg | left | Bip001 L Calf |
| Bip001 L HorseLink | leg | — | Bip001 L Calf |
| Bip001 L Thigh | leg | left | Bip001 Pelvis |
| Bip001 L Toe0 | leg | left | Bip001 L Foot |
| Bip001 L Toe0Nub | leg | left | Bip001 L Toe0 |

> **Right Side** — Replace `Bip001 L ...` with `Bip001 R ...` to get the mirrored node.
> e.g. `Bip001 L Thigh` → `Bip001 R Thigh`