正式服家宅模型提取并转换到 WoW 3.3.5
GSWXY
Archivist & Author

一、先说结论:WLK 到底能不能用?
能用,但要看你的 3.3.5a 客户端有没有 WarcraftXL / wxl-core。我的耳语魔兽集成了,所以直接用。
因为最近我在做耳语家宅的模型,所以本文走的是这条路线:
Retail 12.1.0 家宅模型
↓
wow.export 导出 RAW
↓
M2 + SKIN + BLP
↓
WarcraftXL Cold Converter
↓
3.3.5a 客户端合约
↓
WarcraftXL / wxl-core 运行时加载
↓
GameObjectDisplayInfo.dbc 注册
↓
游戏内使用| 使用环境 | 能否使用本文转换结果 | 说明 |
|---|---|---|
| 3.3.5a + WarcraftXL / wxl-core | 能 | 本文采用的方案 |
| 纯原版 3.3.5a,不带 WarcraftXL | 不能直接用 | Cold Converter 当前输出仍需要 WarcraftXL 做最后的运行时处理 |
| 完全离线转成纯原生 v264 + 原生 3.3.5 SKIN | 能 | 需要另外做完整的 SKIN、材质、纹理引用等离线重建 |
本次测试的“加长耐用桌子”原始模型为 MD21 / v274,经过 Cold Converter 后已经变成 MD20,version 字段为 0x40000108。两张纹理的 FileDataID 也已经写回模型为 7164289.blp 和 6360145.blp。
所以对“耳语家园”来说,这条路可用。至于你能不能用,就看你客户端是否注入 WarcraftXL,如何注入,自己研究Github。
二、准备工具
本文实际使用:
| 项目 | 版本/说明 |
|---|---|
| wow.export | 0.2.19 |
| 数据源 | World of Warcraft Retail 12.1.0.69587 |
| 转换器 | WarcraftXL Cold Converter v0.0.1 x64 |
| 目标客户端 | WoW 3.3.5a + WarcraftXL / wxl-core |
第一批测试模型尽量选结构简单的静态家具,例如:
- 桌子
- 椅子
- 柜子
- 床
- 箱子
- 普通墙体和结构件
先不要拿动态喷泉、复杂火焰、粒子、复杂透明 Shader 或大量动画骨骼的模型做第一轮测试。
三、用 Battle.net CDN 打开正式服数据
打开 wow.export,在启动页选择:
02-wow-export-start.png
进入 Build 选择页面后,本文选择的是:
03-retail-build.png
World of Warcraft 12.1.0.69587
四、进入家宅 Decor 页面
进入 wow.export 主界面后,顶部有一排功能图标。
04-main-ui.png
**小房子图标就是 Decor / Housing 家宅资源页面。**进入后可以直接搜索家具名称。第一次测试建议搜:
Table
Chair
Bed
Shelf如果模型预览里显示 No Animation,通常更适合第一轮转换。**不要导出 OBJ、glTF 或 GLB。**我们最终还要回 WoW 3.3.5a,所以应该尽量保留原始 WoW 格式:M2 + SKIN + BLP。
五、先把 RAW 依赖导出开关打开
这是最容易漏的一步。Decor 页面右侧只显示:
Textures
Texture Alpha.skin、.skel、.bone、.anim 的开关不在 Decor 页面,需要先去 Models 页面设置一次。
操作步骤
- 点击顶部左侧的立方体图标,进入 Models 页面。
- 把右下角导出格式切换成 Export M2 / WMO (Raw)。
- 右侧会出现 M2 RAW 相关开关。
- 按下面设置。
| 选项 | 建议 | 用途 |
|---|---|---|
| Textures | 开 | 导出 BLP 贴图 |
| Texture Alpha | 开 | 保留透明通道 |
| M2 .skin Files | 必须开 | M2 网格/LOD 配套文件 |
| M2 .skel Files | 开 | 有外置骨骼时一起导出 |
| M2 .bone Files | 开 | 有外置骨骼数据时一起导出 |
| M2 .anim Files | 开 | 有外置动画时一起导出 |
其中最重要的是:
M2 .skin Files 必须打开。
如果这个没开,通常最后只会得到 .m2 + manifest.json,模型不能正常进入后面的转换流程。
六、测试阶段关闭 Shared Textures / Shared Children
第一次做测试时,建议先进入 Settings,把下面两个选项关闭:
Enable Shared Textures □
Enable Shared Children □
07-settings-shared.png
原因很简单:开启共享路径以后,贴图和子文件可能会被放回各自在正式服里的原始目录。测试阶段我们希望依赖尽量集中,方便检查有没有漏文件。
设置完成后点 Apply。
后面批量搬几百、几千个模型时,再重新设计正式目录结构。
七、回到 Decor 导出 RAW
重新点击顶部的小房子回到 Decor 页面,选中家具。
点击导出按钮右侧的小三角,选择:
Export M2 / WMO (Raw)
08-export-raw-menu.png
确认右侧:
Textures √
Texture Alpha √
Geoset 全开然后直接导出。
八、检查 RAW 导出结果
本文最终使用的测试模型是“加长耐用桌子”。
正确导出后,文件大致如下:
加长耐用桌子.m2
12ph_rugged_table_large01_nocloth00.skin
12ph_rugged_table_large01_nocloth_lod01.skin
12ph_rugged_table_large01_nocloth_lod02.skin
12ph_rugged_table_large01_nocloth_lod03.skin
6360145.blp
7164289.blp
加长耐用桌子.manifest.json静态家具没有 .skel、.bone 或 .anim 很正常,不代表导出失败。
如果只导出了 M2 + manifest
回到 Models 页面检查:
M2 .skin Files 是否打开。
这是最常见的原因。
九、转换前先整理文件名
正式转到 3.3.5a 前,不建议继续使用中文模型文件名。
把:
加长耐用桌子.m2改成:
12ph_rugged_table_large01_nocloth.m2还要注意 Windows 的“隐藏已知文件扩展名”。
错误情况:
12ph_rugged_table_large01_nocloth.m2.m2正确情况:
12ph_rugged_table_large01_nocloth.m2建议先建立单独测试目录:
D:\HousingTest\
├─ 12ph_rugged_table_large01_nocloth.m2
├─ 12ph_rugged_table_large01_nocloth00.skin
├─ 12ph_rugged_table_large01_nocloth_lod01.skin
├─ 12ph_rugged_table_large01_nocloth_lod02.skin
├─ 12ph_rugged_table_large01_nocloth_lod03.skin
├─ 6360145.blp
└─ 7164289.blp十、给 TXID 准备最小 listfile
现代 M2 使用 FileDataID 引用贴图。Cold Converter 处理 MD21 时,需要通过 listfile 把这些 ID 转成实际文件名。
第一次测试不用准备完整社区 listfile,只写当前模型需要的几行即可。
在:
D:\HousingTest\新建:
listfile.csv内容:
6435865;12ph_rugged_table_large01_nocloth.m2
6441099;12ph_rugged_table_large01_nocloth00.skin
6441100;12ph_rugged_table_large01_nocloth_lod01.skin
6441101;12ph_rugged_table_large01_nocloth_lod02.skin
6441102;12ph_rugged_table_large01_nocloth_lod03.skin
6360145;6360145.blp
7164289;7164289.blp格式就是:
FileDataID;文件路径中间必须用英文分号 ;。
十一、用 WarcraftXL Cold Converter 转换
解压 WarcraftXL Cold Converter x64 后直接运行。
虽然 WoW 3.3.5a 的 Wow.exe 是 32 位,但这里仍然可以使用 x64 转换器,因为 Cold Converter 是独立程序,不是直接注入游戏的 DLL。
推荐设置
| 项目 | 设置 |
|---|---|
| Input | D:\HousingTest |
| Output | 可以留空,默认会生成 HousingTest_converted |
| Listfile | D:\HousingTest\listfile.csv |
| Threads | auto |
| Families | M2 开、BLP 开、WMO 关、ADT 关 |
| M2 / Anim | 保持默认开启 |
| BLP | Max edge 1024,Transcode to DXT5 保持开启 |
M2 / Anim 中建议保持:
Fix animation ids √
Unwrap external .anim √
Downport ribbons √
Shadow-swing fix √设置完成后点 Convert。
转换器会另外生成输出目录,不会修改原始 RAW 文件。
十二、怎么判断转换成功
1. M2 从 MD21 变成 MD20
正式服原始 M2 是现代 chunk 容器:
MD21转换后应进入:
MD202. 版本进入 3.3.5a 客户端合约
本次模型:
原始:v274
转换后:0x40000108其中低位的 0x108 就是十进制 264,也就是 WLK 3.3.5a 的 M2 版本。
前面的 0x40000000 是 WarcraftXL 的 staging bit。
所以这个文件不是“纯原版 3.3.5a M2”,而是:已经被预处理到 3.3.5a 合约,等待 WarcraftXL 运行时完成最后处理的 M2。
3. TXID 应该被还原为纹理文件名
本次测试最终模型已经能看到:
7164289.blp
6360145.blp说明 listfile 起作用,正式服的 FileDataID 纹理引用已经被写回为 3.3.5a 能处理的文件名形式。
4. SKIN 没变化不代表失败
当前 Cold Converter 对现代 .skin 并没有彻底离线重建。
.skin 可能和原文件完全一样,这是正常现象。
真正的现代 SKIN 材质、texture unit 等兼容处理仍由 WarcraftXL / wxl-core 在客户端加载阶段完成。
十三、第一次进游戏怎么放文件
第一次只验证:
- 模型能不能显示
- 贴图是否正确
- 比例是否正确
- 客户端是否崩溃
不要一开始就同时改一堆目录和系统。
可以先做一个简单测试 MPQ:
patch-test.MPQ
├─ 12ph_rugged_table_large01_nocloth.m2
├─ 12ph_rugged_table_large01_nocloth00.skin
├─ 6360145.blp
├─ 7164289.blp
└─ DBFilesClient\GameObjectDisplayInfo.dbc本次模型只有一个主 Skin Profile,所以第一次测试可以先只放:
12ph_rugged_table_large01_nocloth00.skin三个 _lod01 / _lod02 / _lod03.skin 后面再补。
十四、注册 GameObjectDisplayInfo.dbc
模型转换完成后,还不能直接在游戏里凭空出现。
下一步需要按 3.3.5a 的正常 GameObject 流程注册:
- 在
GameObjectDisplayInfo.dbc新增一个 DisplayID。 - ModelName 指向新 M2。
- 客户端和服务端使用相同的 DBC 数据。
- 在
gameobject_template或自己的家园家具表中注册。 - 进入游戏测试实际摆放。
本次“加长耐用桌子”的碰撞数据在 M2 中本身存在,但最终能否按预期发生碰撞,还要结合服务端 VMAP、GameObject 类型和自己的摆放规则测试。
Conversation