项目总览:蓝原 MOD 工具链研究
面向读者:Modder / QA 面试官用璐璐卡与忒拉拉两个角色样本,说明 APMI-Tools 目前如何从帧分析走到 Blender 编辑与游戏内热重载。
研究对象与结论
本项目研究的是 蓝色星原旅谣 在 3Dmigoto/XXMI 环境下的角色渲染资源链路。当前工具链不是只做“某个角色能替换”的演示,而是把角色资产拆成可复现的工程流程:
FrameAnalysis-*捕获 draw / dispatch / shader / resource。DumpOut/<角色>/APMI_d6e8a8e8保存结构化提取结果。- Blender 侧导入
.fmt/.ib/.vb,恢复 A-Pose 和正确朝向。 - 导出
Mods/<MOD名>,由 APMI Core +mod.ini替换运行时 buffer。 - 游戏内用
F10热重载,用F6验证启停链路。
以璐璐卡样本为例,提取目录为:
XXMI/DumpOut/<角色>/<提取目录>它的 Metadata.json 给出了一个很清楚的角色级结构:
| 字段 | 值 |
|---|---|
| Root IB Hash | acc1c236 |
| Root VB0 Hash | 02736c6a |
| Vertex Count | 33946 |
| Index Count | 136128 |
| Rotation | { x: 90, y: 0, z: 0 } |
这说明“人物躺在地上”的问题不是用户操作错误,而是 DirectX 到 Blender 的坐标系转换问题。现在 90 度校正已经成为默认行为,不再暴露给 UI。
同样的流程也用于忒拉拉样本。它的提取根资源是 IB 3f7ce4fa / VB0 1e636b8e,总计 30385 个顶点、126087 个索引。下方点云来自同一个 APMI_d6e8a8e8 提取目录,适合和璐璐卡对照观察组件拆分密度。
组件拆分
璐璐卡样本被拆成 7 个组件。这里的 Component 不是美术命名,而是运行时 draw / buffer / 材质绑定的基本单位。
| Component | IB Hash | VB0 Hash | Vertices | Indices | LOD Count | 调试意义 |
|---|---|---|---|---|---|---|
| C0 | acc1c236 | 02736c6a | 9266 | 36906 | 2 | 身体/主体,曾暴露 Char/World 骨骼映射差异 |
| C1 | 1a43ef65 | 425f098c | 2013 | 8694 | 2 | 面部相关,大世界出现过类似 C0 的拉丝问题 |
| C2 | 86dd90b2 | 8e9d0b86 | 1745 | 7818 | 2 | 小型组件,适合做无修改导出对照 |
| C3 | 687504c4 | b8d9c402 | 11296 | 50640 | 2 | 头发/高风险材质组件 |
| C4 | 4e7a807d | ef7a896c | 9456 | 31518 | 1 | 曾用于 HideTest,验证 F6 开关链路 |
| C5 | cbafc4e6 | 7e46d1f2 | 90 | 336 | 0 | 眼睛/小件,曾排查未提取问题 |
| C6 | d027afe1 | 2aa3cde5 | 80 | 216 | 2 | 小件,适合作为边界组件 |
忒拉拉则提供了另一个关键样本:C1 是替换目标之一,C3 是未直接修改但在大世界暴露材质通道风险的头发组件,C4 是另一处替换目标。它的组件表如下:
| Component | IB Hash | VB0 Hash | Vertices | Indices | LOD Count | 研究意义 |
|---|---|---|---|---|---|---|
| C0 | 3f7ce4fa | 1e636b8e | 2846 | 10212 | 1 | 身体/主体,角色界面 draw 样本之一 |
| C1 | d7ed7ac6 | 59262f67 | 11683 | 52566 | 0 | 替换目标,PS e1dce2d8ab548e15 |
| C2 | ff238cbf | ac6fc562 | 944 | 4536 | 0 | 小件,对照导出用 |
| C3 | b4134b8c | e5d453cc | 7463 | 27591 | 1 | 头发,高风险 COLOR0/TEXCOORD2 通道 |
| C4 | 6a6fda88 | f2df1fbc | 7239 | 30510 | 1 | 替换目标,常用于单组件回归 |
| C5 | 06283421 | 7e46d1f2 | 90 | 336 | 0 | 眼睛/小件 |
| C6 | 5e772fa6 | eac23e0e | 120 | 336 | 1 | 小件,适合做边界验证 |
这个表对 Modder 的价值是:你能知道替换哪个组件风险最高。对 QA 的价值是:每个组件可以成为独立测试对象。
已解决的问题
当前 APMI-Tools 已经处理过这些核心问题:
- 导入朝向错误:默认按 DirectX 90 度修正。
- A-Pose 丢失:默认启用 Auto A-Pose,优先保留
cs-t0/direct IA 数据。 - 只能删面不能新增面:导出链路开始支持新增顶点,并处理 IB/VB 数量变化。
- 无 LOD 不允许导出:改为允许无 LOD 导出,但给出风险提示。
- F6/F10 链路混乱:区分开关命中、资源替换和 draw 成功。
- C3 头发大世界杂点:定位到
COLOR0/TEXCOORD2材质控制通道,而不是普通 UV0。
仍需谨慎的边界
蓝原目前的最大风险来自 角色界面与大世界差异。角色界面通过,不代表大世界通过。忒拉拉样本中,角色界面使用的 VS 为:
VS d6e8a8e8ae48ebf5
PS e1dce2d8ab548e15 / fb3f3f45d4bc8d69但进入大世界后,同一 VS 下会出现更多拆分 draw,IB/VB hash 也变化,说明世界场景可能走了不同 LOD 或资源分段。
这就是为什么作品集里这项研究不应写成“我做了 MOD”,而应写成:我建立了一套角色渲染资产一致性测试链路。