Repository navigation
v1.0.1 — 双端发行版(修复贴图替换)
UE4/UE5 .pak 工具链,Windows 桌面端与 Android 双端。基于 CUE4Parse,扩展自 kardswalker/Prism。
下载
| 平台 | 文件 | 说明 |
|---|---|---|
| Windows | Prism-Windows-x64.zip |
自包含单文件版,无需安装 .NET 运行时 |
| Android | Prism-Android.zip |
内含已签名 APK,arm64-v8a |
解压后请保持目录完整 —— UAssetCLI/ 与 tools/ 必须和主程序放在一起,贴图替换与 Pak 转换依赖它们。单独把 exe 拷走会导致这两个功能不可用(应用启动时会在日志里提示"未找到 UAssetCLI")。
本版重点:修复贴图替换完全不可用
此前在部分资产上,替换贴图会静默失败——日志停在最后一级 mip 之后,没有任何错误提示。
根因是纹理尺寸被写死在导出数据的固定偏移(exportData[4] / exportData[8])。对部分资产该偏移恰好正确,但 KARDS 这类资产在导出数据前还有一段内联元数据,尺寸三元组落在 offset 80,于是读到 15x0 被当作真实尺寸:
- mip 链整条错位,11 级 mip 只解析出 1 级;
- 编码阶段因此只处理了最后一级;
- 写回时
Buffer.BlockCopy越界 → 进程带着异常结束。
现已改为扫描所有 (宽, 高, 深度=1) 三元组、过滤非 2 的幂与超范围值,按面积从大到小逐个尝试,取第一个能解析出完整 mip 布局的候选。
同类缺陷在 UAssetTexture.Core(Android 端替换与双端 Pak 转换所用)中一并修复:
- 资产没有
.ubulk时,载荷之后的FByteBulkData头会被误认成"外部 mip",抢先返回一个只有一级 mip 的残缺布局; - 内联 mip 的载荷偏移公式隐含"每级元数据长度恒定",而实测长度逐级不同,从第二级起会静默产出损坏贴图(不报错)。
另外补上 FString 长度的负向校验:原先只校验上界,负数长度会经未检查的溢出喂给 stackalloc,而栈溢出在 .NET 中无法捕获,会直接杀进程。
实测(真实资产 T_stz_5_katyusha,1024×1024 DXT1、无 .ubulk、mip 全内联):
| 修复前 | 修复后 | |
|---|---|---|
| 解析出的 mip | 1 级(4×4) | 11 级(1024×1024 → 1×1) |
| 替换结果 | 崩溃 | 成功,输出结构不变 |
| 各级载荷 | 未处理 | 11 级全部正确改写,颜色与源图吻合 |
功能
- 浏览与预览:挂载
.pak,预览贴图 / 音频 / 三维网格 / 本地化 / 蓝图伪代码,导出与分享 - 贴图替换:选图即生成补丁 pak
- Pak 合并:多选 + 长按拖动调整覆盖优先级
- Pak 转换:把另一平台 pak 中的同路径贴图移植过来,按主 pak 格式重编码;默认只输出改动资产(7 GB 主 pak + 1 贴图 → 685 KB)
- 本地化:编辑
.locres、导出为 JSON,四种格式版本往返安全 - 映射:
.usmap与.jmap(含.gz)按扩展名自动识别
安装
Windows:解压后运行 Prism.Desktop.Desktop.exe。
Android:安装 android/Prism-Android-Signed.apk。
签名说明:Android 包由 .NET Android 用调试证书签名(
CN=Android Debug,SHA-176:DB:3A:E3:E2:5A:CB:6D:76:7B:22:34:E4:EA:98:53:B0:7D:E6:A3),与上一版一致,可直接覆盖安装并保留数据。调试证书仅适合自用与内部分发;若需公开分发或上架,请用正式密钥库重签(换签名后需先卸载旧版)。
已知限制
- 只支持
.pak;未实现.utoc/.ucas。 - 不内置映射文件,需从游戏中自行导入。
- 需要 AES 密钥的 pak,请在设置页填入。
校验
见 SHA256SUMS.txt。
许可
GPL-3.0,继承自上游。见仓库内 LICENSE 与 NOTICE。