Files
SpineParticlesWeb/DateToSpine/docs/14-离线转换与多版本回归记录.md
T
2026-09-07 21:29:15 +08:00

82 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 离线转换与多版本回归记录
## 1. 本阶段结果
- 资源载入完成后自动检测匹配版本线,并在顶部显示是否可转换。
- 4.3 资源在本机使用已缓存的 Spine `4.3.23`,不再把资源导出补丁号直接传给 Launcher。
- 只传精确缓存版本;禁止 `latest`、通配版本和 `--force`
- 缓存缺失时不启动 Spine,转换任务内部也会二次拦截。
- 成功和失败都显示弹窗;失败弹窗包含具体阶段与进程输出摘要。
- 最终结果只包含 `.spine``images/`,不包含原始 Atlas 或打包纹理页。
- 底部增加“去除预乘 Alpha”开关,默认关闭。
界面产出:[离线转换与去预乘开关.png](阶段产出/离线转换与去预乘开关.png)
## 2. 输出结构
```text
选择的输出位置/
spineboy-pro/
spineboy-pro.spine
images/
head.png
torso.png
...
```
同名目录存在时使用 `-2``-3` 后缀。所有内容先写入同一输出磁盘的临时目录,校验成功后再整体发布;失败不会留下伪成功目录。
## 3. Alpha 处理
官方 CLI 没有独立的去预乘开关,而是读取 Atlas 的 `pma` 值。为让 3.8—4.3 具有统一、可控的行为:
1. 原始 Atlas 与纹理页始终只读。
2. 开启开关时原样传入 Atlas,由官方 Texture Unpacker 根据 `pma` 完成转换。
3. 关闭开关时建立临时 Atlas 元数据副本,将 `pma:true` 改为 `pma:false`,再由官方解包器保留打包像素。
4. 不使用 Qt 对输出图片做逐像素变换或重新编码。
5. 临时 Atlas 随任务工作区清理,不进入结果目录。
## 4. 工程图片尺寸问题
已确认根因不是官方解包器压缩图片。测试 Atlas 声明 `scale: 0.5`,官方解包得到的 `head.png` 为 136×149、`front-shin.png` 为 41×92,符合实际打包尺寸。旧流程导入骨骼数据时没有传 Atlas Scale,导致附件坐标保持原始尺寸,而图片只有打包尺寸,于是局部图片缩小、脱节。
修复后的工程导入读取 Atlas 的 `scale`,再增加 `-s <数值>`,由匹配版本 Spine Editor 统一缩放骨骼、附件与动画数据。使用数值可以兼容不接受 Atlas 路径参数的 4.0 等旧版 Editor。
## 5. 多版本预览回归
每条版本线使用对应官方 `spine-cpp` 和该分支的 Spineboy 开发样本。样本仅用于开发测试,不进入安装包。
| 版本 | JSON | SKEL | 动画选择 | 绘制帧 |
|---|---|---|---|---|
| 3.8 | 通过 | 通过 | 通过 | 通过 |
| 4.0 | 通过 | 通过 | 通过 | 通过 |
| 4.1 | 通过 | 通过 | 通过 | 通过 |
| 4.2 | 通过 | 通过 | 通过 | 通过 |
| 4.3 | 通过 | 通过 | 通过 | 通过 |
3.8—4.1 共享一个旧版绘制适配层,4.2 和 4.3 使用各自 Runtime 自带的 `SkeletonRenderer`,避免将版本差异堆叠到主界面代码。
### 5.1 旧版 UV 方向修正
3.8—4.2 的 Runtime 输出沿用 Y 轴向上的世界坐标,而当前 Qt 画布以左上角为原点。适配层在输出预览顶点时对这些版本执行 `y = -y`;旧版 UV 已经与 Runtime 的三角形顶点顺序配套,不能再次翻转。4.3 已符合当前预览器方向,不执行该转换。
修复后截图:[旧版预览方向修复-4.2.png](阶段产出/旧版预览方向修复-4.2.png)
## 6. 本机实际转换回归
所有命令均选择已经存在的精确缓存版本:
| 资源线 | 本地 Editor | JSON 导入 | SKEL 导入 | 解包图片数 |
|---|---:|---:|---:|---:|
| 3.8 | 3.8.99 | 前一轮通过;本轮缓存不可用 | 前一轮通过;本轮缓存不可用 | 40(前一轮) |
| 4.0 | 4.0.64 | 55,295 字节 | 58,616 字节 | 40 |
| 4.1 | 4.1.24 | 55,483 字节 | 58,908 字节 | 40 |
| 4.2 | 4.2.43 | 50,811 字节 | 54,940 字节 | 40 |
| 4.3 | 4.3.23 | 49,603 字节 | 49,905 字节 | 40 |
4.2 A/B 回导验证:未传比例时 `hip.y=247.27`、前胫骨长度为 `128.77`;传 `-s 0.5` 后分别为 `123.64``64.39`,Mesh 顶点也同步减半,而图片维持官方解包尺寸。这说明工程数据与图片比例已恢复一致。
本轮 3.8 缓存文件在回归前已不可用,ARM Launcher 无法加载旧 x86 版本,因此遵守离线约束,没有尝试联网补齐。3.8 官方样本不声明 Atlas `scale`,修复路径会使用 `1.0`,与原导入行为一致;待本机重新具备可运行的 3.8 Editor 后仍需补跑本轮实机导入。
自动测试与完整构建通过。官方测试资源仍位于开发期 `third_party` 目录,安装规则只复制 Runtime 许可文件。