如何用 UModel 轻松提取虚幻引擎资源?一份实战上手指南
【免费下载链接】UEViewerViewer and exporter for Unreal Engine 1-4 assets (UE Viewer).项目地址: https://gitcode.com/gh_mirrors/ue/UEViewer
做游戏 Mod、搞美术外包拆包、或者单纯想研究某款老游戏的模型是怎么做的——你大概率会遇到同一个麻烦:虚幻引擎(Unreal Engine 1~4)的资源全被封在 .upk、.uasset、.pak 这类专有格式里,双击根本打不开。而 UModel(即 UE Viewer,社区里习惯叫它 umodel)就是专门解决这个问题的开源工具:它能把引擎内部的网格、动画、材质、纹理、声音原样读出来,再转换成 3ds Max、Blender 能用的通用格式。
这篇文章不聊枯燥的架构,而是以“你手头有一款游戏,想把它里面的模型导出来”为主线,带你走完从下载、构建到第一次成功导出资源的全过程。
一、什么情况下你会需要 UModel
先对号入座,看看你属于下面哪类人:
- Mod 制作者:想给游戏里的角色换装、改武器模型,需要先拿到原始资源;
- 3D 美术/动画师:想学习大厂的建模布线、骨骼绑定思路,把官方模型导进 Blender 或 3ds Max 里拆解研究;
- 技术研究党:想搞懂虚幻引擎的资源打包规则、纹理压缩格式,甚至自己写解析脚本;
- 怀旧玩家:某款 2005 年的老游戏早已停更,你想把里面的美术资产“抢救”出来存档留念。
UModel 的覆盖范围相当广:官方兼容表里收录了 300 多款游戏,从 UT2004 时代的 UE2,到《质量效应》《蝙蝠侠:阿卡姆》这类 UE3 大作,再到《堡垒之夜》同期的 UE4 项目,基本都能打开。它的定位一句话就能说清——把引擎的私有格式翻译成通用格式,剩下的活交给你的建模软件。
二、三步完成 UModel 构建:从源码到可运行
UModel 官方发布过编译好的 exe,但如果你想用最新代码、或者想在 Linux 上跑,自己构建其实也不难。这里以源码构建为例,三步搞定。
第一步:获取源码
把仓库克隆到本地(需要安装 Git):
git clone https://gitcode.com/gh_mirrors/ue/UEViewer克隆完成后,目录里最重要的几个东西:
build.sh:项目自己的构建脚本,跨平台通用;common.project:全局工程配置文件,编译选项都在这;UmodelTool/:umodel 主程序源码,入口在UmodelTool/Main.cpp;Unreal/:解析虚幻引擎资源的核心逻辑,后面我们会反复提到它。
第二步:准备构建环境
按平台准备依赖:
| 平台 | 需要的东西 |
|---|---|
| Windows | Visual Studio 2013 或更新版本(代码用了 C++11 特性,太老的编译器不行),再加 Bash 和 Perl(MinGW/MSYS 里带) |
| Linux | gcc + SDL2、zlib、libpng 三个开发包,build.sh会直接用系统的库 |
| macOS | 初始支持,但默认关闭了 OpenGL 和线程,基本只能当命令行导出器用 |
Windows 用户记得把C:\BuildTools\bin(里面是打包好的 Bash/Perl)加进系统 PATH,或者写个临时改 PATH 的批处理再调bash build.sh。
第三步:执行构建
在项目根目录直接跑:
./build.shLinux 上如果一切顺利,会生成名为umodel的可执行文件。Windows 上生成umodel.exe。几个常用构建参数:
--64:编译 64 位版本(默认 32 位);--debug:生成带调试信息的版本,方便断点排查;--vc <版本号>:指定 Visual Studio 版本,默认用最新的。
build.sh 不止是调 make,它还会顺带生成版本号头文件、预处理着色器(调用Unreal/Shaders/make.pl),所以别跳过它直接去跑 makefile。
构建完成后,先跑一句umodel -help,你会看到完整的命令说明——这是后面所有操作的基础。
三、第一次资源提取实操:走完解析、查看、导出全链路
假设我们要从一个 UE3 游戏里提取一个角色模型。整个操作旅程分四步:定位游戏路径 → 列出包内容 → 在查看器里确认 → 导出成可用格式。
第 1 步:用 -path 指向游戏目录
UModel 设计上就要求直接读游戏安装目录里的文件,不需要先拷贝出来。启动时指定游戏根目录:
umodel -path="D:\Games\MyGame" -game=xxx-game=xxx是游戏覆盖参数,当游戏无法被自动识别时用它指定。想看有哪些可用标签,跑umodel -taglist;想看支持的游戏列表,跑umodel -gamelist。
小提示:UE1~UE3 的包自带版本信息,一般不需要手动指定;但UE4 的 cooked 包是“无版本”的,版本信息被清零了,这时必须用
-game=ue4.xx手动告诉 UModel 用哪个引擎版本解析,否则会报“Unversioned UE4 packages are not supported”。
第 2 步:用 -list 查看包内容
游戏目录里通常有成百上千个包文件,先看看某个包里有什么:
umodel -path="D:\Games\MyGame" -list CharacterModels.upk-list会把包里的对象清单打印出来,包括每个对象的类(SkeletalMesh、Texture、MeshAnimation……)。这一步骤相当于“透视眼”,让你在动手导出前先搞清楚资源长什么样。
第 3 步:用查看器确认目标
不写导出命令,直接把包名丢给 umodel,就会进入查看器模式:
umodel -path="D:\Games\MyGame" CharacterModels.upk查看器是键盘驱动的,常用按键:
- PgUp / PgDn:在包内对象之间切换浏览;
- Ctrl+S:截图保存到 Screenshots 目录(TGA 格式);
- Ctrl+X:导出当前场景里的所有对象;
- Ctrl+T:标记当前网格,用来把多个部件(头、身体、四肢)拼成完整角色;
- Ctrl+A:为骨骼网格挂载动画集,空格键播放动画;
- H:随时查看完整快捷键清单。
这一层的作用是“眼见为实”:确认模型、动画、材质都正常解析了,再进入导出环节。
第 4 步:批量导出
确认无误后,退出查看器,用-export命令把所有资源倒出来:
umodel -path="D:\Games\MyGame" -export CharacterModels.upk导出文件默认放在当前目录下的UmodelExport/文件夹,按对象类型分目录存放。想改输出位置,加-out=路径:
umodel -path="D:\Games\MyGame" -export -out="E:\Extracted" CharacterModels.upk想把整个游戏的所有包一次导完,用通配符:
umodel -path="D:\Games\MyGame" -export -out="E:\Extracted" "*.upk"到这一步,你的第一个模型就已经成功“越狱”出来了。
四、高频问题与避坑指南:新手最容易踩的 5 个坑
按社区反馈频率,以下问题几乎人人都遇到过,提前看能省大量时间。
坑 1:导出结果一片空白,或者提示“package has no supported objects”这不是报错,而是这个包里没有 UModel 能识别的可视资源。虚幻引擎里有几千种对象类型,UModel 只支持其中一小部分(网格、动画、纹理、材质、声音等)。在 GUI 的包列表里用“Tools | Scan content”扫描一下,能看到每个包里有多少可导出的对象,先挑大包下手成功率最高。
坑 2:UE3 游戏纹理全是 64x64 低清马赛克典型症状是“纹理加载不出来”。原因通常是 UModel 找不到配套的.tfc文件(比如 textures.tfc,里面存着流式纹理数据)。检查你的-path是否正确——必须指向游戏根目录(Textures 和 Animations 目录的上级),而不是某个子目录。
坑 3:提示“wrong tag in package”要么你打开的根本不是包文件,要么是加密 UE4 游戏但你给的解密密钥不对。如果是后者,需要用-aes=密钥提供 AES 密钥(支持 ASCII 或 0x 开头的十六进制格式,多密钥游戏可以写多个-aes=,或用一个-aes=@keys.txt文本文件)。
坑 4:导出声音却什么都没得到音频默认是关闭加载的,防止某些游戏上崩溃。想导声音必须显式加-sounds参数(或在启动界面勾选)。另外注意:UE3 里真正的音频对象叫 SoundNodeWave,UE4 里叫 SoundWave,别被一堆跟渲染相关、实际上不含音频的“声音类对象”迷惑。
坑 5:加载某些资源时直接崩溃多半是该资源类型与当前游戏版本不兼容。UModel 提供了“熔断开关”,逐个排除问题类型:-nomesh(关骨骼网格)、-nostat(关静态网格)、-noanim(关动画)、-notex(关材质/纹理)、-nomorph(关 MorphTarget)。先全关再逐个打开,就能定位到具体是哪种资源导致的。
通用建议:不要混用不同游戏的包文件。比如把《阿卡姆疯人院》的包丢进《阿卡姆之城》的目录,十有八九崩溃,因为同名文件完全不兼容。
五、进阶玩法:多格式导出、跨平台与二次开发
基础链路跑通后,UModel 还有很多值得挖掘的深度能力。
导出格式自由切换
UModel 的导出模块集中在Exporters/目录,每种格式一个文件,命令行用参数切换:
| 参数 | 导出的格式 | 适用对象 |
|---|---|---|
-psk(默认) | ActorX 的 PSK/PSA | 骨骼网格 + 动画,配 3ds Max 的 ActorX 插件使用 |
-gltf | glTF 2.0 | 网格和骨骼动画,现代 DCC 工具普遍支持 |
-md5 | md5mesh / md5anim | idSoftware 系格式,部分查看器/导入器可用 |
-dds/-png | 纹理转 DDS / PNG | 默认是 TGA,可按需切换 |
补充两点:静态网格没有骨骼和权重,导出的 PSK 会存成扩展名pskx的文件,避免你误把它当骨骼网格导进 UnrealEd;材质会额外生成一个人类可读的.mat文本文件(附.props.txt),里面写明漫反射、法线分别用了哪张贴图。
Linux 命令行一键批处理
Linux 上 UModel 是纯命令行工具,非常适合写脚本批量处理。常用组合示例:
umodel -game=ue4.26 -export -gltf -png -out=./exported "*.uasset"意思是:按 UE4.26 规则解析、导出全部 uasset、网格用 glTF、纹理用 PNG、输出到指定目录。加-nooverwrite可以跳过已导出的文件,重复执行时速度飞快。
想要 GUI?Windows 直接双击
Windows 版不带参数启动会弹出图形界面:设置游戏路径、选兼容选项、勾选导出格式,然后在包列表里多选批量导出。命令行参数在 GUI 模式下依然全部生效,比如umodel.exe -dds启动 GUI 后导出的纹理默认就是 DDS。
二次开发的扩展点
如果你想把 UModel 变成自己工具链的一环,源码的模块划分很清晰,改起来有章可循:
- 想解析新版本的引擎格式:看
Unreal/UnrealPackage/(包读取)和Unreal/UnrealMesh/(网格数据),其中UnPackage2/3/4.cpp分别对应不同引擎版本; - 想加一种新的导出格式:在
Exporters/里仿照ExportGLTF.cpp的写法新增一个文件即可; - 想支持特定游戏的特殊格式:
Unreal/GameSpecific/目录就是干这个的; - 想改查看器交互:渲染逻辑在
Viewers/,OpenGL 封装在Core/GL/。
用 Visual Studio Code 直接打开项目根目录就能开发,工程已内置构建任务和调试配置(Ctrl+F7可以只编译当前打开的 .cpp 文件,对大型项目来说非常省时间)。
六、写在最后:它能帮你走到哪一步
回顾一下整条操作旅程:定位游戏目录 → 列出包内容 → 查看器确认 → 按需导出,四步就能把虚幻引擎 1~4 时代的资源变成 Blender、3ds Max、Maya 认识的文件。UModel 的价值不在一两个炫技功能,而在于它把“引擎私有格式”这个黑盒子打开了一个口子——无论是做 Mod、学建模还是做逆向研究,这个口子都够你用了。
想继续深入,推荐三条路:
- 项目自带的
Docs/FAQ.md整理了官方问答,覆盖大多数疑难杂症; readme.txt里的更新日志是“活字典”,能看出每个版本新增了哪些游戏和格式支持;- 官方论坛和 YouTube 教程频道有大量视频演示(动画导出、组合模型等文字很难讲清的操作),配合本文的实操流程一起看效果最佳。
把第一个模型成功导进 Blender 的那一刻,你就已经迈过这道门槛了。剩下的,就是玩得开心。
【免费下载链接】UEViewerViewer and exporter for Unreal Engine 1-4 assets (UE Viewer).项目地址: https://gitcode.com/gh_mirrors/ue/UEViewer
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考