Avatar PhysBone Converter


将 VRC PhysBone 高保真转换为 VRM 1.0 SpringBone,并将转换后的头像 Prefab 导出为 VRM 1.0 .vrm。
- 使用 VRC 实际初始化后的 PhysBone 拓扑,而不是只猜测 Transform 层级。
- 按关节采样 Pull、Spring、Stiffness、Gravity、Gravity Falloff、Immobile、Radius 与曲线。
- 保留原骨骼层级;分支按 VRM 线性 Spring 规则拆分,必要时只生成尾端 Transform。
- 转换 Sphere、Capsule、Inside Sphere/Capsule 与 Plane Collider。
- 只绑定源 PhysBone 显式引用的 ColliderGroup,保留 Collider–Spring 碰撞关系。
- 将 Angle、Hinge、Polar 限制映射到 UniVRM 的 VRMC_springBone_limit 扩展。
- 分析面板显示 PhysBone、Spring、动态骨骼、模拟段、Collider、显式引用、警告与错误总数。
- 默认保留并禁用源组件,可重复重建,也可安全移除本工具生成的数据。
- 只转换当前启用且位于 active 层级中的 PhysBone/Collider,与 UniVRM 实际导出的头像状态一致。
- 保存独立、非 Variant 的转换 Prefab 及其专用 VRM10Object,并直接打开 UniVRM 的 VRM 1.0 导出面板生成 .vrm。
- Unity 2022.3 LTS
- VRChat SDK - Avatars 3.10.3 或兼容的新版本
- UniVRM 0.131.2:com.vrmc.gltf 与 com.vrmc.vrm 必须来自同一版本
VRChat SDK 不随本工具分发,请先通过 VRChat Creator Companion 安装 Avatar SDK。
由于 Unity 2022.3 的 Custom .unitypackage 导入不会可靠地把 Assets/ 工具与 Packages/ Embedded Package 在同一事务中完成解析,本项目不再提供或支持合并 UniVRM 的一键包。
- 打开 UniVRM v0.131.2 官方 Release,下载 VRM-0.131.2_a471.unitypackage(这是 VRM 1.0 包,不是 UniVRM-... 的 VRM 0.x 包)。
- 在 Unity 使用 Assets > Import Package > Custom Package... 导入官方包,保持全部文件勾选。
- 等待 Unity 完成 Package Manager resolve、脚本编译和 domain reload。
- 从 v2.3.1 Release 下载 AvatarPhysBoneConverter-v2.3.1.unitypackage。
- 再导入本工具包;完成后主菜单位于 Tools > Avatar > PhysBone to VRM 1 SpringBone。
如果尚未安装前置依赖,工具包中的 Tools > Avatar > Download UniVRM 0.131.2... 会打开官方 UniVRM 下载页。该引导不会静默下载或修改项目文件;安装 UniVRM 和 VRChat SDK、等待编译完成后,主转换菜单会自动启用。
UPM 安装同样要求先安装完整 UniVRM 0.131.2 和 VRChat SDK,再使用:
https://github.com/ccd775/PhysBone2SpringBone.git#v2.3.1
如果项目已经存在另一套 UniVRM,请不要重复导入不同版本;com.vrmc.gltf 与 com.vrmc.vrm 必须保持同一版本。
- 打开 Tools > Avatar > PhysBone to VRM 1 SpringBone。
- 把场景中的头像根 Animator 拖到 Avatar Animator。
- 点击 分析转换质量与兼容性,检查阻断错误与格式差异警告。
- 点击 转换为 VRM 1.0 SpringBone。
- 在 Prefab / VRM 1.0 导出 区域保存转换后的 Prefab。
- 以该 Prefab 为导出目标,打开 UniVRM VRM 1.0 导出面板,补齐并确认 Meta、Mesh、Export Settings 后导出 .vrm。
默认生成的 VRM10Object 与 Prefab 位于 Assets/PhysBone2SpringBoneGenerated,不会写入安装包目录。
- Sphere 与 Capsule 使用标准 VRM 1.0 SpringBone Collider 数据。
- Inside Sphere/Capsule 与 Plane 使用 VRMC_springBone_extended_collider;Plane 同时带标准 Sphere fallback。
- Angle/Hinge/Polar 使用 VRMC_springBone_limit。
- 不支持扩展的查看器不会获得 Inside、无限 Plane 或角度限制语义。
- .vrm 中 ColliderGroup 没有 Transform 归属;Collider 节点和 Spring→Group→Collider 引用仍会保留。
VRM SpringBone 与 VRC PhysBone 是不同求解器,以下能力没有格式级一一对应:
- 玩家手部、世界或全局碰撞权限;只能保留显式 Collider 引用。
- Grab、Pose、Snap To Hand 与权限过滤。
- Stretch/Squish 和 PhysBone 动画参数。
- 每帧由动画改变的 rest pose。
- 部分或逐关节 Immobile。工具仅对整条链完全 Immobile 的情况设置 VRM Center,其余情况优先保留世界空间惯性。
转换器会在分析报告中明确列出这些差异,不会静默伪造支持。
- 建议保留默认选项:源 PhysBone/Collider 会被禁用而不是删除。
- “删除源组件”会删除头像层级下全部 VRC PhysBone/Collider,且此后不能安全重建或移除转换结果;只应对已备份副本使用。
- 场景组件的转换和移除支持 Unity Undo;新建的 VRM10Object、Prefab 与 .vrm 是持久资产,不会随场景 Undo 自动删除。
- Converter 禁止直接修改 Project Prefab、Prefab Mode、LoadPrefabContents 与 Preview Scene。
- 命名空间:ccd775.AvatarPhysBoneConverter
- Runtime 程序集:ccd775.AvatarPhysBoneConverter
- Editor 程序集:ccd775.AvatarPhysBoneConverter.Editor
- UPM package id:com.ccd775.avatar-physbone-converter
本工具源码使用 MIT License。UniVRM 由用户从官方 Release 单独安装,并受其自身许可证约束;来源、版本与校验值见 NOTICE.md。VRChat SDK 不随包分发。
本项目是社区 PhysBone2SpringBone 工具的彻底重写版。VRM 与 VRChat 商标及第三方许可说明见 NOTICE.md。