开发日志 #91 | 铸造厂周五:存档文件大小优化

0 点赞
FOUNDRY
转载

各位创始人,大家好! 在今天的铸造厂周五中,我想分享一些为支持3.0版本更新已公布功能所进行的幕后工作,这些功能我们已在第89期铸造厂周五中介绍过。例如,在添加火车系统时,我们希望玩家能更多地利用铸造厂所提供的无限世界。 我初步分析了在更大的世界中使用火车时可能出现的问题,除了一些需要修复的视觉错误外,大部分内容都表现良好。 但一个更严重的问题是,由于大量的世界探索,我用于测试的存档文件大小已超过100MB。这种存档文件增长问题需要通过一些重要的优化来解决。通常我们从反馈玩家(感谢!)那里收到的存档大小在10MB到50MB之间,具体取决于他们在游戏中的进度。当然,有些更投入的玩家拥有更大的存档,但这些存档将从此次存档文件优化中获得更大收益。较小的存档文件之所以有益,是因为它能让朋友加入你的世界时速度更快,与Steam云同步存档的速度也更快,同时还能减少(自动)保存游戏所需的时间。 通过分析,在分享的存档文件中(尤其是我的存档),很大一部分内容只是到达目的地过程中经过的区块地形数据,这些区块之间仅由一条传送带或火车(即将推出!)连接。但所有曾被加载过的区块,无论是否修改,都会被存储在存档文件中。这导致存档文件中约有一半的内容是地形数据。

为解决此问题,我们尝试了几种方案,从较简单的开始: 1. 提高压缩级别(Foundry内部使用Zstandard压缩3D区块数据,效果显著),但这并未带来明显收益,反而导致速度大幅下降。 2. 对多个区块进行分组压缩。由于组内区块之间存在大量重叠和连续性,这似乎是个好主意,但遗憾的是,在我测试的场景中仅获得了15%的改进。 3. 不存储未修改的区块,仅在需要时重新生成它们。这让我们能够节省(双关语无意)大量数据,但它也有一个很大的缺点,那就是必须确保Foundry代码中的所有地方都要在玩家进行任何操作时,告知保存系统某个区块已被修改。 最终我们决定选择最后一个方案,因为前两个方案在解决由火车导致的存档文件大小增加问题上,似乎不如第三个方案有效。为了避免给未来的工作带来太多麻烦,我决定目前只对地形实施重新生成功能,因为地形是所有区块数据中最大的部分。这样做之后,存档文件大小确实减少了30%。

作为一项额外的安全措施,以确保游戏不会删除任何重要内容,我已进行如下设置:游戏将始终完整存储工厂附近的所有区块,并且不会猜测现有存档中哪些区块可能已被修改。 以下是一个基地的示意图,其周围有大量未修改的区块,这些区块现在将不再保存地形数据。

我们将等待收到测试玩家的积极反馈,以确认是否存在任何未预见的问题,但到目前为止,测试结果非常好。区块数据中还存储了大量可以重新生成的内容,因此进一步减少数据量是完全可能的。 - 米兰