• (转)将游戏资源文件打包


    游戏的资源文件和一些常见的压缩文件如Winzip和Winrar一样,游戏资源文件包含了一些小文件。这个资源文件就像一个大的箱子,箱子里面可以存储大量不同的物品,而且每个物品的类型都不一样。游戏的资源文件是一个虚拟的文件系统,也有人将它们称为归档、打包文件或封包文件。虚拟的文件系统和操作系统的文件系统一样都可以存储和定位文件,游戏使用的资源文件系统比操作系统的文件系统简单。
    在游戏开发过程中,游戏使用的资源文件多数都是不需要打包成归档的,因为在游戏开发期间游戏使用的资源文件常常需要频繁地修改,而在游戏发布最终版本时游戏开发人员常会因为如下原因将游戏使用的资源文件打包成归档。
    (1)加快文件读取速度。
    将多个单独的资源文件打包成一个归档文件可以利用索引ID快速定位读取游戏所需要的资源,相对操作系统的文件系统而言,操作系统定位一个文件是使用文件名路径字符串,而游戏的资源文件包是使用数字索引ID定位文件,而且资源文件里的索引ID一般都是排序过的,这样对资源文件的搜索和定位就更快了。从操作系统的设计上来说,操作系统的文件系统要比游戏使用的文件系统要复杂得多,一般越复杂的东西就需要越多的CPU时间处理,所以将资源文件打包可以加快游戏读取资源文件的速度。
    (2)有效利用缓存。
    和系统中的cache缓存一样,游戏引擎可以利用文件系统高速缓存来提高读写文件速度。大家都知道硬盘的读写速度相对内存而言是非常慢的,因为这个原因所以提出了文件系统高速缓存。
    文件系统高速缓存会加快从硬盘到主内存的数据传输,文件系统高速缓存其实就是系统内存开辟的一个区域,由于将各个小资源文件打包成一个较大的归档文件,所以缓存的利用率被提高了。
    (3)减少文件操作。
    将各个小资源文件打包成一个归档文件后,游戏调用资源文件时只需要进行一次打开归档文件的I/O操作,因为文件I/O操作是一个相对花费时间的操作,而游戏需要的响应速度需求是极高的,没有玩家愿意接受在一台配置最新的计算机上玩游戏时看见游戏卡住不动的。
    (4)存储多个单独的文件。
    将多个单独的文件暴露在发布的光盘中会让人觉得游戏开发人员不够专业,而且很容易让玩家修改游戏中重要的数据文件。一般情况下玩家修改游戏的图片、音乐、动画对游戏的影响并不大,但如果玩家修改一些重要的剧情脚本文件的话,可能会出现游戏逻辑上的错误,从而导致游戏引擎出错,这是游戏开发人员不愿意看到的。
    (5)减少碎片。
    操作系统以簇的大小为单位存储文件,一般Windows中标准的簇大小为4.096KB/簇,也就是说一个少于4.096KB的文件也需要占用4.096KB。簇的大小是由文件系统格式决定的,常见的文件系统格式有FAT32和NTFS。对于FAT32来说,如果一个分区少于8GB,则簇的大小为4.096KB。如果一个分区大于8GB,那么簇的大小就会成倍增加,也就是说在FAT32下一个分区越大,簇的大小就越大,文件占用的空间也越多。除非文件的大小正好和簇的大小的倍数一致才不会浪费空间,这些不能再使用的空间称为碎片。因为操作系统目前还没有一种可以完全解决磁盘碎片的办法,所以存储文件无可避免会浪费一些硬盘存储空间。由于将资源文件打包成一个大的归档文件时,归档里的各个小资源文件一般都是连续存储的,因此减少了存储文件产生的碎片,节约了存储空间。
    (6)保护资源文件。
    将资源文件打包成一个归档文件后,由于这个归档文件没有固定的存储格式,所以对于一般的玩家而言就不能修改游戏中重要的数据文件,也就是为什么玩家通常在游戏的目录文件中找不到游戏使用的图片、音乐和动画等一些资源文件了,这样就很好地保护了游戏中的资源文件。
    (7)加密和压缩资源文件。
    将资源文件打包可以更有效地使用加密和压缩处理各个资源文件,一般来说游戏开发人员开发游戏引擎时都会开发一些辅助工具,这些辅助工具中有一个叫资源文件打包器的工具。资源文件打包器作用是将单独的资源文件打包成一个大的归档文件,而且可以针对每个文件或全部文件使用一种或多种的加密和压缩方法处理,游戏使用的资源文件如图像可以利用一些常见的压缩算法有效地压缩。例如假设游戏的图片资源文件一共2GB,但使用了RLE压缩编码压缩过后可能只有500MB,虽然游戏引擎读取资源文件时需要花费解码的时间,但实际上读取一个500MB的文件加上解码所花费的时间还是远远少于读取一个2GB的图片资源文件所花的时间。

    以上章节来自:
    http://book.51cto.com/art/200903/112672.htm
    《揭秘数据解密的关键技术》 刘颖东
    本书是一本以游戏资源文件格式为研究对象的数据逆向工程的技术书籍,主要讲解如何分析和研究自定义文件格式的数据结构。本书内容包含反汇编的阅读和理解,数据在计算机中的存储原理,常用媒体格式的解析,加密和解密的识别和分析,数据压缩的特征识别,打包文件格式的识别和游戏窗口化的方法。本书对每一个问题都给出了详细和完整的分析过程,力求用最通俗和简单的方法让读者学会分析和研究自定义文件格式。
    本书适合对数据解密、游戏资源提取、软件逆向工程感兴趣的读者以及广大编程爱好者阅读。
  • 相关阅读:
    Codeforces Round #456 (Div. 2)
    Codeforces Round #455 (Div. 2)
    Codeforces Round #453 (Div. 1)
    Codeforces Round #450 (Div. 2)
    退役了
    退役了
    这个博客不想要了
    Hello!The familiar and strange world.
    真正的退役了。
    bzoj4231: 回忆树
  • 原文地址:https://www.cnblogs.com/lancidie/p/1895135.html
Copyright © 2020-2023  润新知