---

# Ep.0 — 为何而建 · Squash & Stretch · 绑定流水线的现实

> slug: ep00-intro

https://youtu.be/QIkUKj2gXl0?si=WeA7K1R26MOcZbce

💡 本教程视频同步发布于我们的 Bilibili 频道。如遇 YouTube 播放不畅，欢迎前往 Bilibili 观看，感谢您的支持与理解！

📺 Bilibili 频道：[https://space.bilibili.com/3706990259865792](https://space.bilibili.com/3706990259865792)

## 概述

这是一个介绍视频，说明了**为何要制作 BipedPlus**、在实际工作中反复出现的**绑定与流水线问题**是什么，以及这个工具试图**从哪个方向解决**这些问题。  
重点在于理解**背景与理念**，而非如何按工具按钮。

## 本视频涵盖的核心主题

### 1. 反复出现的绑定基础工作

在许多制作公司担任 Technical Artist 或首席绑定师时，每次换公司都会重复相似的工作。

- 从**零开始**重建绑定指南、命名规范和骨骼体系
- 无论是初创公司、中小企业还是大企业，都要重复**从头（等级 1〜5）开始积累**，直至达到制作水平（视频：等级 30）的过程
- 每个项目情况不同，**根基虽相似**却每次都要重置的经历

BipedPlus 的目的是**减少这种重复成本**，让你能在共同的基础上立即开始工作。

### 2. Squash & Stretch（挤压与拉伸）与韩国游戏

动画12原则中的第一个——**Squash & Stretch**，对于夸张、节奏和生动感至关重要。

- 仅从游戏内视频中也可以看出，**有无 Squash & Stretch** 对表现水平的影响巨大
- 原神、守望先锋等海外和全球大作大胆运用了骨骼变形
- 在韩国游戏内视频中，许多情况下由于**绑定系统无法支持**，该技法根本没有得到运用
- **这并不是因为游戏引擎而不可能实现。** 只要结构正确，完全可以实现

BipedPlus 的目标是在绑定阶段支持 **Stretch/Squash/Scale 表现**，让动画师能够实现所需的夸张效果。

### 3. 碎片化的工具环境

3ds Max 绑定生态系统中有许多有用的脚本和插件，但它们**四散各处**。

- 没有共同标准，知识只作为**个人经验**积累
- 难以找到哪些工具是最新的或推荐的

BipedPlus **不是万能工具。** 其方向是将基于 Biped 的高级绑定构建和动画辅助所需的功能整合到**一个包**中。

### 4. 绑定是重要但不显眼的部分

- 建模、动画、特效通过**视觉**很容易获得反馈
- 绑定涉及**数据结构、效率和流水线**，艺术总监和制作人难以直接感受
- 即便如此，尊重**1〜2 名动画 TA 和绑定师**的意见，可以防止以下问题

#### 实际现场案例：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/d3HgGbj8TLM?si=7GT2egRDRg3KTW3N

💡 本教程视频同步发布于我们的 Bilibili 频道。如遇 YouTube 播放不畅，欢迎前往 Bilibili 观看，感谢您的支持与理解！

📺 Bilibili 频道：[https://space.bilibili.com/3706990259865792](https://space.bilibili.com/3706990259865792)

## 概述

这是在首次启动 BipedPlus 后，在 **Build 选项卡**中设置绑定基本骨架并通过 **Build** 生成的过程。  
一次性配置 Preset、Human/Beast 类型以及 Spine、Twist、Hip、Prop 等选项。

## 前期准备

- BipedPlus 已**安装到 3ds Max 并以面板形式附着**
- 示例角色网格（视频：Mabel）或自己项目的角色

> **Build 选项卡** = **首次创建绑定时**使用的设置界面。在这里选择选项并按下 **Build** 按钮，即可生成骨骼和控制器。

## 分步指南

### 1. Preset（预设）

1. 确认 Build 选项卡顶部的 **Preset** 区域。
2. 将每个制作项目中常用的选项组合用 **Save** 或 **Save As** 保存起来。
3. 切换到其他项目时，加载保存的 Preset 即可快速切换。
4. 视频中以**默认值**进行。

### 2. Biped Style（Human / Beast）

| 类型 | 用途 |
|------|------|
| **Human（人形）** | 普通人型角色 |
| **Beast（兽形）** | 兽类型 — 脚部有 **4 个 Leg Link** 等，结构不同 |

1. 根据角色类型选择 **Human** 或 **Beast**。
2. Beast 在新场景中预览以确认整体结构（脚部 4 链接等），然后选择适合目标角色的类型。
3. 示例角色（Mabel）使用 **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 — Figure Mode 1 · 角色比例与骨骼摆放

> slug: ep02-figure-mode-1

https://youtu.be/_-NezYThaoA?si=WbMVpdem4V45f7Cd

💡 本教程视频同步发布于我们的 Bilibili 频道。如遇 YouTube 播放不畅，欢迎前往 Bilibili 观看，感谢您的支持与理解！

📺 Bilibili 频道：[https://space.bilibili.com/3706990259865792](https://space.bilibili.com/3706990259865792)

## 概述

这是将通过 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 — 方框控制器摆放

> **重要：** 以 **Thigh 侧的方框控制器**为基准摆放，而不是 Ankle（脚踝）。

1. 腿部关节主要在**正视图（Front）**中操作。
2. 将 **Thigh 方框控制器**的位置对准网格的腿部关节。
3. 如果角色是不对称的，先对齐**一侧**，再用 **Mirror** 对齐另一侧。

### 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** 等制作规范姿势，**精确对齐**对后续蒙皮和动画更有利。
- 养成**镜像前先对齐一侧**的习惯可以节省时间。
- 如果不小心移动了 **Thigh 方框而不是 Ankle**，重新以 Thigh 为基准重新摆放后再 Update。

## 注意事项

- 哪怕只有一个关节偏移，也会影响**整体体型和蒙皮** — 请按照 Pelvis → Spine → 腿的**顺序**，从大框架开始对齐。
- 不执行 **Update** 就退出 Figure Mode，**调整可能不会被保存** — 请养成上述第 6 步的习惯。

---

# Ep.3 — Figure Mode 2 · 轴·镜像·Init 保存

> slug: ep03-figure-mode-2

https://youtu.be/yKzeD1wRNdg?si=4mqrqt62zYc_-ZRk

💡 本教程视频同步发布于我们的 Bilibili 频道。如遇 YouTube 播放不畅，欢迎前往 Bilibili 观看，感谢您的支持与理解！

📺 Bilibili 频道：[https://space.bilibili.com/3706990259865792](https://space.bilibili.com/3706990259865792)

## 概述

Figure Mode **后半段** — 更改 Spine 和 Twist 数量、添加/删除 Hip 和 Prop、**保存和加载 Init 包**以及如何使用保存的 Init 进行 **Build**。

## 前期准备

- 在 Ep.2 中完成关节摆放和 Update

## 分步指南

### 1. 修正 Head 等遗漏的关节

1. 摆放后如果有 **Head** 等遗漏的关节，重新调整。
2. **Update** 后确认正常运行。

### 2. 更改 Spine 数量

1. 如果需要 **4 或 5 个 Spine 而不是 3 个**，在 Build/Figure 选项中更改数量（例如：**5**）。
2. 按下 **Install Change（安装更改）**按钮。
3. 确认更改后的 Spine 结构，然后**重新 Update 关节位置**。
4. 如果 Clavicle 等骨骼轻微向前偏移，**手动修正**后再 Update。

### 3. 更改为 5 个 Twist（主机级）

1. 在主机游戏等需要 **5 个 Twist** 时，将 Twist 选项更改为 **5**。
2. 即使出现**错误消息**（与强制删除文件相关），也按 **OK** — 在 Figure Mode 中确认已更改为 5 个。
3. **Picker** 可能仍基于 3 个 — 使用 5 个 Twist 时，也将 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 数据**。
3. 保存后，在**后续工作或其他角色**中可以快速加载相同的摆放。

### 6. 使用保存的 Init 进行 Build

**Init 文件** = 在 Figure Mode 中保存的包含**关节位置、手指位置、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/cfZeKpSwXpM?si=nzL2Z8uPX414dXnW

💡 本教程视频同步发布于我们的 Bilibili 频道。如遇 YouTube 播放不畅，欢迎前往 Bilibili 观看，感谢您的支持与理解！

📺 Bilibili 频道：[https://space.bilibili.com/3706990259865792](https://space.bilibili.com/3706990259865792)

## 概述

在 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/hGpNiXwD6FY?si=j3j_AbSRPGg0Yk2h

💡 本教程视频同步发布于我们的 Bilibili 频道。如遇 YouTube 播放不畅，欢迎前往 Bilibili 观看，感谢您的支持与理解！

📺 Bilibili 频道：[https://space.bilibili.com/3706990259865792](https://space.bilibili.com/3706990259865792)

## 概述

这是一个在正式开始蒙皮（权重）作业**之前**，理解 BipedPlus **将绑定层和蒙皮层分开的原因**的视频。  
同时也讲解了为什么 3ds Max **默认蒙皮**比较困难，以及 **SkinLayer Studio** 能提供哪些帮助。

## 核心概念：两个层级

BipedPlus 骨架分为**职责不同的两个层**。

```
[ 绑定层 ]     动画师操作的控制器、约束等
       ↕
[ 蒙皮骨骼层 ] 承载网格权重并导出到游戏引擎的骨骼
```

**记住：** 分配权重时，将权重附加到**"蒙皮骨骼"**上。不要直接蒙皮到控制器上。

- 蒙皮的**方法**（添加骨骼、输入数值）与 Max 中的常规做法类似。
- 重要的是**选择哪个层级的骨骼**。

## 3ds Max 默认蒙皮 — 为什么困难

| 问题 | 简单来说 |
|------|----------|
| **方式陈旧** | UI 和工作流程在 2026 年标准下仍然**繁琐** |
| **骨骼众多** | Twist、Corrective 等难以**按区域**划分权重 |
| **品质要求提升** | 与早期移动端相比，面数和骨骼数增加，**粗糙处理已不可行** |
| **Envelope** | 实时修改区域的方式 — 可能**复杂且变慢** |

### BipedPlus 骨架的推荐做法

- 相比 Envelope，推荐**逐顶点直接输入数值**的方式（视频标准）。
- 像 BipedPlus 这样**骨骼众多**的骨架，如果全部用 Max **Skin Modifier** 完成，可能**耗时极长**。

## 什么是 SkinLayer Studio

**分层蒙皮** — 像 Photoshop 图层一样，**按部位叠加**权重。

| 图层示例 | 负责区域 |
|---------|---------|
| 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/Q4i9YjUF-5g?si=pSC7NxVi6aiGLm9I

💡 本教程视频同步发布于我们的 Bilibili 频道。如遇 YouTube 播放不畅，欢迎前往 Bilibili 观看，感谢您的支持与理解！

📺 Bilibili 频道：[https://space.bilibili.com/3706990259865792](https://space.bilibili.com/3706990259865792)

## 概述

**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

- 从选中的网格中**删除权重和 Skin Modifier**。
- **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/NveCoPYTWnc?si=8lRmeFFkgfdlrZbN

💡 本教程视频同步发布于我们的 Bilibili 频道。如遇 YouTube 播放不畅，欢迎前往 Bilibili 观看，感谢您的支持与理解！

📺 Bilibili 频道：[https://space.bilibili.com/3706990259865792](https://space.bilibili.com/3706990259865792)

## 概述

**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** → 点击 **Connect** 按钮。
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/sIaP6u_IDn4?si=YUSWCM3V558NzZZs

💡 本教程视频同步发布于我们的 Bilibili 频道。如遇 YouTube 播放不畅，欢迎前往 Bilibili 观看，感谢您的支持与理解！

📺 Bilibili 频道：[https://space.bilibili.com/3706990259865792](https://space.bilibili.com/3706990259865792)

## 概述

**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/RijqeciqCIA?si=5K39zeb9DrrSJh-9

💡 本教程视频同步发布于我们的 Bilibili 频道。如遇 YouTube 播放不畅，欢迎前往 Bilibili 观看，感谢您的支持与理解！

📺 Bilibili 频道：[https://space.bilibili.com/3706990259865792](https://space.bilibili.com/3706990259865792)

## 概述

**Ani Utils** 选项卡 — **制作动画时**使用的辅助工具集合。  
通常与 Picker **并排**使用。

## 前置条件

- Build 已完成，**Figure Mode 已关闭**
- 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** — 将约束结果**烘焙为关键帧和变换** — **导出到游戏引擎**时可能需要。

### 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/wCcFWZNft2c?si=QYRefXUb2xPVjsPj

💡 本教程视频同步发布于我们的 Bilibili 频道。如遇 YouTube 播放不畅，欢迎前往 Bilibili 观看，感谢您的支持与理解！

📺 Bilibili 频道：[https://space.bilibili.com/3706990259865792](https://space.bilibili.com/3706990259865792)

## 概述

介绍**Seed·Rigging Info Update**和**Layer整理**，即使按照团队**命名规则**修改了骨骼和控制器的**名称**，也能让BipedPlus的**Picker·镜像·重置**继续正常使用。

## 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/0yHhCZqgYZ4?si=YObinszdcfC3bhtr

💡 本教程视频同步发布于我们的 Bilibili 频道。如遇 YouTube 播放不畅，欢迎前往 Bilibili 观看，感谢您的支持与理解！

📺 Bilibili 频道：[https://space.bilibili.com/3706990259865792](https://space.bilibili.com/3706990259865792)

## 概述

介绍如何将**Spring Magic**等**二次模拟**（头发、手机绳、链条）按照规则挂接到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** → 可能无法**跟随头部**移动。
- 只将Ctrl放在**Space Group**下 → **跟随头部**的同时，**不会混入导出**。

**创建步骤（视频）**

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也**一起**回到默认姿势。

## 缩放注意

- Quick Connect＋**缩放关键帧** → 可能导致**蒙皮变形**（与Ep.7 Stretch/Squash一起管理）。

---

# Ep.12 — Bone Mirror

> slug: ep12-bone-mirror

https://youtu.be/dygdHA5scrQ?si=2bL6WV1jkEIouzTq

💡 本教程视频同步发布于我们的 Bilibili 频道。如遇 YouTube 播放不畅，欢迎前往 Bilibili 观看，感谢您的支持与理解！

📺 Bilibili 频道：[https://space.bilibili.com/3706990259865792](https://space.bilibili.com/3706990259865792)

## 概述

用于将**只在一侧**创建的**额外骨骼** **复制到对侧**。  
介绍使用BipedPlus **Edit Utils → Bone Mirror**的方法，以替代容易产生位移的3ds Max**默认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/-VY-RPIP9nA?si=KLZLoIZOhb5No8LG

💡 本教程视频同步发布于我们的 Bilibili 频道。如遇 YouTube 播放不畅，欢迎前往 Bilibili 观看，感谢您的支持与理解！

📺 Bilibili 频道：[https://space.bilibili.com/3706990259865792](https://space.bilibili.com/3706990259865792)

## 概述

使**直接添加的控制器**（如双马尾、头发）也能像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中注册**控制器**

> 注册的是**Ctrl（控制器）**而非Skin骨骼 — 动画师**操作**的一侧。

1. **全选** Twin1、Twin2…（自定义Ctrl）。
2. **Rigging Info** → **Add**。
3. 列表中出现**New Controller**等则表示成功。
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**只Add Ctrl → Reset可以但**Mirror效果可能不自然**。
- 只在Auto**不匹配时**才**手动**调整Factor。
- Picker **Scan**后连接**自定义按钮**。

---

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

> slug: ep14-pose-mirror

https://youtu.be/0wKVNBRbovs?si=ZpoWdyJUmLkTOJfR

💡 本教程视频同步发布于我们的 Bilibili 频道。如遇 YouTube 播放不畅，欢迎前往 Bilibili 观看，感谢您的支持与理解！

📺 Bilibili 频道：[https://space.bilibili.com/3706990259865792](https://space.bilibili.com/3706990259865792)

## 概述

介绍在**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. 只选择Clavicle执行**Flip**时**效果相同**。

**用途：** 只需微调**肩部**而非整体时。

---

## Pelvis（骨盆）旋转＋Flip

### 现象

- 对**Pelvis**快速施加**多轴旋转**后Flip，可能使**腿部呈反转状态**。

### 如何判断

- 执行**Copy → Left/Right**时**腿部自然切换**则说明是**正确的镜像**。
- 若效果异常：
  1. Flip**前先用Copy**进行**预览**。
  2. 调整**Pelvis旋转顺序**。
  3. 或只选择**腿和手臂**进行Mirror（见下）。

> BipedPlus设计为**无需强行分离Pelvis**也能**正常镜像**（视频说明）。

---

## 躯干Twist · 部分Mirror

**全身Mirror**时：

| 部位 | 动作 |
|------|------|
| **手臂·腿** | 左 → 右**直接**对称 |
| **躯干倾斜** | **保持倾斜** |
| **Twist（扭转）单骨骼** | 左×右 → **0**（扭转**抵消**） |

- **只有躯干扭转归零** — 防止全身镜像时**扭转叠加为两倍**。
- **想保留Twist** → 只选择**手臂·腿**后Copy · Mirror。

---

## Reset Selection — 只重置上身

**保持下身姿势**，只将**上身**重置为默认：

1. 只选择**上身**：Spine、Arm、Head等。
2. Ani Utils → **Reset Selection**。
3. **只有所选部位**回到T-Pose等**默认姿势** — **腿部姿势保持不变**。

**用途：** 修正Blocking·参考时，**保持下身**只修改上身。

---

## 检查清单

```
□ 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 授权 (Animator Edition)

> slug: ep15-player-license

https://youtu.be/9bXxrnpclU8

YouTube에 접속이 어려운 경우 Bilibili에서 OtakuSolutions 채널을 검색하여 시청하실 수 있습니다.


本文档帮助动画师和工作室快速理解"到底需要购买几个授权？"

> 如果无法访问 YouTube，可在 **Bilibili** 搜索 OtakuSolutions 频道观看相关内容。

## 1. 结论

**10名动画师并不意味着需要10个 Full 授权。**

| 角色 | 版本 | 价格 | 到期·设备 | 使用功能 |
|------|------|------|----------|---------|
| 绑定师 | **Full** | 抢先体验 **$349** / 正式版 **$399** | 终身 · **3台** | Edit + Ani (Build, Skin, Figure, INFO, Picker…) |
| 动画师 | **Player** (Animator / Companion) | **$0** | 终身 · **3台** | **仅 Ani** (Picker, Mirror, Reset, Flip 等) |

> 安装程序**只有一个（相同 MZP）**。只有授权类型会改变界面。
> Full = 骨架**制作**。Player = 在该骨架**上进行动画**。

## 2. 界面差异

### 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 的原因：① 去除无关界面 ② 防止误操作骨架内部

## 3. Player 的运行条件

| 场景 | Player |
|------|--------|
| 普通 Biped 骨架 | ❌ |
| **用 BipedPlus Full 构建的骨架**（含 INFO 节点） | ✅ |

使用 Full 构建后，场景中会生成 **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人团队，只买1个 Full？ | **可以。** 1名绑定师 Full + 19名动画师 Player |
| 50人团队，只买1个 Full？ | 授权上没问题，但1名绑定师可能成为瓶颈 |
| 100人团队，只买1个 Full？ | 推荐：**2~3名绑定师**共同分担 Full 授权 |

## 5. Player 免费的原因

当绑定师购买 Full 并将 BipedPlus 绑定好的文件交给团队时，要求动画师为从不使用的 Edit 功能支付全价是不合理的。
工作室在制作环节（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/joFROh0jGag

如果无法访问 YouTube，可在 **Bilibili** 搜索 OtakuSolutions 频道观看相关内容。


本文档帮助您理解 BipedPlus 构建结果的 Hierarchy，并了解**在哪里附加**自定义内容（披风、手环等）。

> **Hierarchy View 是核心。** Layer View 仅用于整理和显示——不是绑定的基础。

## 1. 为什么需要本文档

BipedPlus 通过 Auto Rigging 快速构建结构。
但每个工作室的命名、道具和附加控制器各不相同。
**理解结构，就能找到自定义的位置。**

## 2. 构建后的四大组结构

```
场景
├── 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 主干**（内部计算） |

### 为什么使用父级 Skin 骨骼而非 Seg 骨骼

| | 示例 | 推荐 |
|--|------|------|
| 父级 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/G5sRWu0EGRk

如果无法访问 YouTube，可在 **Bilibili** 搜索 OtakuSolutions 频道观看相关内容。


本文档说明 BipedPlus 默认层级的内容，以及各层应放置什么。

> 如果无法访问 YouTube，可在 **Bilibili** 搜索 OtakuSolutions 频道观看相关内容。

## 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** | 蒙皮骨骼 | 引擎导出的**核心** |
| **Sys** | 系统节点 | 参见下方 Sys 规则 |

## 3. Skin vs Ctrl — 角色分离

| | Skin | Ctrl |
|--|------|------|
| 目的 | 网格变形 · 引擎骨骼 | 动画师操作 |
| 角色 | 导出基准 | 动画界面 |

Player 用户主要只需操作 **Ctrl（+ Picker）**。

### 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 界面已经被隐藏。最好**不要触碰 Init_Ctrl 或 Sys**。
如需修改，请**联系内部绑定负责人**。

---

# Ep.18 — Customizing 03: 命名规范 & 团队模板

> slug: ep18-customizing-naming

https://youtu.be/pwvMbO_Y36k

如果无法访问 YouTube，可在 **Bilibili** 搜索 OtakuSolutions 频道观看相关内容。


本文档说明如何将 BipedPlus 命名调整为工作室规范，并**保存为可重复使用的 common 模板**。

> 如果无法访问 YouTube，可在 **Bilibili** 搜索 OtakuSolutions 频道观看相关内容。

## 1. 为什么需要

当 BipedPlus 默认命名（`Skin_*`、`Ctrl_*`、`Bip001`）与团队规则不匹配时，工作流程就会受阻。
可以进行重命名——关键是**将结果保存为模板，避免每次重复操作**。

## 2. 完整流程

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

## 3. 命名变更的允许范围和注意事项

| 类型 | 内容 |
|------|------|
| ✅ 可以更改 | Biped 名称、Skin 骨骼名称（与引擎骨骼名对应）、控制器前缀、层显示名称 |
| ⚠️ 注意 | 使用**统一批量规则**重命名，避免破坏 Hierarchy / Constraint / Space |
| ❌ 禁止省略 Fix Missing | 重命名后不执行 Fix Missing 将导致 Mirror / Picker / Reset 失效 |

## 4. Fix Missing — 重命名后保持系统同步

名称更改后，INFO 记录的旧名称会不匹配，导致 **Missing** 错误。

| 概念 | 说明 |
|------|------|
| **Seed** | 即使节点被重命名，也能识别该节点的唯一地址值 |
| **Fix Missing** | 利用 Seed 重新链接重命名后节点的功能 |

**操作步骤**：Rig Info → Load → 检查 Missing → 执行 Fix Missing → 确认镜像更新 → 通过 Ani Utils 验证

## 5. 自定义层名称

层设置 → **Edit Name** → 新建预设（团队/产品名）→ 添加前缀/后缀 → **Apply to Rename**
保持 Hierarchy 中的角色分类不变——只将**显示标签**改为符合团队规范的名称。

## 6. 保存为 common 模板

| 步骤 | 内容 |
|------|------|
| 1 | 打开建模场景（或新建文件） |
| 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 |
|--|-----------------------------------|--------|
| 重命名后 | 可恢复 | **基于名称**——布局可能失效 |

**推荐**：在命名和模板确定后，用新命名重建 Picker，并与模板 `.max` 一起分发给团队。
Picker 文件位置在 BipedPlus **Settings** 中查看。

## 8. 检查清单

- [ ] 团队的 bone / Ctrl / Layer 命名规则已文档化
- [ ] 使用批量重命名脚本（或团队脚本）
- [ ] 重命名后：验证 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_*`)

> slug: ep19-skin-bones-reference

本文档分享了 BipedPlus 默认生成的 `Skin_*` 蒙皮骨骼命名规范。
这是 OtakuSolutions 在 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 — 控制器节点名称参考 (`Ctrl_*`)

> slug: ep20-controller-reference

本文档分享了 BipedPlus 默认生成的 `Ctrl_*` 控制器节点命名规范。
这是 OtakuSolutions 在 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 骨骼节点名称参考 (`Bip001*`)

> slug: ep21-biped-bones-reference

本文档分享了作为 BipedPlus 骨架基础的 3ds Max Biped 系统内部骨骼 (`Bip001*`) 的命名参考。
这是 OtakuSolutions 在 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`