2021-06-21

Pak文件格式说明

1.Pak概述
对于一款图形引擎来说,资源文件是必不可少的,对于资源文件的打包也是引擎所必备的功能。对于不同引擎,资源的打包文件格式也千差万别,有的只是对文件的简单压缩,有的会对文件进行重新处理,压缩,加密,UE4的pak文件则属于后者。

1.1pak格式说明
UE4的pak文件格式结构如下图:
在这里插入图片描述

PS:很多公司都会定义自己的资源包文件格式,且后缀名可以也是pak,如Quake,永航,需要对此进行区分

1.2 pak格式优势
方便资源调用,易于管理;
对初学者有屏蔽作用避免被乱改,对高手却很容易修改,比较方便
挂载后被视为一个目录,便于增加、改进、升级资源
修改还原便利,文件之间互不影响。
1.3 存在形式
Pak文件根据用途通常以两种方式存在:
随包存在:pak可以作为安装包的一部分,存储软件的必备数据
在这里插入图片描述
单独存在:pak可以作为资源载体单独存在,用于热加载、热修复等
在这里插入图片描述
2.Pak查看
Pak虽然为资源压缩文件,但是可以通过特有的查看器查看内部资源。目前市面上用于查看pak的查看器参差不齐,选择时需要慎重比较。
下图为UnrealPak View查看Pak的窗口信息截图:
在这里插入图片描述

2.1概要部分:
概要部分存储了Pak文件的文件路径、挂载位置、文件大小和数量、文件索引区和文件内容区的相关数据

在这里插入图片描述

2.2 树视图
树视图中以文件树的方式显示了pak中文件的组织结构,以供开发人员根据路径对资源进行访问。选中指定资源,右侧会出现该资源的详细信息。
在这里插入图片描述

2.3 文件视图
文件视图以文件列表的方式显示了所有的资源文件,实际上相当于展示了pak文件树中所有的叶子节点。用户可以通过输入关键字的方式,对现有资源进行查询,也可以通过点击列标题的方式对列表中的内容进行排序。
在这里插入图片描述

3.Pak二进制存储
Pak文件内容主要分为三个部分,从前之后,分别为:文件内容区、文件索引信息区和Pak文件的概要信息区。其中文件内容区用于存储FPakEntry和具体资源文件内容,文件索引信息区存储资源文件名和 FPakEntry,Pak文件信息区存储pak文件的结构和说明信息。
接下来,为了便于理解,我们会以pak文件信息区、文件索引信息区、文件内容区的顺序对pak的二进制文件存储方式进行说明。

3.1PAK文件信息区
同在PE文件中拥有PE标识码00004550一样,在PAK文件中也存在一个标识码,该标识码为5A6F12E1。并在此标识码之后,依次存储着PAK相关的重要信息

标识码:5A6F1E1
长度:4字节
在这里插入图片描述

版本号:00 00 00 09
长度:4字节
在这里插入图片描述

文件索引信息区起始位置:00 00 00 00 04 a9 bb ff
长度:8个字节
在这里插入图片描述

文件索引信息区大小:00 00 00 00 00 02 95 d4
长度:8个字节
在这里插入图片描述

文件索引区SHA1编码:
长度:20个字节

在这里插入图片描述

3.2文件信息索引区
文件信息索引区域是在pak文件中间部分存储的,存储起始位置在3.1中已有说明,因此根据上文我们找到04a9bbff,并从此开始

索引概要信息
Mount Point-默认挂载点
4+N个字节长度(4个自己村存储字符串长度)

在这里插入图片描述

NumEntries-文件数量
4个字节
在这里插入图片描述

索引列表信息
文件名信息,以00结构

FPakEntry信息

Offset偏移 8个字节
Size大小 8个字节
UncompreSize文件原始大小 8个字节
Compression Method文件压缩方式 4个字节
Timestamp时间戳 8个字节(老版本才有 version<=1)
SHA1哈希值 20个字节
CompressionBlocks分块信息 4 + 16分块数量
前4字节为分块数量,后面16
分块数量为各个分块的起始偏移和结束偏移(version>=3 并且开启了压缩的情况下才有)
bEncrypted文件是否加密 1个字节(version>=3)
CompressionBlockSize 每一个压缩分块的大小,其实是压缩之前的大小。序列化时按照个大小进行分块压缩加密,反序列化时读取分块进行解密,然后需要分配该尺寸的内存进行解压(version>=3)默认64,如果文件大小小于这个值,则为文件实际大小
PS:上图只画出来了偏移、大小、原始大小、压缩方式几个参数,有兴趣的同学可以自行找出相应的内容

3.3文件内容区
在这里插入图片描述

文件内容区保存了FPakEntry内容+实际文件内容
PS:FPakEntry内容其实是不完整的,网上有说不包含offset,经自行比对发现实际上是包含的,FPakEntry是截取了前面一部分,大约是到SHA位置处,具体可能和版本相关,如有问题欢迎指正

4.参考资料
https://zhuanlan.zhihu.com/p/54531649
https://zhuanlan.zhihu.com/p/163501071
https://zhuanlan.zhihu.com/p/340563727
https://blog.csdn.net/baidu_27276201/article/details/78896177

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值