关于DNF的多媒体包NPK文件的那些事儿(7) - IMGV5
IMGV5是IMG结构的第五个版本。在所有IMG版本中,IMGV5是最另类的,与其他版本不同,IMGV5采用DDS方案而非像素点阵方式存储数据。DDS是纹理压缩图像文件,广泛应用于模型设计,系统可以通过Direct3D直接读取这些文件,并且内存消耗比其他的图像文件小。IMGV5普遍被各种人物、怪物技能特效所采用,某些物品贴图也使用IMGV5存储。
IMGV5包含两个表,其中一个表包含了DDS图片的信息,称为DDS索引项,另一个则是与其他IMG版本一样作用的普通索引项,尽管IMGV5所使用的索引项占据空间更大。
IMGV5内的图像数据文件数目等于DDS索引项数,而并非等于普通索引项数,其中每个图像数据均由一个完整的DDS文件经过ZLIB压缩后获得。解压后的DDS文件无需任何辅助可以直接通过转换算法转化为一个点阵图像(因为这个DDS文件内部也有自己的结构,不像点阵图像只存储点阵,尺寸和颜色信息依然需要IMG的索引项给出),DDS索引项的用途无非就是定位压缩前的图像数据在IMG文件的位置而已,仅起到便利性而非决定性作用。而普通索引项包含的信息除了其他IMG所应有的信息(图像长度并不包含因为已经不需要了)之外,还包含了引用DDS的序号以及两个坐标点;这是由于DDS图像解出来后一般是个大图像(如下图所示),而真正的贴图帧根据DDS的序号确定使用哪个DDS图像,并通过两个坐标点来确定该贴图属于这个大的DDS图像中的哪个区域。这样,根据对大图像的裁切,就能获得该贴图帧真正的图像了。
DDS大图像,红色区域的位置是由DDS引用型索引项内独有的IMGV5参数确定的
绝大部分IMGV5所包含的图片数据都是DDS数据,但有极少数的IMGV5也包含普通的点阵数据,例如“sprite_map_chn_battleship_npc.NPK”(目前仅发现一个特例)内的三个IMGV5文件。这个时候IMGV5依然包含两个表,但DDS索引项为空,而普通索引项的格式则与其他版本IMG的索引项相同,这里的索引项中颜色格式与IMGV2相同。
另外,IMGV5文件中依然包含一个类似于IMGV4的调色板的信息,但是该信息在IMGV5中没有任何用途。在绝大部分的IMGV5文件中该调色板的颜色项数为0,也就退化成一个全零双字;但仍有极少数的例外,例如“sprite_map_infernomode.NPK”(也是仅发现一个特例)中的几个IMGV5依然保留着带有颜色项的调色板信息,尽管这些信息没有任何用途。
文件头 |
16字节字符串(注意空格)“Neople Img File ” |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
索引表大小 |
4字节,索引表所占空间。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
保留 |
4字节,为0。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
版本号 |
4字节,IMGV5文件结构中的版本号为5。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
索引表数目 |
4字节,索引表的表项(主要是DDS引用型,部分也包括指向型和图片型) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DDS索引项数目 |
4字节,DDS图片的数目 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IMG文件大小 |
4字节,整个IMG文件的大小(不知道有啥用) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
调色板数据 |
首4字节为调色板所包含的颜色数目,之后的4×颜色数目个字节则为具体数据。该数据块在IMGV5中无用,绝大部分IMGV5该字段退化成1个双字,即零,但有些IMGV5还是存在调色板数据的。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DDS索引表 |
DDS索引项1 |
由若干个DDS索引项构成,每个DDS索引项28字节,用于存储DDS图像的信息。 该数据可用于查找DDS图片在文件中的位置,或者在制作EX的时候起到指示和显示作用,但DDS文件解析不依赖于该数据。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DDS索引项2 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DDS索引项3 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
…… |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
索引表 |
索引表项1 |
由若干个索引项构成。索引项包括3种,DDS引用型,指向型和图片型。图片型存储对应图片的各种信息,指向型只存储一个数据,即所指向的图片的帧号。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
索引表项2 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
索引表项3 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
索引表项4 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
…… |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
贴图数据 |
图像数据块1 |
由首尾相接的图像数据块构成。 由于大部分图像数据由ZLIB进行压缩,因此经常以“0x78 0x9C”数据开头(但不可以其为标准作为图像数据块的起始点)。 IMGV5图像数据里大部分都是DDS数据,分别对应DDS索引项,而普通索引项中的DDS引用型索引项不对应任何图像数据,点阵型图片索引项对应的点阵图像数据位于DDS数据之后,指向性索引项不对应任何图像数据。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
图像数据块2 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
图像数据块3 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
…… |
IMGV5图像数据均为DDS图像,后续会逐渐介绍DDS图像的格式,当然,只会介绍DNF里用到的,详情也可以查看MSDN:https://msdn.microsoft.com/en-us/library/windows/desktop/bb943990(v=vs.85).aspx
IMGV5文件采取纹理压缩,因此较难对其进行编辑,一般将其转化为IMGV2进行编辑。IMGV5文件的好处是节省系统资源消耗,节约内存,但不意味着IMGV5文件的存储空间会变小,并且将其他贴图转化成IMGV5后会丢失一些颜色信息和ALPHA通道信息,因此将补丁或者其他贴图资源以IMGV5形式发布不是一种值得推荐的做法,除非IMGV5是DNF唯一能够读取的版本。