Appearance
换装管线闭环设计
设计虚拟人物换装资源管线的完整闭环:从资源制作 → 打包配置 → 运行时加载 → 换装切换。
背景
B 站虚拟形象支持用户自由搭配衣服、裙子、翅膀、头发等部件。和传统游戏的"预设套装"不同,这里的换装是任意组合——每个部件独立建模、独立加载、运行时拼接。
整体架构
资源制作端(美术)→ 资源管线(工程化)→ 配置系统 → 运行时加载 → 换装引擎各环节设计
1. 资源制作规范
骨骼标准:
- 所有部件使用同一套骨架(统一命名、统一层级)
- 禁止美术在部件模型中添加独立骨骼
蒙皮标准:
- 每根骨骼最多影响 4 个顶点(移动端限制)
- 蒙皮权重总和 = 1.0
2. 打包配置
部件配置 JSON:
{
"id": "w_skirt_001",
"type": "skirt",
"slot": "bottom",
"model": "w_skirt_001.glb",
"textures": ["tex_default.ktx2"],
"bones": ["Hips", "Spine"],
"collision": "none"
}- 槽位系统:身体(body) / 上衣(top) / 下装(bottom) / 头发(hair) / 翅膀(wing)
- 互斥规则:裙子(skirt) 和 裤子(pants) 互斥(同属 bottom 槽位)
- 依赖检查:翅膀依赖身体模型的背骨节点
3. 换装管线
用户选择部件 → 检查槽位互斥 → 请求下载模型 → Draco 解压 → KTX2 上传 GPU
→ 合并骨骼 → 更新 SkinnedMesh → 换装完成骨骼合并
核心难点:不同部件的骨骼是独立的,需要合并到同一个 Skeleton。
身体骨骼 (60 bones) + 裙子骨骼 (5 bones,引用身体的 Hips, Spine)
→ 合并为 65 bones 的统一 Skeleton
→ 裙子 Mesh 重新绑定到合并后的 Skeleton运行时性能
- 首次换装:下载 + 解压 + 骨骼合并 ≈ 1-2s
- 再次换同一部件:缓存命中,< 100ms
- 连续换装:无内存泄漏(修复后)
可视化管线
(架构图和流程图的原始素材在 docs/素材/哔哩哔哩/换装捏人/换装/)
- 换装管线闭环设计.png
- 换装资源管线操作说明.png
- 合并骨骼.png
- 蒙皮与骨骼.png
专利
- Standard BiliBili CA 虚拟人物换装标准
- BliBli 2D 和 3D 虚拟人物换装资源管线
- 移动端基于 Unity 虚拟换装多人同屏高并发优化
闭环管线架构图说明
这张图描述从换装配置到 Unity 调试预览的完整闭环:
左侧:配置生产链路 产品需求 → 制作数据 → 维护数据、种类配置、部件配置 → 导入 Excel 并制作配置 → 数据可视化(角色构建表、种类构建表、模型部件构建表)→ 自动化生成换装配置工具 → 生成运行时数据(部件模型 fbx→prefab、角色 prefab、各类 ScriptableObject 配置)。
右侧:调试预览链路 拖入角色 → 勾选开启调试 → 播放后预览。以"裙子"为例:修改种类里的默认裙子 → 点击更新部件数据 → Game 视图刷新角色服装。
闭环点:配置生成 → Unity 预览 → 修改默认部件或配置粒度 → 再更新预览。
公开版深化
案例定位
换装管线闭环设计不是孤立笔记,而是渲染与图形能力下的一个可复用案例。它服务于“性能治理与稳定性优化”这条主线,公开版重点保留问题抽象、工程取舍和可复用方法,不暴露内部系统细节。
关键问题
设计虚拟人物换装资源管线的完整闭环:从资源制作 → 打包配置 → 运行时加载 → 换装切换。
这篇文章已经覆盖 背景、整体架构、各环节设计、可视化管线、专利、闭环管线架构图说明。后续阅读时应重点看三件事:问题如何被定义,方案如何在约束下落地,以及哪些经验可以迁移到下一次类似项目。
企业级产出
| 产出 | 公开表达 |
|---|---|
| 问题定义 | 用用户体验、性能、稳定性或交付效率描述影响 |
| 技术方案 | 保留架构、流程、算法和工具链层面的抽象 |
| 指标证据 | 只使用页面已有数字或经过脱敏审查的量级 |
| 复用方法 | 沉淀为 SOP、检查清单、图谱关系或后续案例链接 |
指标与证据
- 每根骨骼最多影响 4 个顶点(移动端限制)
- 首次换装:下载 + 解压 + 骨骼合并 ≈ 1-2s
- 再次换同一部件:缓存命中,< 100ms
复盘结论
这个案例的核心价值,是把一次具体工程处理沉淀成可检索、可复盘、可继续扩展的技术资产。没有公开证据支撑的细节继续留在私有材料池,不进入线上页面。
公开版深化
案例定位
换装管线闭环设计不是孤立笔记,而是渲染与图形能力下的一个可复用案例。它服务于“性能治理与稳定性优化”这条主线,公开版重点保留问题抽象、工程取舍和可复用方法,不暴露内部系统细节。
关键问题
设计虚拟人物换装资源管线的完整闭环:从资源制作 → 打包配置 → 运行时加载 → 换装切换。
这篇文章已经覆盖 背景、整体架构、各环节设计、可视化管线、专利、闭环管线架构图说明。后续阅读时应重点看三件事:问题如何被定义,方案如何在约束下落地,以及哪些经验可以迁移到下一次类似项目。
企业级产出
| 产出 | 公开表达 |
|---|---|
| 问题定义 | 用用户体验、性能、稳定性或交付效率描述影响 |
| 技术方案 | 保留架构、流程、算法和工具链层面的抽象 |
| 指标证据 | 只使用页面已有数字或经过脱敏审查的量级 |
| 复用方法 | 沉淀为 SOP、检查清单、图谱关系或后续案例链接 |
指标与证据
- 每根骨骼最多影响 4 个顶点(移动端限制)
- 首次换装:下载 + 解压 + 骨骼合并 ≈ 1-2s
- 再次换同一部件:缓存命中,< 100ms
复盘结论
这个案例的核心价值,是把一次具体工程处理沉淀成可检索、可复盘、可继续扩展的技术资产。没有公开证据支撑的细节继续留在私有材料池,不进入线上页面。
公开版深化
案例定位
换装管线闭环设计不是孤立笔记,而是渲染与图形能力下的一个可复用案例。它服务于“性能治理与稳定性优化”这条主线,公开版重点保留问题抽象、工程取舍和可复用方法,不暴露内部系统细节。
关键问题
设计虚拟人物换装资源管线的完整闭环:从资源制作 → 打包配置 → 运行时加载 → 换装切换。
这篇文章已经覆盖 背景、整体架构、各环节设计、可视化管线、专利、闭环管线架构图说明。后续阅读时应重点看三件事:问题如何被定义,方案如何在约束下落地,以及哪些经验可以迁移到下一次类似项目。
企业级产出
| 产出 | 公开表达 |
|---|---|
| 问题定义 | 用用户体验、性能、稳定性或交付效率描述影响 |
| 技术方案 | 保留架构、流程、算法和工具链层面的抽象 |
| 指标证据 | 只使用页面已有数字或经过脱敏审查的量级 |
| 复用方法 | 沉淀为 SOP、检查清单、图谱关系或后续案例链接 |
指标与证据
- 每根骨骼最多影响 4 个顶点(移动端限制)
- 首次换装:下载 + 解压 + 骨骼合并 ≈ 1-2s
- 再次换同一部件:缓存命中,< 100ms
复盘结论
这个案例的核心价值,是把一次具体工程处理沉淀成可检索、可复盘、可继续扩展的技术资产。没有公开证据支撑的细节继续留在私有材料池,不进入线上页面。