2026-09-10技术quiet

正式服家宅模型提取并转换到 WoW 3.3.5

GSWXY

GSWXY

Archivist & Author

正式服家宅模型提取并转换到 WoW 3.3.5

一、先说结论:WLK 到底能不能用?

能用,但要看你的 3.3.5a 客户端有没有 WarcraftXL / wxl-core。我的耳语魔兽集成了,所以直接用。

因为最近我在做耳语家宅的模型,所以本文走的是这条路线:

text
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.blp6360145.blp

所以对“耳语家园”来说,这条路可用。至于你能不能用,就看你客户端是否注入 WarcraftXL,如何注入,自己研究Github。


二、准备工具

本文实际使用:

项目版本/说明
wow.export0.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.png02-wow-export-start.png

进入 Build 选择页面后,本文选择的是:

03-retail-build.png03-retail-build.png

World of Warcraft 12.1.0.69587


四、进入家宅 Decor 页面

进入 wow.export 主界面后,顶部有一排功能图标。

04-main-ui.png04-main-ui.png

**小房子图标就是 Decor / Housing 家宅资源页面。**进入后可以直接搜索家具名称。第一次测试建议搜:

text
Table
Chair
Bed
Shelf

如果模型预览里显示 No Animation,通常更适合第一轮转换。**不要导出 OBJ、glTF 或 GLB。**我们最终还要回 WoW 3.3.5a,所以应该尽量保留原始 WoW 格式:M2 + SKIN + BLP


五、先把 RAW 依赖导出开关打开

这是最容易漏的一步。Decor 页面右侧只显示:

text
Textures
Texture Alpha

.skin.skel.bone.anim 的开关不在 Decor 页面,需要先去 Models 页面设置一次。

操作步骤

  1. 点击顶部左侧的立方体图标,进入 Models 页面。
  2. 把右下角导出格式切换成 Export M2 / WMO (Raw)
  3. 右侧会出现 M2 RAW 相关开关。
  4. 按下面设置。
选项建议用途
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,把下面两个选项关闭:

text
Enable Shared Textures   □
Enable Shared Children   □

07-settings-shared.png07-settings-shared.png

原因很简单:开启共享路径以后,贴图和子文件可能会被放回各自在正式服里的原始目录。测试阶段我们希望依赖尽量集中,方便检查有没有漏文件。

设置完成后点 Apply

后面批量搬几百、几千个模型时,再重新设计正式目录结构。


七、回到 Decor 导出 RAW

重新点击顶部的小房子回到 Decor 页面,选中家具。

点击导出按钮右侧的小三角,选择:

Export M2 / WMO (Raw)

08-export-raw-menu.png08-export-raw-menu.png

确认右侧:

text
Textures        √
Texture Alpha   √
Geoset          全开

然后直接导出。


八、检查 RAW 导出结果

本文最终使用的测试模型是“加长耐用桌子”。

正确导出后,文件大致如下:

text
加长耐用桌子.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 前,不建议继续使用中文模型文件名。

把:

text
加长耐用桌子.m2

改成:

text
12ph_rugged_table_large01_nocloth.m2

还要注意 Windows 的“隐藏已知文件扩展名”。

错误情况:

text
12ph_rugged_table_large01_nocloth.m2.m2

正确情况:

text
12ph_rugged_table_large01_nocloth.m2

建议先建立单独测试目录:

text
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,只写当前模型需要的几行即可。

在:

text
D:\HousingTest\

新建:

text
listfile.csv

内容:

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

格式就是:

text
FileDataID;文件路径

中间必须用英文分号 ;


十一、用 WarcraftXL Cold Converter 转换

解压 WarcraftXL Cold Converter x64 后直接运行。

虽然 WoW 3.3.5a 的 Wow.exe 是 32 位,但这里仍然可以使用 x64 转换器,因为 Cold Converter 是独立程序,不是直接注入游戏的 DLL。

推荐设置

项目设置
InputD:\HousingTest
Output可以留空,默认会生成 HousingTest_converted
ListfileD:\HousingTest\listfile.csv
Threadsauto
FamiliesM2 开、BLP 开、WMO 关、ADT 关
M2 / Anim保持默认开启
BLPMax edge 1024,Transcode to DXT5 保持开启

M2 / Anim 中建议保持:

text
Fix animation ids       √
Unwrap external .anim   √
Downport ribbons        √
Shadow-swing fix        √

设置完成后点 Convert

转换器会另外生成输出目录,不会修改原始 RAW 文件。


十二、怎么判断转换成功

1. M2 从 MD21 变成 MD20

正式服原始 M2 是现代 chunk 容器:

text
MD21

转换后应进入:

text
MD20

2. 版本进入 3.3.5a 客户端合约

本次模型:

text
原始:v274
转换后:0x40000108

其中低位的 0x108 就是十进制 264,也就是 WLK 3.3.5a 的 M2 版本。

前面的 0x40000000 是 WarcraftXL 的 staging bit。

所以这个文件不是“纯原版 3.3.5a M2”,而是:已经被预处理到 3.3.5a 合约,等待 WarcraftXL 运行时完成最后处理的 M2。

3. TXID 应该被还原为纹理文件名

本次测试最终模型已经能看到:

text
7164289.blp
6360145.blp

说明 listfile 起作用,正式服的 FileDataID 纹理引用已经被写回为 3.3.5a 能处理的文件名形式。

4. SKIN 没变化不代表失败

当前 Cold Converter 对现代 .skin 并没有彻底离线重建。

.skin 可能和原文件完全一样,这是正常现象。

真正的现代 SKIN 材质、texture unit 等兼容处理仍由 WarcraftXL / wxl-core 在客户端加载阶段完成。


十三、第一次进游戏怎么放文件

第一次只验证:

  • 模型能不能显示
  • 贴图是否正确
  • 比例是否正确
  • 客户端是否崩溃

不要一开始就同时改一堆目录和系统。

可以先做一个简单测试 MPQ:

text
patch-test.MPQ
├─ 12ph_rugged_table_large01_nocloth.m2
├─ 12ph_rugged_table_large01_nocloth00.skin
├─ 6360145.blp
├─ 7164289.blp
└─ DBFilesClient\GameObjectDisplayInfo.dbc

本次模型只有一个主 Skin Profile,所以第一次测试可以先只放:

text
12ph_rugged_table_large01_nocloth00.skin

三个 _lod01 / _lod02 / _lod03.skin 后面再补。


十四、注册 GameObjectDisplayInfo.dbc

模型转换完成后,还不能直接在游戏里凭空出现。

下一步需要按 3.3.5a 的正常 GameObject 流程注册:

  1. GameObjectDisplayInfo.dbc 新增一个 DisplayID。
  2. ModelName 指向新 M2。
  3. 客户端和服务端使用相同的 DBC 数据。
  4. gameobject_template 或自己的家园家具表中注册。
  5. 进入游戏测试实际摆放。

本次“加长耐用桌子”的碰撞数据在 M2 中本身存在,但最终能否按预期发生碰撞,还要结合服务端 VMAP、GameObject 类型和自己的摆放规则测试。

Conversation

评论

0

首次发布需要审核,邮箱只用于必要联系。

正在加载评论…